跳至主内容

如何开发日报系统追踪混沌测试结果

· 1 分钟阅读
Lei Li
Senior software engineer at Digital China
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

如何开发日报系统追踪混沌测试结果
如何开发日报系统追踪混沌测试结果

Chaos Mesh 是一个面向云原生的混沌工程平台,可在 Kubernetes 环境中编排混沌实验。它通过模拟网络故障、文件系统故障和 Pod 故障等问题,帮助您测试系统的韧性。每次混沌实验后,您可以通过查看日志来检查测试结果,但这种方式既不直观也不高效。因此,我决定开发一个日报系统,自动分析日志并生成报告,从而轻松检查日志并定位问题。

本文将分享构建日报系统的具体方法,以及我在开发过程中遇到的问题和解决方案。

在 Kubernetes 上部署 Chaos Mesh

Chaos Mesh 专为 Kubernetes 设计,这也是它能针对特定应用向文件系统、Pod 或网络注入故障的重要原因。

早期文档中,Chaos Mesh 提供了两种在本地快速部署虚拟 Kubernetes 集群的方法:kindminikube。通常只需一行命令即可部署 Kubernetes 集群并安装 Chaos Mesh。但存在两个问题:

  • 本地启动 Kubernetes 集群会影响网络相关的故障类型测试

  • 中国大陆用户拉取 Docker 镜像可能极慢甚至超时

若使用提供的 kind 脚本部署 Kubernetes 集群,所有节点均为虚拟机(VM),这会增加离线拉取镜像的难度。解决方案是改用多台物理机部署集群,每台物理机作为工作节点。为加速镜像拉取,可提前使用 docker load 命令预加载所需镜像。除上述问题外,您可按文档安装 kubectlHelm

注意:最新安装部署指南请参考 Chaos Mesh 快速入门

部署 TiDB

下一步是在 Kubernetes 上部署 TiDB。我使用 TiDB Operator 简化流程,具体步骤参见 在 Kubernetes 中开始使用 TiDB Operator

该过程中有两点需要特别说明:

  • 首先需安装自定义资源定义(CRDs)来实现 TiDB Operator 的不同组件,否则安装时会报错

  • 使用 Kubernetes 分布式块存储系统 Longhorn 为集群创建本地持久卷(PV)。这样无需预先创建 PV:当 Pod 被调度时,PV 会自动创建并挂载

我遇到的最大问题是部署服务时镜像拉取可能极慢。如果 Kubernetes 集群节点是虚拟机,请提前拉取所需镜像并加载到每台机器的 Docker:

## Pull required images on a machine with a good network connection
docker pull pingcap/tikv:latest
docker pull pingcap/tidb:latest
docker pull pingcap/pd:latest

## Export images and save them to each machine in the Kubernetes cluster
docker save -o tikv.tar pingcap/tikv:latest
docker save -o tidb.tar pingcap/tidb:latest
docker save -o pd.tar pingcap/pd:latest

## Load images to each machine
docker load < tikv.tar
docker load < tidb.tar
docker load < pd.tar

上述命令使您能够使用本地 Docker 仓库中的 TiDB 镜像部署最新集群,避免从远程仓库拉取。此方法同样适用于前述 Chaos Mesh 安装。若不确定需要哪些镜像,可先用 Helm 安装 Chaos Mesh 触发安装流程,再通过 kubectl describe 命令验证:

## Check pods that are deployed in a specific namespace.
kubectl describe pods -n tidb-test

镜像拉取过程通常耗时最长。如果 Pod 正在调度至节点,请稍后检查。

运行混沌实验

要运行混沌实验,首先需要通过 YAML 文件定义实验,再使用 kubectl apply 启动。本示例中,我使用 PodChaos 创建了一个模拟 Pod 崩溃的实验。具体操作请参考运行混沌实验

生成日报

收集日志

在 TiDB 集群上运行混沌实验时,通常会返回大量错误日志。执行 kubectl logs 命令收集这些日志:

kubectl logs <podname> -n tidb-test --since=24h >> tidb.log

tidb-test 命名空间中指定 Pod 过去 24 小时生成的所有日志将保存至 tidb.log 文件。

过滤错误与警告

此步骤需从日志中筛选错误和警告信息。有两种方案:

  • 使用文本处理工具(如 awk),这需要熟练掌握 Linux/Unix 命令

  • 编写脚本,如果不熟悉 Linux/Unix 命令,这是更好的选择

绘制图表

绘图工具选用 gnuplot 命令行图表工具。下例中导入压测结果并创建折线图,展示特定 Pod 不可用时每秒查询量(QPS)的变化。由于混沌实验周期性执行,QPS 数量呈现规律性波动:骤降后快速恢复正常。

QPS折线图
QPS折线图

生成PDF报告

目前尚无生成 Chaos Mesh 报告或分析结果的现成 API。我选择生成 PDF 格式报告确保跨浏览器可读性。实践中采用 gopdf 支持库创建 PDF 文件,其插入图片和绘制表格的功能完美满足需求。

通过后台任务工具 crond 每日清晨执行命令生成报告,确保工作日开始时即可查阅最新日报。

构建日报Web应用

为使报告更易读易访问,通过 Web 应用查看报告体验更佳。最初计划添加后端 API 跟踪报告生成时间,但考虑到仅需识别需深度排查的报告(文件名已包含关键信息,如 report-2021-07-09-bad.pdf),最终大幅简化系统设计与复杂度。

后端接口优化与报告内容增强仍是未来方向,但当前可用的日报系统已满足基本需求。

本案例使用 Vue.js 搭建 Web 应用,配合 antd UI 库。将自动生成的报告保存至静态资源目录 static 后,前端页面即可读取渲染。具体实现参考在 vue-cli 3 中使用 antd

下图是我开发的日报Web应用示例。红色卡片表示运行混沌实验后出现异常,需要立即查看测试报告。

每日报告系统的 Web 应用
每日报告系统的 Web 应用

点击红色卡片即可打开报告,如下图所示。我使用了 pdf.js 来查看 PDF 文件。

PDF 格式的每日报告
PDF 格式的每日报告

总结

Chaos Mesh 能够模拟大多数云原生应用可能遇到的故障。在本文中,我创建了一个 PodChaos 实验,并观察到当 Pod 不可用时,TiDB 集群的 QPS 受到了影响。通过分析日志,我可以增强系统的健壮性和高可用性。我构建了一个 Web 应用来生成每日报告,用于故障排查和调试。你也可以根据需要自定义报告。

我们的团队也在进行一个使 TiDB 兼容 PostgreSQL 的项目。如果你对此感兴趣并希望做出贡献,欢迎认领一个 issue 并开始参与。

本文原载于 The New Stack