Linux 系统监控和告警是保障系统稳定运行的重要手段,需要掌握各种监控工具和告警机制。
系统监控工具:
- CPU 监控:
- top:实时查看 CPU 使用率和进程信息
- htop:交互式进程查看器,功能更强大
- mpstat:显示各个 CPU 核心的使用情况
- sar:系统活动报告,可记录历史数据
- vmstat:报告虚拟内存统计信息
- 内存监控:
- free:显示内存使用情况
- vmstat:查看内存交换、缓存等信息
- ps aux:查看进程的内存占用
- pmap:查看进程的内存映射
- 磁盘监控:
- df:查看磁盘空间使用情况
- du:查看目录或文件的大小
- iostat:查看磁盘 I/O 统计信息
- iotop:实时查看磁盘 I/O 使用情况
- 网络监控:
- ifconfig/ip:查看网络接口配置
- netstat/ss:查看网络连接和端口监听
- nethogs:按进程查看网络带宽使用
- tcpdump:抓包分析网络流量
- iftop:实时显示网络带宽使用
- 进程监控:
- ps:查看进程状态
- top/htop:实时监控进程
- pgrep:查找进程 ID
- pidstat:监控进程资源使用
性能分析工具:
- strace:跟踪系统调用和信号
- ltrace:跟踪库函数调用
- perf:性能分析工具
- sysdig:系统级监控和故障排查
- eBPF:扩展伯克利数据包过滤器
日志监控:
- /var/log/messages:系统主日志
- /var/log/syslog:系统日志(Debian/Ubuntu)
- /var/log/auth.log:认证日志
- /var/log/secure:安全日志(CentOS/RHEL)
- journalctl:systemd 日志查看工具
- logrotate:日志轮转工具
监控告警系统:
- Nagios:企业级监控系统
- Zabbix:分布式监控系统
- Prometheus:时序数据库和监控系统
- Grafana:数据可视化平台
- ELK Stack(Elasticsearch、Logstash、Kibana):日志分析和可视化
- Datadog:云监控平台
- New Relic:应用性能监控
Prometheus 监控:
- 数据采集:使用 Exporter 采集指标
- 常用 Exporter:
- node_exporter:系统指标
- mysqld_exporter:MySQL 指标
- nginx_exporter:Nginx 指标
- redis_exporter:Redis 指标
- 配置文件:/etc/prometheus/prometheus.yml
- 告警规则:使用 PromQL 定义告警条件
- 告警管理:Alertmanager 处理告警通知
Grafana 可视化:
- 数据源配置:支持 Prometheus、Elasticsearch 等
- 仪表板:创建自定义监控面板
- 告警:基于可视化图表设置告警
- 模板:使用变量创建动态仪表板
告警通知方式:
- 邮件:SMTP 邮件通知
- 短信:短信网关
- 即时通讯:Slack、钉钉、企业微信
- 电话:语音通知
- Webhook:自定义 Web 回调
告警策略:
- 告警级别:Critical、Warning、Info
- 告警阈值:根据业务需求设置合理阈值
- 告警抑制:避免告警风暴
- 告警聚合:相关告警合并通知
- 告警升级:长时间未处理自动升级
自定义监控脚本:
- 编写 Shell/Python 脚本采集指标
- 使用 cron 定时执行
- 输出格式:支持 Nagios、Prometheus 等格式
- 示例:
bash
#!/bin/bash # 检查磁盘使用率 DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $DISK_USAGE -gt 80 ]; then echo "CRITICAL: Disk usage is ${DISK_USAGE}%" exit 2 fi echo "OK: Disk usage is ${DISK_USAGE}%" exit 0
监控最佳实践:
- 全面监控:覆盖 CPU、内存、磁盘、网络等关键指标
- 合理采样:避免监控数据量过大
- 告警分级:区分紧急和一般告警
- 告警收敛:避免重复告警
- 定期维护:清理过期数据,更新监控规则
- 文档记录:维护监控配置文档
- 测试验证:定期测试告警机制
常见监控指标:
- 系统指标:CPU 使用率、内存使用率、磁盘使用率、网络流量
- 应用指标:请求数、响应时间、错误率、并发数
- 业务指标:订单量、用户数、交易额
故障排查流程:
- 确认告警信息
- 查看系统监控数据
- 检查相关服务状态
- 分析日志文件
- 定位问题根因
- 实施修复措施
- 验证修复效果
- 总结经验教训