elizabeth-ikechukwu/technical-support-portfolio
GitHub: elizabeth-ikechukwu/technical-support-portfolio
一个在 AWS EC2 上运行的实战化事件响应与监控仿真项目,演示从检测到自动化修复的完整流程。
Stars: 0 | Forks: 0
# 技术支持作品集
**生产级事件响应与监控模拟**
这是一个实践性的技术支持工程项目,展示了在真实的 AWS 生产环境中,端到端的事件处理流程——从前瞻性检测、自动化修复、根因分析到永久预防。
## 实时环境
| 组件 | 详情 |
|---|---|
| 应用 URL | https://support.lizzycloudlab.online |
| 服务器 | AWS EC2 Ubuntu t3.micro |
| 主机名 | support-simulation-server |
| 监控面板 | Datadog -- Support Simulation - Server Health |
## 技术栈
| 工具 | 作用 |
|---|---|
| AWS EC2 Ubuntu | 生产服务器 |
| Node.js | 应用 runtime |
| Nginx | 反向代理及 SSL 终止 |
| Certbot | SSL 证书管理 |
| Datadog | 监控、报警、日志管理、Synthetics |
| Slack | 事件通知渠道 |
| Systemd | 服务管理与自动重启 |
| Bash | 自动化修复与预防脚本 |
| Cron | 定时自动化任务 |
| Logrotate | 日志轮转与管理 |
## 架构
```
Internet
│
▼
DNS (support.lizzycloudlab.online)
│
▼
AWS EC2 -- support-simulation-server
│
├── Nginx (port 443/80)
│ └── Reverse proxy → Node.js app (port 3000)
│
├── Node.js App (systemd managed)
│ ├── GET /
│ ├── GET /health
│ └── GET /api/tasks
│
├── Datadog Agent
│ ├── Host metrics (CPU, memory, disk, network)
│ ├── Nginx integration
│ ├── Log collection
│ └── Synthetics HTTP check
│
└── Bash Scripts
├── incident-response-nginx.sh
├── cpu-remediation.sh
├── cleanup-disk.sh
└── remediate-app.sh
```
## 监控设置
### Datadog 监视器
| 监视器 | 指标 | 报警阈值 | 警告阈值 |
|---|---|---|---|
| CPU 使用率过高 | system.cpu.user | > 85% | > 70% |
| 内存使用率过高 | system.mem.pct_usable | < 15% | < 20% |
| 磁盘空间危急 | system.disk.in_use | > 80% | > 70% |
| Nginx 宕机 | nginx.net.connections | < 1 | < 2 |
| 应用健康检查 | Synthetics HTTP | non-200 响应 | - |
所有监视器都会将报警路由到 Slack 的 `#LizzyCloudLab-incidents` 频道,并在每条报警消息中嵌入结构化的调查步骤。
### Datadog 面板
**Support Simulation - Server Health** —— 实时面板,在单一视图中展示 CPU 使用率、内存使用率、磁盘使用率、Nginx 连接数、系统负载以及日志流。
## 事件模拟
在此环境中模拟、调查并解决了四个生产级事件。每个事件都遵循完整的生命周期:检测 → 调查 → 解决 → 预防。
### INC-001 -- Nginx 服务故障 (P1 - 紧急)
| 指标 | 详情 |
|---|---|
| 日期 | 2026年4月12日 |
| 检测 | Datadog Nginx 监视器 -- 2 分钟 |
| 解决 | 自动化脚本 -- 13 分钟 |
| SLA | 达标 |
**事件经过:** Nginx 服务停止,导致面向客户的应用下线。Datadog 在 2 分钟内检测到中断,并发送了 Slack 报警。自动化响应脚本验证了配置,重启了 Nginx,并确认了服务已恢复。
**脚本:** `incident-response-nginx.sh`
**完整报告:** [INC-001-nginx-service-failure.md](./incidents/INC-001-nginx-service-failure.md)
### INC-002 -- CPU 使用率过高:失控进程 (P2 - 高)
| 指标 | 详情 |
|---|---|
| 日期 | 2026年4月13日 |
| 检测 | Datadog CPU 监视器 -- 5.5 分钟 |
| 解决 | 进程终止 -- 3 分钟 |
| SLA | 达标 |
**事件经过:** 两个失控的压力测试 worker 进程消耗了两个 vCPU 上 95-98% 的 CPU。Datadog 在平均 CPU 达到 90.859% 时触发了报警。调查通过 `ps aux` 确定了导致问题的 PID。部署了 CPU 修复脚本,并通过 cron 每 5 分钟调度一次,以自动防止此类问题复发。
**脚本:** `cpu-remediation.sh`
**完整报告:** [INC-002-high-cpu-runaway-process.md](./incidents/INC-002-high-cpu-runaway-process.md)
### INC-003 -- 磁盘空间危急:失控日志文件 (P2 - 高)
| 指标 | 详情 |
|---|---|
| 日期 | 2026年4月13日 |
| 检测 | Datadog 磁盘监视器 -- 11 分钟 |
| 解决 | 清理脚本 -- 43 分钟 |
| SLA | 达标 |
| 额外发现 | 发现并纠正了 Datadog 监视器配置错误 |
**事件经过:** 一个失控的日志文件在 `/tmp` 中占用了 1.6G 空间,将根分区使用率推高至 96%。Datadog 在磁盘使用率达到 95.8% 时触发了报警。调查使用 `df -h` 和 `du -sh` 找出了罪魁祸首文件。清理脚本删除了大文件并清除了 journal 日志。配置了 Logrotate 和 cron 作业以实现永久性的自动化预防。
**关键发现:** 在调查过程中发现了一个 Datadog 监视器的配置错误——该监视器之前评估的是 loop 设备,而不是根分区。通过将监视器范围限定为 `device_label:cloudimg-rootfs` 纠正了此问题。
**脚本:** `cleanup-disk.sh`
**完整报告:** [INC-003-disk-space-critical.md](./incidents/INC-003-disk-space-critical.md)
### INC-004 -- 应用 502 Bad Gateway (P2 - 高)
| 指标 | 详情 |
|---|---|
| 日期 | 2026年4月14日 |
| 检测 | Datadog Synthetics HTTP 检查 -- 1 分钟 |
| 解决 | 自动化修复脚本 -- 17 分钟 |
| SLA | 达标 |
**事件经过:** Node.js 应用进程停止,而 Nginx 继续运行,导致所有请求返回 502 Bad Gateway。Datadog Synthetics 在 1 分钟内检测到了 non-200 响应。调查通过 `ss -tlnp` 确认 3000 端口上没有任何程序在监听。自动化修复脚本重启了服务,并在无需人工干预的情况下确认了 HTTP 200 的状态恢复。
**核心洞察:** 502 错误表明上游应用无法访问——而不是 Nginx 本身损坏。对于初始分诊,端口检查(`ss -tlnp`)比日志分析更快。
**脚本:** `remediate-app.sh`
**完整报告:** [INC-004-502-bad-gateway.md](./incidents/INC-004-502-bad-gateway.md)
## 自动化脚本
| 脚本 | 用途 | 触发方式 |
|---|---|---|
| `incident-response-nginx.sh` | 验证 Nginx 配置,重启服务,验证恢复情况 | 手动或值班响应 |
| `cpu-remediation.sh` | 识别并杀掉 CPU 占用超过 80% 的进程 | Cron,每 5 分钟 |
| `cleanup-disk.sh` | 删除 /tmp 中的大文件,清除旧的 journal 日志 | Cron,每天凌晨 02:00 WAT |
| `remediate-app.sh` | 检查 endpoint 健康状态,检测到 non-200 时重启应用 | Cron,每 5 分钟 |
所有脚本都会将带有时间戳的输出记录到 `/var/log/` 中,以供审计追踪。
## 仓库结构
```
technical-support-portfolio/
├── incidents/
│ ├── INC-001-nginx-service-failure.md
│ ├── INC-002-high-cpu-runaway-process.md
│ ├── INC-003-disk-space-critical.md
│ └── INC-004-502-bad-gateway.md
├── scripts/
│ ├── incident-response-nginx.sh
│ ├── cpu-remediation.sh
│ ├── cleanup-disk.sh
│ └── remediate-app.sh
├── screenshots/
│ ├── incident-1-nginx-down/
│ ├── incident-2-high-cpu/
│ ├── incident-3-disk-space/
│ └── incident-4-502-bad-gateway/
└── README.md
```
## 展示的核心技能
- 使用 Datadog 监视器和 Synthetics 进行前瞻性事件检测——无需等待客户报告
- 使用 Linux 命令进行结构化的事件调查——`systemctl`, `journalctl`, `ss`, `top`, `ps aux`, `df`, `du`
- 使用 Bash 脚本进行自动化修复——生产环境中无需人工干预修复
- 使用 cron、logrotate 和 systemd 重启策略实现永久预防
- 专业化的事件记录,包含 SLA 指标、时间线、根因分析和经验总结
- 在实时事件调查过程中识别并纠正监控配置错误
- 通过 Slack 进行报警路由,并在报警消息中嵌入结构化的调查步骤
## 下一步计划
- INC-005:内存耗尽模拟——即将推出
- Runbooks:针对所有 4 类事件的内部值班 Runbook
- 项目 2:针对 5 种常见 SaaS 支持场景的面向客户的故障排除 Runbook
*构建与维护:Elizabeth Ikechukwu -- 技术支持工程师 | DevOps 与云计算背景*
*LinkedIn: https://www.linkedin.com/in/ikechukwu-elizabeth*
标签:AWS EC2, Bash脚本, Datadog, Nginx, 库, 应急响应, 自动化运维, 运维监控