第5章:运维(Operations)
一、导读
1.1 本章学习目标
第5章讲解生产环境的运维实践:监控、告警、日志、故障排查和应急预案。
1.2 为什么第五章如此重要
运维是软件生命周期的最后一环。好的运维实践可以快速发现和解决问题,保障系统稳定运行。
1.3 核心问题引导
如何设计有效的监控和告警?
日志管理有哪些最佳实践?
故障排查的系统方法是什么?
应急预案如何制定?
二、核心概念详解
5.1 监控与告警
监控三支柱:
- 指标(Metrics):CPU、内存、QPS、延迟
- 日志(Logs):事件记录
- 链路追踪(Traces):请求在系统中的路径
告警原则:
- 可操作:每个告警都有对应的处理方案
- 分级:P0(立即处理)→ P3(工作时间处理)
- 不滥报:避免告警疲劳5.2 日志管理
日志最佳实践:
- 结构化日志:JSON 格式
- 日志级别:DEBUG → INFO → WARN → ERROR
- 上下文信息:请求ID、用户ID、时间戳
- 集中式日志:ELK Stack、Loki
示例:
{"level":"ERROR","ts":"2024-01-15T14:30:00Z",
"msg":"Payment failed","requestId":"abc123",
"userId":"user456","error":"timeout"}5.3 故障排查
系统化排查方法:
1. 确认问题:什么症状?什么时候开始?
2. 收集信息:日志、指标、链路追踪
3. 假设原因:列出可能的原因
4. 验证假设:逐一验证
5. 修复问题:实施修复
6. 事后分析:根因分析,防止复发5.4 应急预案
应急预案模板:
- 场景描述
- 影响范围
- 处理步骤
- 回滚方案
- 联系人
定期演练:
- 每季度一次故障演练
- 模拟真实故障场景
- 验证预案的有效性三、实战案例
5.1 监控告警配置
yaml
# Prometheus 告警规则
groups:
- name: app-alerts
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate detected"
description: "Error rate is {{ $value }} errors/sec"四、本章小结
运维实践保障系统稳定运行。监控告警要及时准确,日志要结构化集中,故障排查要系统化,应急预案要定期演练。
五、思考与练习
如何设计有效的告警规则?
日志管理的最佳实践是什么?
故障排查的系统方法是什么?
如何制定和演练应急预案?
可观测性和监控有什么区别?