Linux Docker如何进行容器监控与告警
导读:Linux Docker容器监控与告警实战指南 一 监控方案选型与总体架构 快速临时查看:使用 docker stats,可实时查看容器的 CPU、内存、网络 I/O 等,但不具备历史与复杂分析能力。适合临时排障与单机巡检。 开源可观测平...
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
- cAdvisor:采集容器指标
- 配置抓取
- 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 页面确认 cadvisor 为 UP。
- Prometheus 抓取 cAdvisor(prometheus.yml)
- 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"
- 在 prometheus.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 页面查看规则状态与触发记录;在 Alertmanager 的 Silences 中配置维护窗口静默。
四 进阶与运维优化
- 主机级指标补充:部署 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 Scope 或 sysdig 查看容器关系、资源热点与系统调用,适合疑难问题与性能瓶颈定位。
- 日志与 APM 统一:采用 ELK/EFK 集中管理容器日志,或选择 Datadog、New Relic 等 SaaS 平台获取开箱即用的指标、日志与链路追踪能力。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Docker如何进行容器监控与告警
本文地址: https://pptw.com/jishu/774798.html
