Docker在Linux上如何进行性能监控
导读: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.yml 的
scrape_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、内存、磁盘、负载等
- 启动 Node Exporter:
- 启动 cAdvisor(建议加上
三 关键指标与告警建议
- 容器层必看指标
- 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:磁盘读写与用量
- container_cpu_usage_seconds_total:CPU 累计使用时间,配合
- 主机层补充
- 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、连接池耗尽等
- Docker 日志驱动与轮转:
- 应用健康与 APM
- 健康检查:
- Dockerfile 示例:
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/health || exit 1
- Dockerfile 示例:
- 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
- CPU:
- 运行中动态调整(Docker 20.10+):
- 命令:
docker update --cpus=1.0 --memory=1g < 容器ID>
- 命令:
- 设置资源限制(预防单个容器影响全局):
- 快速排障闭环
- 发现异常:在 Grafana 看到 CPU/内存/网络异常
- 定位容器:用 docker stats 确认异常容器,配合 docker top 查看容器内进程
- 进入调试:
docker exec -it < 容器ID> /bin/bash,执行top、netstat -tulpn等 - 回溯日志:在 ELK/Loki 检索异常时间段的日志
- 调整与验证:用
docker update调整 CPU/内存,或优化应用与 SQL,观察指标是否恢复
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Docker在Linux上如何进行性能监控
本文地址: https://pptw.com/jishu/759508.html
