MorenaLustosa/devops-incident-response-lab

GitHub: MorenaLustosa/devops-incident-response-lab

一个基于 Linux 环境的 DevOps 事故响应实战实验室,通过模拟生产环境数据损坏事故,训练值班工程师的系统排查和故障恢复能力。

Stars: 0 | Forks: 0

# 事故调查:billing-api 数据损坏 ## 📌 背景 这是一个在 Linux 环境下进行的故障排除实践实验室,模拟了 一家虚构公司(MariaLazaraCloud,一家 B2B SaaS 计费公司)的 真实生产事故。目标是在没有任何前期文档的情况下,作为 值班 DevOps Engineer 调查、诊断并修复遗留系统中的故障。 ## 🚨 状况 - **受影响的服务:** `billing-api`(支付 API) - **症状:** - 应用程序正在运行,但拒绝了所有交易 - 日志报告数据损坏错误 - Dashboard 显示状态为“degraded” - **我的角色:** 值班 DevOps,对系统结构没有先前的了解,需要从零开始调查。 ## 🔍 诊断 — 逐步进行 1. **环境侦察** 我使用 `uname -a` 检查了系统的版本和架构,以 确认我在正确的服务器上,并识别可能的兼容性限制。 2. **检查进程** 我使用 `ps aux` 和 `ps aux | grep billing` 确认 服务正在运行(活动进程,没有异常的 CPU/内存消耗), 这表明问题不在进程本身。 3. **分析日志** 我使用 `find / -type d -name "billing"` 定位了日志,并使用 `tail app.log` 阅读了最新的条目。日志显示了 重复的“Data corruption detected”错误。 4. **实时监控** 我使用 `tail -f app.log` 确认错误是连续的 (大约每 5 秒一次),而不是过去发生的孤立事件。 5. **调查近期变更 (GMUD)** 我使用 `find / -name "GMUD-*"` 定位了变更文档,并 使用 `cat` 阅读了内容。GMUD 记录了从 `/opt/seeds` 目录到 `/data/billing` 的数据迁移,并 已经制定了回滚计划。 6. **检查变更执行日志** 通过 `cat change-log.txt`,我确认了迁移期间执行的命令 (`mkdir`、`cp`、配置更改和服务重启)。 7. **验证当前配置** 我定位并阅读了 `billing-config.yml` 文件,确认 `data_directory` 指向了新目录(`/data/billing`)。 8. **检查数据目录** 通过 `ls -la`,我确认该目录存在,且具有 正确的权限——从而排除了权限问题。 9. **验证数据完整性** 在使用 `cat` 读取文件时,我发现了错误信息而不是 真实数据(`ERROR_MIGRATION_INCOMPLETE_DATA_CORRUPTED_2024`), 从而确认了损坏。 10. **验证原始数据** 我定位了 `/opt/seeds` 并通过 `cat` 确认,原始 数据完好无损,随时可用于回滚。 ## 🎯 根本原因 在 GMUD 中执行的从 `/opt/seeds` 到 `/data/billing` 的数据迁移导致目标位置出现了损坏的文件。迁移后执行的基础验证并没有检查数据的真实完整性,而仅仅是检查复制过程是否完成——这使得服务能够带着损坏的数据投入生产环境。 ## 🛠️ 解决方案 1. 我使用 `diff` 对比了当前配置与备份,确认 唯一的区别是 `data_directory` 字段。 2. 在进行任何更改之前,我创建了配置的额外备份 (`cp billing-config.yml billing-config.yml.pre-rollback`)。 3. 我使用 `chmod 644` 临时调整了文件权限 以允许编辑。 4. 我使用 `nano` 编辑了文件,将 `data_directory` 恢复为 `/opt/seeds`。 5. 我使用 `chmod 444` 恢复了原始的严格权限。 6. 我使用 `kill` 停止了旧进程并重启了服务。 7. 我通过使用 `tail -f` 监控日志验证了恢复情况,确认 交易已成功处理。 ## 📊 指标验证 - 回滚前记录的损坏错误:**15** (`grep "Data corruption detected" app.log | wc -l`) - 回滚后成功验证的交易:**8** (`grep "Transaction validation completed successfully" app.log | wc -l`) ## 💡 经验教训 - 迁移后的验证需要检查**数据的真实完整性**, 而不仅仅是进程是否在没有错误的情况下运行。 - 每一个 GMUD 都应该要求一个经过测试的回滚计划,而不仅仅是 写在文档里。 - 日志是任何事故调查中第一真相来源——永远要从它们开始。 - Linux 的基本命令(`find`、`grep`、`diff`、`tail -f`) 足以解决遗留系统中的大部分事故。 ## 🧰 使用的命令 `uname -a`、`ps aux`、`grep`、`find`、`tail` / `tail -f`、`cat`、`diff`、 `chmod`、`cp`、`nano`、`kill`、`wc -l` ## 🙏 致谢 实验室基于 [Maria Lazara](https://github.com/marialazara/linux-essentials) 的 *《DevOps 基础 Linux》* 教材。
标签:BurpSuite集成, Cutter, SRE, 偏差过滤, 故障排查, 生产事故复盘, 运维