Docker日志查看与资源监控指令全解:从基础到高阶运维实践

发布于:2025-04-13 ⋅ 阅读:(30) ⋅ 点赞:(0)


一、日志管理:穿透容器内部的眼睛

1.1 基础日志操作

核心命令:docker logs
# 查看最近100行日志
docker logs --tail 100 webapp

# 实时追踪日志(类似tail -f)
docker logs -f --since 5m webapp

# 显示时间戳和日志来源
docker logs --timestamps --details webapp

# 过滤ERROR级别日志
docker logs webapp 2>&1 | grep -i error
日志驱动配置
# 查看当前日志驱动
docker inspect --format='{{.HostConfig.LogConfig.Type}}' webapp

# 启动容器时指定日志驱动(json-file/syslog/fluentd)
docker run -d --log-driver=json-file --log-opt max-size=100m --log-opt max-file=3 nginx

1.2 高级日志处理

JSON日志解析
# 提取特定字段(jq工具)
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

# 生成资源趋势图(需安装gnuplot)
awk -F',' '{print $1,$2}' stats.csv | sed 's/%//' | gnuplot -p -e "set terminal dumb; plot '-' with lines"

三、企业级监控方案集成

3.1 cAdvisor + Prometheus + Grafana

部署架构
# 启动cAdvisor(数据采集)
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

# Prometheus配置示例
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配置片段
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

# 第四步:存储IO分析
docker exec webapp iostat -dx 1

4.2 日志轮转策略

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