实施DevOps与监控
完成一套简单从环境安装、软件开发到应用发布的简单生命周期可持续的软件、应用管理流程。
背景
-
环境部署:项目实施每次部署环境都需要从头安装服务端软件,需要提一套简单流程让安装软件不需要每次都重复该项工作,并可复用,可迭代,多版本。
-
可持续软件发布:项目实施软件开发、测试、发布没有统一的标准、流程、规范。需要提供一套标准、规范的devops流程。
-
软件监控:项目实施发布后,性能、异常没有很好的监控,需要提供一套完整的监控体系进行监控和异常报警。
-
性能优化:提供异常、性能优化wiki供项目实施参考。
项目实施的环境安装
- 周期:项目实施的环境安装是一次性的。一般在项目初期的开发环境安装和测试环境安装。项目即将发布时环境的安装。
- 差异性:一般主要是实施单位的差异,每个公的环境不用、软件标准、服务器配置不同。
- 重复性:主要体现在多个实施单位、很多中间件、服务器环境是相同的。
使用Ansible进行环境的安装,该开源软件提供web ui界面帮助用户简单、流程化的完成环境的安装。
Ansible Awx的详细介绍参考Ansible Awx的介绍文档。基本的流程如下:
1. 脚本维护与版本控制
- 实施团队或开发团队根据需求更新 Ansible 脚本。
- 更改会通过 Pull Request 或合适的代码审查流程推送到 Git 仓库。
- 使用 Git 标签或分支管理不同版本的 Ansible 脚本,以适应不同版本的软件或不同客户的配置需求。
2. AWX 配置与准备
- 系统管理员或 DevOps 团队为实施团队配置 AWX,包括用户权限、团队、项目和作业模板。
- 在 AWX 中设置相应的 Git 仓库作为项目来源,确保 AWX 可以访问并同步该仓库。
3. 客户环境准备
- 实施团队与客户沟通,收集和配置目标服务器的信息。
- 在 AWX 中设置相应的库存,将客户的服务器信息录入。
- 如果需要,还可以为特定的客户或服务器组设置变量。
4. 软件部署
- 实施团队在 AWX 中选择合适的作业模板,并针对特定的库存执行它,以在客户的服务器上部署软件。
- 可以在 AWX 的 UI 中实时监控部署过程。
- 如有需要,可以调整 Ansible 脚本或 AWX 变量,然后重新运行作业模板。
5. 验证与确认
- 实施团队和/或客户验证软件是否已正确安装并按预期运行。
- 如有问题,返回到步骤 1 或步骤 4 进行调整。
6. 文档和培训
- 为客户提供任何相关的文档,说明如何使用或维护新安装的软件。
- 如有需要,为客户提供相关培训。
7. 支持与维护
- 实施团队或支持团队提供后续的技术支持,帮助客户解决可能出现的任何问题。
- 当软件有更新或需要变更配置时,回到步骤 1 开始新的部署周期。
这个流程提供了从脚本维护到客户软件部署的完整视图,以及后续的支持。当然,每个公司的具体需求和流程可能会有所不同,所以你可能需要根据你的实际情况进行调整。
sequenceDiagram
participant 脚本开发者
participant 系统管理员
participant 实施团队
participant 客户
participant 支持团队
participant 公司
脚本开发者->>系统管理员: 推送更新的 Ansible 脚本到 Git
系统管理员->>系统管理员: 使 AWX 与 Git 仓库同步
公司->>实施团队: 提供 AWX 离线版本
客户->>实施团队: 提供目标服务器详情
实施团队->>系统管理员: 请求 AWX 访问权限
系统管理员->>实施团队: 在 AWX 上授予权限
实施团队->>AWX: 在 AWX 中配置库存
实施团队->>AWX: 运行作业模板进行软件部署
AWX->>客户: 在客户的服务器上部署软件
客户->>实施团队: 提供部署反馈
实施团队->>脚本开发者: 报告脚本中的问题或需要的更改
客户->>支持团队: 报告部署后的问题或提问
支持团队->>客户: 提供解决方案和答案
可持续软件发布
- 周期:软件开发、测试、发布、上线、迭代。
- 客户差异:客户已有devops流程与没有devops流程
- 复杂度:是单体应用还是微服务应用,代码管理是git还是svn。
综合考虑使用jenkins作为构建工具,主要因为jenkins专注于构建,生态完整,老牌开源产品,市场用户大,且PipeLine支持图形页面设计。详细devops流程请参考Devops流程
基于普通环境的devops流程:
sequenceDiagram
participant 项目经理 as 项目经理
participant 开发人员 as 开发人员
participant 测试人员
participant 运维人员 as 运维人员
participant Jenkins
项目经理->>开发人员: 定义需求
开发人员->>项目经理: 讨论技术可行性
测试人员->>项目经理: 了解需求为测试做准备
开发人员->>开发人员: 本地编码
开发人员->>Jenkins: 推送代码至版本控制系统
开发人员->>开发人员: 代码审查
Jenkins->>开发人员: 触发CI流程
开发人员->>Jenkins: 关注构建与测试结果
Jenkins->>开发人员: 执行静态代码检查 & 单元测试
Jenkins->>测试人员: 报告代码覆盖率
测试人员->>Jenkins: 使用JMeter进行性能测试
开发人员->>Jenkins: 基于性能结果优化代码
运维人员->>Jenkins: 配置预生产环境
测试人员->>Jenkins: 在预生产环境执行集成测试
运维人员->>Jenkins: 部署至生产环境
测试人员->>运维人员: 验证生产环境部署
运维人员->>Jenkins: 监控生产环境
开发人员->>测试人员: 基于生产反馈修复问题
项目经理->>所有人: 组织项目回顾
所有人->>项目经理: 分享反馈与经验教训
基于k8s部署的环境
sequenceDiagram
participant 项目经理 as 项目经理
participant 开发人员 as 开发人员
participant 测试人员
participant 运维人员 as 运维人员
participant Jenkins
participant K8s as Kubernetes
项目经理->>开发人员: 定义需求
开发人员->>项目经理: 讨论技术可行性
测试人员->>项目经理: 了解需求为测试做准备
开发人员->>开发人员: 本地编码
开发人员->>Jenkins: 推送代码至版本控制系统
开发人员->>开发人员: 代码审查
Jenkins->>开发人员: 触发CI流程
开发人员->>Jenkins: 关注构建与测试结果
Jenkins->>开发人员: 执行静态代码检查 & 单元测试
Jenkins->>测试人员: 报告代码覆盖率
测试人员->>Jenkins: 使用JMeter进行性能测试
开发人员->>Jenkins: 基于性能结果优化代码
Jenkins->>K8s: 使用Docker构建容器镜像
K8s->>Jenkins: 确认镜像构建成功
运维人员->>K8s: 配置预生产K8s环境
Jenkins->>K8s: 在K8s预生产环境部署应用
测试人员->>K8s: 在预生产环境执行集成测试
运维人员->>K8s: 部署应用至K8s生产环境
测试人员->>运维人员: 验证K8s生产环境部署
运维人员->>K8s: 使用K8s监控生产环境
开发人员->>测试人员: 基于生产反馈修复问题
项目经理->>所有人: 组织项目回顾
所有人->>项目经理: 分享反馈与经验教训
监控
搭建一个监控体系来监控 Kubernetes (K8s) 上运行的 Spring Boot 应用需要考虑几个方面:指标收集、日志收集、告警以及可视化。在本指南中,我们将使用 SkyWalking、Prometheus、Grafana 和 Elasticsearch (ES) 来完成这一任务。以下是如何整合这些组件的基本步骤:
-
SkyWalking:用于分布式追踪,提供深入的性能指标和应用拓扑视图。
-
Prometheus:用于收集和存储指标数据。
-
Grafana:用于可视化 Prometheus 和 SkyWalking 的数据。
-
Elasticsearch (ES):用于存储和查询日志数据。
步骤如下:
1. 搭建 SkyWalking
-
在 Kubernetes 集群中部署 SkyWalking。
-
修改 Spring Boot 应用以包含 SkyWalking Java Agent。这通常涉及将 Java Agent JAR 文件添加到 JVM 的启动参数中,并配置 Agent 连接到 SkyWalking OAP 服务器。
-
skyWalking可观测sql的链路执行,java线程的执行链路,http请求的执行链路、打印log日志。
2. 搭建 Prometheus
-
使用 prometheus-operator 在 Kubernetes 上部署 Prometheus。它允许更容易地管理 Prometheus 实例,并与 Alertmanager 和其他相关组件一起工作。
-
为 Spring Boot 应用配置 micrometer,使其发布 Prometheus 格式的指标。
-
定义 ServiceMonitor 或 PodMonitor 资源,让 Prometheus 自动发现并抓取 Spring Boot 应用的指标。
3. 搭建 Grafana
-
在 Kubernetes 上部署 Grafana。
-
配置 Grafana 使用 Prometheus 作为数据源。
-
导入或创建用于 Spring Boot 应用和 Kubernetes 的仪表板。
4. 集成 Elasticsearch
-
在 Kubernetes 上部署 Elasticsearch。
-
配置 Spring Boot 使用 logback 或其他日志框架将日志发送到 Elasticsearch。
-
可以使用 Kibana 或 Grafana 为 Elasticsearch 创建仪表板,以可视化日志数据。
5. 警告和通知
-
使用 Prometheus 的 Alertmanager 来定义警告规则和接收警告。
-
配置 Alertmanager 将警告发送到所需的通知渠道,如 Slack、Email 等。
此步骤只是概述,具体的实施可能涉及更多的配置和调整,特别是考虑到 Kubernetes 和 Spring Boot 应用的特定需求和环境。确保在生产环境部署前进行充分的测试。
更多业务链路日志可以通过自定义skywalking自定义封装
kibana是否使用可以再讨论,应该不需要复杂的日志查询
评论