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光机般透视容器状态,推荐采用"实时监控+历史分析+智能预警"的三层架构。记住:没有度量就没有优化,容器世界的所有决策都应建立在数据基础之上!