插件窝 干货文章 如何使用Docker进行应用的监控和日志管理

如何使用Docker进行应用的监控和日志管理

Docker 日志 容器 监控 724    来源:    2025-04-10

Docker应用监控与日志管理指南

一、Docker监控方案

1. 内置监控命令

# 查看容器资源使用情况
docker stats [容器名/ID]

# 查看容器详细信息
docker inspect [容器名/ID]

# 查看容器进程
docker top [容器名/ID]

2. 使用cAdvisor

Google开发的容器监控工具,提供Web界面:

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  gcr.io/cadvisor/cadvisor:latest

访问 http://localhost:8080 查看监控数据

3. Prometheus + Grafana组合

  1. 配置Docker daemon暴露metrics:

    {
     "metrics-addr" : "0.0.0.0:9323",
     "experimental" : true
    }
    

    重启Docker服务后生效

  2. 部署Prometheus:

    # prometheus.yml
    global:
     scrape_interval: 15s
    
    scrape_configs:
     - job_name: 'docker'
       static_configs:
         - targets: ['docker-host:9323']
    
  3. 使用Grafana可视化数据

4. 商业监控方案

  • Datadog
  • New Relic
  • Sysdig

二、Docker日志管理

1. 基础日志命令

# 查看容器日志
docker logs [容器名/ID]

# 跟踪日志输出
docker logs -f [容器名/ID]

# 显示时间戳
docker logs -t [容器名/ID]

# 显示最后N行
docker logs --tail=100 [容器名/ID]

2. 日志驱动配置

修改Docker daemon.json配置默认日志驱动:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

常用日志驱动: - json-file:默认驱动,日志以JSON格式存储 - syslog:发送到syslog服务器 - journald:使用systemd journal - gelf:Graylog扩展日志格式 - fluentd:发送到Fluentd服务

3. ELK Stack (Elasticsearch + Logstash + Kibana)

  1. 使用Fluentd日志驱动:

    docker run --log-driver=fluentd --log-opt fluentd-address=localhost:24224 your-app
    
  2. 部署ELK Stack:

    # Elasticsearch
    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.3
    
    # Logstash
    docker run -d --name logstash -p 5044:5044 -v /path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash:7.9.3
    
    # Kibana
    docker run -d --name kibana -p 5601:5601 --link elasticsearch:elasticsearch kibana:7.9.3
    

4. Loki + Grafana

轻量级日志系统:

# Loki
docker run -d --name loki -p 3100:3100 grafana/loki:latest

# Promtail (日志收集器)
docker run -d --name promtail -v /path/to/promtail-config.yaml:/etc/promtail/config.yml grafana/promtail:latest

然后在Grafana中添加Loki数据源

三、最佳实践建议

  1. 日志策略

    • 避免将日志输出到容器文件系统
    • 为不同环境配置不同的日志级别
    • 结构化日志输出(JSON格式)
  2. 监控策略

    • 监控关键指标:CPU、内存、网络、磁盘I/O
    • 设置合理的告警阈值
    • 监控容器健康状态和重启次数
  3. 安全考虑

    • 限制日志访问权限
    • 敏感信息不要记录在日志中
    • 定期轮转和归档日志
  4. 性能考虑

    • 高负载环境下考虑采样而不是全量日志
    • 使用异步日志传输减少应用影响
    • 合理配置日志缓冲

通过以上方案,您可以构建一个完整的Docker应用监控和日志管理系统,帮助您更好地了解应用运行状态并及时发现问题。