Docker容器监控
Docker容器监控是容器运维中的关键环节,指通过工具或命令实时收集、分析容器的运行状态(如CPU、内存、磁盘I/O、网络流量等指标),以确保服务稳定性并快速定位问题。本页面将详细介绍监控原理、工具链及实践方法。
监控核心指标[编辑 | 编辑源代码]
Docker容器的监控通常关注以下四类核心指标:
指标类型 | 说明 | 典型工具 |
---|---|---|
资源使用率 | CPU、内存、磁盘占用 | docker stats , cAdvisor
|
性能数据 | 线程数、文件描述符数 | Prometheus + Node Exporter |
日志流 | 标准输出/错误日志 | ELK Stack, Fluentd |
网络状态 | 连接数、带宽、延迟 | Weave Scope, NetData |
原生监控工具[编辑 | 编辑源代码]
docker stats[编辑 | 编辑源代码]
Docker内置的实时监控命令,无需额外安装:
# 查看所有运行中容器的资源使用
docker stats
# 输出示例:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a1b2c3d4e5f6 nginx 0.02% 15MiB / 1GiB 1.47% 1.2kB / 648B 0B / 0B 3
docker top[编辑 | 编辑源代码]
查看容器内进程列表:
docker top my_container
# 输出示例:
UID PID PPID C STIME TTY TIME CMD
root 1234 456 0 14:30 ? 00:00:01 nginx: master process
高级监控方案[编辑 | 编辑源代码]
cAdvisor[编辑 | 编辑源代码]
Google开发的容器资源监控工具,提供Web界面:
# 快速启动cAdvisor容器
docker run \
--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=true \
--name=cadvisor \
gcr.io/cadvisor/cadvisor:v0.47.0
访问 http://localhost:8080
可查看可视化监控面板。
Prometheus + Grafana[编辑 | 编辑源代码]
工业级监控方案配置流程:
1. 创建Prometheus配置文件 prometheus.yml
:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['docker-host:9323']
2. 启动容器时暴露指标接口:
docker run -d \
--name my_app \
-p 8080:8080 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
3. 使用Grafana创建仪表盘:
日志监控实践[编辑 | 编辑源代码]
配置JSON日志驱动进行结构化日志收集:
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx
使用ELK Stack分析日志: 1. Filebeat配置示例:
filebeat.inputs:
- type: container
paths:
- '/var/lib/docker/containers/*/*.log'
output.elasticsearch:
hosts: ["elasticsearch:9200"]
性能调优案例[编辑 | 编辑源代码]
场景:某Web服务容器内存持续增长
排查步骤:
1. 使用docker stats
确认内存泄漏
2. 通过docker exec -it container_id top
定位异常进程
3. 使用cAdvisor历史数据确认增长趋势
4. 最终发现是未关闭的数据库连接导致
解决方案:
# 修复代码示例(Python Flask)
@app.teardown_appcontext
def shutdown_session(exception=None):
db.session.remove()
监控指标计算原理[编辑 | 编辑源代码]
关键指标计算公式:
- CPU使用率:
解析失败 (语法错误): {\displaystyle \text{CPU\%} = \frac{\Delta \text{CPU\_time}}{\Delta \text{Real\_time}} \times 100\% }
- 内存使用率:
解析失败 (语法错误): {\displaystyle \text{Mem\%} = \frac{\text{RSS}}{\text{Memory\_Limit}} \times 100\% }
安全监控建议[编辑 | 编辑源代码]
1. 监控容器特权模式使用
2. 跟踪敏感目录挂载
3. 检测异常网络连接
4. 使用docker audit
插件记录安全事件
扩展阅读[编辑 | 编辑源代码]
- Docker官方文档:容器指标收集
- Prometheus Query Language (PromQL) 手册
- 分布式系统监控设计模式