Docker日志查看与资源监控指令全解:从基础到高阶运维实践
- 一、日志管理:穿透容器内部的眼睛
-
- 二、资源监控:掌握容器生命体征
-
- 三、企业级监控方案集成
- 3.1 cAdvisor + Prometheus + Grafana
-
- 3.2 日志告警系统集成
-
- 四、运维场景解决方案
-
- 五、监控指令速查表
一、日志管理:穿透容器内部的眼睛
1.1 基础日志操作
核心命令:docker logs
docker logs --tail 100 webapp
docker logs -f --since 5m webapp
docker logs --timestamps --details webapp
docker logs webapp 2>&1 | grep -i error
日志驱动配置
docker inspect --format='{{.HostConfig.LogConfig.Type}}' webapp
docker run -d --log-driver=json-file --log-opt max-size=100m --log-opt max-file=3 nginx
1.2 高级日志处理
JSON日志解析
docker logs webapp --format json | jq -r '.time + " " + .log'
docker logs webapp --format '{{.Log}}' | jq 'select(.level == "ERROR")'
多容器日志聚合
docker logs -f webapp redis postgres 2>&1 | awk '/ERROR/ {print "\033[31m" $0 "\033[0m"}'
二、资源监控:掌握容器生命体征
2.1 实时资源观测
核心命令:docker stats
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
docker stats --format "CONTAINER: {{.Name}} | CPU: {{.CPUPerc}} | MEM: {{.MemPerc}} | BLOCK I/O: {{.BlockIO}}"
进程级监控
docker top webapp -eo pid,ppid,user,%cpu,%mem,cmd
docker exec webapp htop
2.2 深度资源分析
容器详情探查
docker inspect webapp | jq '.[].HostConfig'
docker inspect --format '{{.HostConfig.Memory}} {{.HostConfig.MemorySwap}}' webapp
docker inspect --format='{{json .NetworkSettings}}' webapp | jq
历史资源分析
docker stats --format "{{.Name}},{{.CPUPerc}},{{.MemUsage}},{{.NetIO}},{{.BlockIO}}" webapp > stats.csv
awk -F',' '{print $1,$2}' stats.csv | sed 's/%//' | gnuplot -p -e "set terminal dumb; plot '-' with lines"
三、企业级监控方案集成
3.1 cAdvisor + Prometheus + Grafana
部署架构
docker run -d \--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 \google/cadvisor:v0.47.0
scrape_configs:- job_name: 'docker'static_configs:- targets: ['cadvisor:8080']
关键监控指标
指标名称 | 说明 |
---|
container_cpu_usage_seconds_total | 容器累计CPU使用时间(秒) |
container_memory_usage_bytes | 内存使用量(字节) |
container_network_receive_bytes | 网络接收字节数 |
container_fs_usage_bytes | 文件系统使用量 |
3.2 日志告警系统集成
ELK Stack配置示例
filebeat.inputs:
- type: containerpaths: - '/var/lib/docker/containers/*/*.log'processors:- add_docker_metadata: ~output.elasticsearch:hosts: ["elasticsearch:9200"]
四、运维场景解决方案
4.1 性能瓶颈排查流程
docker stats --no-stream | sort -k3 -h -r | head
docker exec -it webapp top -o %CPU
docker exec webapp ss -tunlp
docker exec webapp iostat -dx 1
4.2 日志轮转策略
{"log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "3","compress": "true"}
}
五、监控指令速查表
场景 | 命令组合 |
---|
实时日志追踪 | docker logs -f --since 5m --tail 100 webapp | grep -C 3 ERROR |
资源峰值捕获 | docker stats --format "{{.Name}}: {{.CPUPerc}} @ {{.MemUsage}}" |
网络流量分析 | docker exec webapp iftop -i eth0 |
存储空间检查 | docker system df -v |
安全事件审计 | docker events --since 24h --filter 'event=die' --format '{{.ID}} {{.Status}}' |
运维箴言:优秀的监控体系应像X光机般透视容器状态,推荐采用"实时监控+历史分析+智能预警"的三层架构。记住:没有度量就没有优化,容器世界的所有决策都应建立在数据基础之上!