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光機般透視容器狀態,推薦采用"實時監控+歷史分析+智能預警"的三層架構。記住:沒有度量就沒有優化,容器世界的所有決策都應建立在數據基礎之上!