首页主机资讯Docker在Linux上如何进行性能监控

Docker在Linux上如何进行性能监控

时间2025-11-28 22:23:04发布访客分类主机资讯浏览1190
导读:Linux上Docker性能监控实操指南 一 原生工具快速排查 使用 docker stats 实时查看容器的 CPU%、内存使用/上限、内存%、网络 I/O、块 I/O、PIDs: 命令:docker stats [容器名或ID](不...

Linux上Docker性能监控实操指南

一 原生工具快速排查

  • 使用 docker stats 实时查看容器的 CPU%、内存使用/上限、内存%、网络 I/O、块 I/O、PIDs
    • 命令:docker stats [容器名或ID](不加参数监控所有运行中容器)
    • 用途:快速定位 CPU 飙升、内存逼近上限、磁盘/网络瓶颈等
  • 使用 docker top 查看容器内进程与资源占用:
    • 命令:docker top < 容器名或ID>
    • 用途:确认容器内哪个进程占用资源异常
  • 使用 docker inspect 查看容器配置与运行状态(如资源限制、网络模式、挂载卷等):
    • 命令:docker inspect --format '{ { .State.Status} } { { .HostConfig.Memory} } ' < 容器名或ID>
    • 用途:核对是否设置了合理的 CPU/内存限制,辅助判断资源配置问题

二 可视化与长期监控方案

  • 组件与作用
    • cAdvisor:采集容器 CPU、内存、文件系统 I/O、网络 I/O 等指标,自带 Web 界面,适合单机或小规模环境
    • Prometheus:时序数据库与监控系统,按周期拉取指标并支持告警
    • Grafana:可视化平台,连接 Prometheus 展示仪表盘与趋势
    • Alertmanager:与 Prometheus 联动,处理与路由告警(邮件、Slack、PagerDuty 等)
    • Node Exporter:采集主机层(节点)指标,与 cAdvisor 配合实现“容器+主机”一体化观测
  • 快速部署示例
    • 启动 cAdvisor(建议加上 --privileged 以避免权限问题):
      • 命令:docker run -d --name=cadvisor --privileged -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock google/cadvisor:latest
      • 访问:http://< 主机IP> :8080 查看容器资源页面
    • 启动 Prometheus(最简示例,生产请挂载配置文件与持久化):
      • 命令:docker run -d -p 9090:9090 --name=prometheus prom/prometheus
      • 配置抓取 cAdvisor:在 prometheus.ymlscrape_configs 中添加
        • job_name: ‘cadvisor’
        • static_configs: targets: [‘< cadvisor_host> :8080’]
    • 启动 Grafana:
      • 命令:docker run -d -p 3000:3000 --name=grafana grafana/grafana
      • http://< 主机IP> :3000 添加 Prometheus 数据源并导入容器监控仪表盘
    • 主机层指标(可选):
      • 启动 Node Exporter:docker run -d -p 9100:9100 --name=node-exporter prom/node-exporter
      • 在 Prometheus 中添加 job 抓取 :9100/metrics,用于观察节点 CPU、内存、磁盘、负载等

三 关键指标与告警建议

  • 容器层必看指标
    • container_cpu_usage_seconds_total:CPU 累计使用时间,配合 rate() 计算使用率
    • container_memory_usage_bytes / container_spec_memory_limit_bytes:内存使用与上限,关注是否逼近/超限
    • container_network_receive_bytes_total / transmit_bytes_total:网络吞吐
    • container_fs_reads_total / writes_total、container_fs_usage_bytes:磁盘读写与用量
  • 主机层补充
    • node_cpu_seconds_total、node_memory_MemAvailable_bytes、node_filesystem_avail_bytes、node_load1:节点健康度与容量
  • 建议告警规则(示例)
    • 容器内存使用率 > 80%(持续 5 分钟)
    • 容器 CPU 使用率 > 80%(持续 5 分钟)
    • 容器重启次数 > 0(瞬时或持续)
    • 节点磁盘可用空间 < 10GB 或 Inode 使用率 > 80%
    • 配置方式:在 Prometheus 中定义规则,使用 Alertmanager 路由到邮件、Slack、PagerDuty 等

四 日志与链路追踪

  • 集中化日志
    • Docker 日志驱动与轮转:
      • 示例:docker run -d --log-driver json-file --log-opt max-size=10m my-image
    • 集中式方案:
      • ELK(Elasticsearch + Logstash + Kibana)或 Loki + Promtail 收集与检索容器日志
    • 分析重点:异常堆栈、慢查询、超时、OOM、连接池耗尽等
  • 应用健康与 APM
    • 健康检查:
      • Dockerfile 示例:HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/health || exit 1
    • APM 与链路追踪:
      • Java:Micrometer/SkyWalking/Pinpoint
      • Python/Node.js:OpenTelemetry + Jaeger/Prometheus
    • 业务指标:接口 P95/P99 延迟、QPS、错误率、连接池使用率

五 性能优化与快速排障流程

  • 资源配置与动态调整
    • 设置资源限制(预防单个容器影响全局):
      • CPU:docker run -d --cpus=0.5 --name app1 my-image
      • 内存:docker run -d --memory=512m --memory-swap=1g my-image
    • 运行中动态调整(Docker 20.10+):
      • 命令:docker update --cpus=1.0 --memory=1g < 容器ID>
  • 快速排障闭环
    • 发现异常:在 Grafana 看到 CPU/内存/网络异常
    • 定位容器:用 docker stats 确认异常容器,配合 docker top 查看容器内进程
    • 进入调试:docker exec -it < 容器ID> /bin/bash,执行 topnetstat -tulpn
    • 回溯日志:在 ELK/Loki 检索异常时间段的日志
    • 调整与验证:用 docker update 调整 CPU/内存,或优化应用与 SQL,观察指标是否恢复

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Docker在Linux上如何进行性能监控
本文地址: https://pptw.com/jishu/759508.html
Docker在Linux上的最佳实践是什么 Docker在Linux上如何备份与恢复

游客 回复需填写必要信息