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_exporter

    systemd#

    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
    EOF

    systemctl 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
    - 关键命令与解释bash

    CPU/负载#

    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)观察告警触发与恢复。
  • 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 比例 > 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 并设定告警阈值。
  • 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
      ```
  • 排错
    • Lag 突增:kafka-consumer-groups.sh --bootstrap-server ... --describe
  • 练习

    • 对关键 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。
  • 练习

    • 为 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"
        ```
  • 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
        ```
  • 排错
    • 规则无效: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 错误)、回滚操作。

通过上述典型场景的落地实践,可形成“可观测性标准指标 + 场景化告警规则 + 自动化处置预案”的体系化能力,确保监控告警不仅能发现问题,还能驱动快速定位与持续优化。