温馨提示×

Linux Docker如何进行容器监控与告警

小樊
40
2025-12-18 05:26:22
栏目: 智能运维

Linux Docker容器监控与告警实战指南

一 监控方案选型与总体架构

  • 快速临时查看:使用 docker stats,可实时查看容器的 CPU、内存、网络 I/O 等,但不具备历史与复杂分析能力。适合临时排障与单机巡检。
  • 开源可观测平台:以 Prometheus + cAdvisor + Alertmanager + Grafana 为核心,覆盖容器 CPU、内存、磁盘 I/O、网络 等,支持 PromQL 查询、历史趋势与多渠道告警,适合生产环境长期运行。
  • 图形化与深度诊断:使用 Weave Scope、sysdig 等,直观查看容器拓扑、资源占用与系统调用,适合故障定位与性能瓶颈分析。
  • 日志与 APM:结合 ELK/EFK 或商业 Datadog、New Relic 等,统一收集容器日志与应用性能,实现指标+日志+链路的统一观测。

二 快速上手 Prometheus + cAdvisor + Alertmanager + Grafana

  • 部署组件(示例命令)
    • cAdvisor:采集容器指标
      docker run --name=cadvisor \
        --volume=/:/rootfs:ro \
        --volume=/var/run:/var/run:ro \
        --volume=/sys:/sys:ro \
        --volume=/var/lib/docker/:/var/lib/docker:ro \
        --publish=8080:8080 --detach \
        google/cadvisor:latest
      
    • Prometheus:时序存储与告警规则评估
      docker run -d --name=prometheus -p 9090:9090 \
        -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml \
        prom/prometheus
      
    • Alertmanager:告警路由与通知
      docker run -d --name=alertmanager -p 9093:9093 \
        -v $PWD/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
        prom/alertmanager
      
    • Grafana:可视化展示
      docker run -d --name=grafana -p 3000:3000 grafana/grafana
      
  • 配置抓取
    • Prometheus 抓取 cAdvisor(prometheus.yml)
      scrape_configs:
        - job_name: 'cadvisor'
          static_configs:
            - targets: ['<HOST_IP>:8080']
          metrics_path: '/metrics'
          scrape_interval: 15s
      
    • 在 Prometheus Web UI(http://<HOST_IP>:9090)Targets 页面确认 cadvisorUP
  • Grafana 可视化
    • 添加数据源:URL 为 http://prometheus:9090(同网络可直接用服务名)。
    • 导入 Docker 相关面板(如容器监控面板),即可查看容器 CPU、内存、网络 等指标趋势。

三 告警规则与通知落地

  • Prometheus 告警规则示例(rules.yml)
    groups:
    - name: container.rules
      rules:
      - alert: HighCPUUsage
        expr: sum(rate(container_cpu_usage_seconds_total{name!=""}[1m])) by (name) > 0.8
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "容器 {{ $labels.name }} CPU使用率过高"
          description: "当前使用率: {{ $value | humanizePercentage }}"
    
      - alert: MemoryLeak
        expr: container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes{name!=""} > 0.9
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "容器 {{ $labels.name }} 内存接近上限"
          description: "已用/上限: {{ $value | humanizePercentage }}"
    
    • 在 prometheus.yml 中加载规则:
      rule_files:
        - "/etc/prometheus/rules/*.rules.yml"
      
  • Alertmanager 通知示例(alertmanager.yml)
    global:
      resolve_timeout: 5m
    
    route:
      group_by: ['alertname']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 1h
      receiver: 'email'
    
    receivers:
    - name: 'email'
      email_configs:
      - to: 'ops@example.com'
        from: 'alert@example.com'
        smarthost: 'smtp.example.com:587'
        auth_username: 'user'
        auth_password: 'pass'
    
    inhibit_rules:
    - source_match:
        severity: 'critical'
      target_match:
        severity: 'warning'
      equal: ['alertname', 'instance']
    
    • 在 Prometheus Web UI 的 Alerts 页面查看规则状态与触发记录;在 AlertmanagerSilences 中配置维护窗口静默。

四 进阶与运维优化

  • 主机级指标补充:部署 node-exporter(默认 9100 端口),在 Prometheus 中新增 job 抓取主机 CPU、内存、磁盘、文件系统 等指标,便于定位宿主机瓶颈。
  • 动态发现与多主机:在 Kubernetes 环境可用 Service Discovery 自动发现目标;多主机/多环境建议统一网络与命名,保证 Prometheus 可达各 cAdvisor 实例。
  • 性能与成本优化:合理设置 scrape_interval(如 15s);对高频指标使用 rate()recording rules 预聚合;在 Prometheus 配置 storage.tsdb.retention.time(如 30d) 控制数据保留。
  • 可视化与告警渠道:Grafana 用于长期趋势与容量分析;企业可扩展 Webhook 对接 企业微信、钉钉 等,实现 IM 群内告警。

五 其他工具与场景建议

  • 快速排障与单机巡检:优先用 docker stats 观察实时资源占用,适合临时定位。
  • 拓扑与交互式诊断:使用 Weave Scopesysdig 查看容器关系、资源热点与系统调用,适合疑难问题与性能瓶颈定位。
  • 日志与 APM 统一:采用 ELK/EFK 集中管理容器日志,或选择 Datadog、New Relic 等 SaaS 平台获取开箱即用的指标、日志与链路追踪能力。

0