温馨提示×

如何在Debian Docker中进行性能监控

小樊
35
2025-12-28 16:59:11
栏目: 智能运维

Debian Docker 性能监控实操指南

一 快速上手 内置命令

  • 查看容器状态与基本信息
    • 查看运行中容器:docker ps
    • 查看全部容器:docker ps -a
    • 查看容器详细信息:docker inspect <容器ID/名称>
  • 实时资源监控
    • 实时查看容器 CPU、内存、网络 I/O、磁盘 I/Odocker stats(可加容器名/ID 定向监控)
  • 守护进程与日志
    • 检查 Docker 服务状态:sudo systemctl status docker
    • 查看 Docker 服务日志:sudo journalctl -u docker.service
  • 进入容器排查
    • 查看容器内进程:docker top <容器ID/名称>
  • 提示:部分命令需要管理员权限,请在命令前加 sudo

二 主机与容器深度观测

  • cAdvisor(单节点资源与容器指标)
    • 作用:采集容器与宿主机的 CPU、内存、网络、文件系统 等指标,适合快速可视化与单机排障。
    • 快速运行示例(Debian 主机上):
      docker run --name=cadvisor \
        --volume=/:/rootfs:ro \
        --volume=/var/run/docker.sock:/var/run/docker.sock:ro \
        --volume=/sys:/sys:ro \
        --volume=/var/lib/docker/:/var/lib/docker:ro \
        --publish=8080:8080 \
        --detach=true \
        google/cadvisor:latest
      
    • 访问 http://<服务器IP>:8080 查看指标与图表。
  • 系统级诊断工具
    • 容器进程与系统调用:sudo sysdig -c “container.name == <容器名>”
    • 磁盘 I/O:iostat / iotop
    • 网络:netstat / tcpdump
    • 说明:将 sysdig 与 iostat/iotop、netstat/tcpdump 结合,可定位 I/O 瓶颈网络异常

三 生产级监控 Prometheus Grafana

  • 架构与组件
    • cAdvisor 采集容器指标;Prometheus 定时拉取并存储;Grafana 负责可视化与告警。
  • 部署要点
    • 在每台 Debian Docker 主机 上运行 cAdvisor(见上节),确保 8080 端口可被 Prometheus 访问。
    • 配置 Prometheus 的 scrape_configs,使用 docker_sd_configs 自动发现容器目标,抓取 cAdvisor 暴露的 /metrics
    • Grafana 添加 Prometheus 数据源,导入 Docker 监控模板(如 Docker 容器监控仪表盘),即可查看 CPU、内存、网络、I/O 趋势与告警规则。

四 日志与业务指标 APM

  • 日志采集与集中
    • Docker 日志驱动示例(限制单日志文件大小,便于滚动与检索):
      docker run -d \
        --log-driver json-file \
        --log-opt max-size=10m \
        my-image
      
    • 集中式方案:使用 ELK(Elasticsearch + Logstash + Kibana)Loki + Promtail 收集与检索容器日志,关注 异常日志频率、接口时延 等。
  • 应用健康与探针
    • 在应用中实现 /health 接口,并通过 Dockerfile 的 HEALTHCHECK 定期探测:
      HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/health || exit 1
      
    • 结合 docker inspect 查看健康状态,异常时可联动重启或告警。
  • 业务与链路追踪
    • 暴露业务指标(如 QPS、P95/P99、错误率),使用 Prometheus 客户端库OpenTelemetry 生成指标与分布式追踪,接入 Grafana/PrometheusJaeger 进行分析。

五 资源限制与动态调优

  • 运行期限制
    • 限制 CPU 与内存:
      docker run -d \
        --name app \
        --cpus 0.5 \
        --memory 512m \
        my-image
      
    • 限制磁盘 I/O(可选):通过 –blkio-weight 等参数控制容器读写速率。
  • 动态调整(Docker 20.10+
    • 在线调整运行中容器的资源:
      docker update --cpus 1.0 --memory 1g <容器ID/名称>
      
  • 作用:避免单个容器资源抢占,保障 稳定性与 SLO

0