Docker日志查看与资源监控指令全解:从基础到高阶运维实践
一、日志管理:穿透容器内部的眼睛
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: container
paths:
- '/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光机般透视容器状态,推荐采用"实时监控+历史分析+智能预警"的三层架构。记住:没有度量就没有优化,容器世界的所有决策都应建立在数据基础之上!