19.5.7 典型场景与落地实践
本节聚焦监控告警与可观测性体系在典型场景中的落地实践,覆盖系统层、应用层、中间件与平台化组件,形成从采集、分析到告警闭环的标准范式。
- 主机与系统基础监控落地
- 原理草图
mermaid flowchart LR host[Linux主机] --> nodeexp[Node Exporter] nodeexp --> prom[Prometheus] prom --> graf[Grafana] prom --> am[Alertmanager] am --> chat[IM/邮件/工单] -
安装与配置(Node Exporter)
```bash
# 安装
useradd -r -s /sbin/nologin nodeexp
tar -zxvf node_exporter-1.6.1.linux-amd64.tar.gz -C /opt/
ln -s /opt/node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/node_exportersystemd#
cat >/etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
User=nodeexp
ExecStart=/usr/local/bin/node_exporter --web.listen-address=":9100"
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable --now node_exporter
- Prometheus 采集示例yaml/etc/prometheus/prometheus.yml#
scrape_configs:
- job_name: node
static_configs:
- targets: ['10.0.0.11:9100','10.0.0.12:9100']
labels:
env: prod
biz: order
- 关键命令与解释bashCPU/负载#
uptime # 负载
mpstat -P ALL 1 # CPU各核利用率内存#
free -m # 内存/缓存
磁盘#
iostat -x 1 # 磁盘IO延迟、利用率
df -h # 空间网络#
ss -s # 连接汇总
sar -n DEV 1 # 网络吞吐/丢包
`` - 排错要点 - 采集不到:检查curl localhost:9100/metrics`,确认端口与防火墙。
- 指标缺失:核对 Exporter 版本与权限(/proc 访问)。
- 练习
- 为某台主机配置 CPU iowait>20% 5分钟告警,并在 Grafana 中展示。 -
Linux故障场景与可观测性实践
- 高负载定位示例
bash top -c # 观察占用进程 pidstat -u -p <pid> 1 perf top # 采样热点函数 - 磁盘写放大排查
bash iostat -x 1 # await、svctm高 lsof | wc -l # FD过多 - 网络异常排查
bash ss -tn state established '( sport = :80 )' conntrack -L | head -
练习
- 人为触发 CPU 压力(
stress-ng --cpu 2 --timeout 60s)观察告警触发与恢复。
- 人为触发 CPU 压力(
-
MySQL监控落地
- 架构草图
mermaid flowchart LR mysqld[MySQL] --> exp[mysqld_exporter] exp --> prom[Prometheus] prom --> graf[Grafana] -
安装与采集
```bash
# 创建监控账号
mysql -uroot -p -e "CREATE USER 'exporter'@'%' IDENTIFIED BY 'exp123';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO 'exporter'@'%';"启动 exporter#
export DATA_SOURCE_NAME="exporter:exp123@(127.0.0.1:3306)/"
./mysqld_exporter --web.listen-address=":9104"
- 慢查询示例bash开启慢日志#
mysql -uroot -p -e "SET GLOBAL slow_query_log=ON;
SET GLOBAL long_query_time=1;"
tail -f /var/lib/mysql/slow.log
`` - 排错与建议 - 主从延迟:SHOW SLAVE STATUS\G关注Seconds_Behind_Master。 - 连接池耗尽:SHOW STATUS LIKE 'Threads_connected';` 对比 max_connections。
- 练习
- 编写告警:主从延迟 > 30s 持续 3分钟。 -
Nginx监控落地
- 安装与 stub_status
nginx # /etc/nginx/conf.d/status.conf server { listen 8080; location /stub_status { stub_status on; allow 127.0.0.1; deny all; } }
bash nginx -t && systemctl reload nginx curl http://127.0.0.1:8080/stub_status - 指标采集(nginx-exporter)
bash ./nginx-prometheus-exporter --nginx.scrape-uri=http://127.0.0.1:8080/stub_status - 排错
- 5xx 升高:
tail -f /var/log/nginx/error.log,检查 upstream。
- 5xx 升高:
-
练习
- 设置 5xx 比例 > 2% 的告警规则。
-
Redis监控落地
- 采集与关键命令
bash redis-cli INFO memory redis-cli INFO replication redis-cli --latency - redis_exporter 启动
bash ./redis_exporter --redis.addr=redis://127.0.0.1:6379 --web.listen-address=":9121" - 排错
- 内存逼近:
maxmemory检查与淘汰策略。
- 内存逼近:
-
练习
- 统计大 Key:
redis-cli --bigkeys并设定告警阈值。
- 统计大 Key:
-
Nacos与服务治理监控落地
- 指标采集示例
bash curl -s http://127.0.0.1:8848/nacos/actuator/prometheus | head - 关键告警
- 健康实例比例 < 90%
- 排错
- 心跳异常:检查客户端网络与 Nacos 日志。
-
练习
- 为配置发布失败计数器设置告警。
-
Kafka监控落地
- 采集示例(JMX Exporter)
```yaml
# /opt/kafka/jmx_exporter/config.yml
rules:- pattern: "kafka.server
<>Count"
name: kafka_topic_bytes_in_total
labels:
topic: "$1"
bash
java -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.18.0.jar=9404:/opt/kafka/jmx_exporter/config.yml -jar kafka.jar
```
- pattern: "kafka.server
- 排错
- Lag 突增:
kafka-consumer-groups.sh --bootstrap-server ... --describe
- Lag 突增:
-
练习
- 对关键 Topic 配置 Lag>10000 告警。
-
ZooKeeper监控落地
- 四字命令
bash echo mntr | nc 127.0.0.1 2181 | head echo srvr | nc 127.0.0.1 2181 - 排错
- Leader 频繁切换:检查磁盘与网络延迟。
-
练习
- 监控
zk_avg_latency并设置阈值。
- 监控
-
Keepalived/HAProxy/ProxySQL监控落地
- Keepalived
bash systemctl status keepalived journalctl -u keepalived -f - HAProxy stats
haproxy listen stats bind *:8404 stats enable stats uri /stats - ProxySQL
sql -- 管理端 mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "SELECT * FROM stats_mysql_connection_pool;" -
练习
- 监控 VIP 漂移次数与 HAProxy 后端错误率。
-
Docker与Kubernetes监控落地
- Docker
bash docker stats docker inspect <container_id> | jq '.[0].State' - Kubernetes
bash kubectl top nodes kubectl top pods -A kubectl describe pod <pod> - 排错
- OOMKilled:
kubectl describe pod查看 lastState。
- OOMKilled:
-
练习
- 为 Pod 重启次数 > 3 设置告警。
-
Prometheus体系落地
- 告警规则示例
```yaml
# /etc/prometheus/rules/node.yml
groups:- name: node.rules
rules:- alert: NodeHighIowait
expr: (avg by(instance)(rate(node_cpu_seconds_total{mode="iowait"}[5m])) * 100) > 20
for: 5m
labels:
severity: warning
annotations:
summary: "IO wait high on {{ $labels.instance }}"
description: "iowait > 20% for 5m"
```
- alert: NodeHighIowait
- name: node.rules
- Alertmanager 路由示例
```yaml
# /etc/alertmanager/alertmanager.yml
route:
receiver: default
routes:
- matchers: [severity="critical"]
receiver: oncall
receivers:- name: default
email_configs:- to: ops@example.com
- name: oncall
webhook_configs:- url: http://webhook.local/alert
```
- url: http://webhook.local/alert
- name: default
- 排错
- 规则无效:
promtool check rules /etc/prometheus/rules/node.yml
- 规则无效:
-
练习
- 为磁盘剩余空间 < 15% 设定告警。
-
Jenkins与CI/CD监控落地
- 采集安装(Prometheus 插件)
bash # 在 Jenkins 插件中心安装 Prometheus Metrics # 访问 /prometheus 获取指标 curl -s http://jenkins.local/prometheus | head - 排错
- 构建失败:检查
Console Output与节点磁盘。
- 构建失败:检查
-
练习
- 设置构建失败率 > 5% 的告警。
-
综合场景:线上故障联动处置
- 处置流程
mermaid sequenceDiagram participant AM as 告警系统 participant ENG as 值班工程师 participant OBS as 可观测平台 participant FIX as 处置/回滚 AM->>ENG: 告警触发 ENG->>OBS: 查看指标/日志/链路 OBS-->>ENG: 根因线索 ENG->>FIX: 处理或回滚 FIX-->>AM: 事件关闭 - 练习
- 模拟 Nginx 5xx 激增,完成告警响应、定位(upstream 错误)、回滚操作。
通过上述典型场景的落地实践,可形成“可观测性标准指标 + 场景化告警规则 + 自动化处置预案”的体系化能力,确保监控告警不仅能发现问题,还能驱动快速定位与持续优化。