# 查看容器资源使用情况
docker stats [容器名/ID]
# 查看容器详细信息
docker inspect [容器名/ID]
# 查看容器进程
docker top [容器名/ID]
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
查看监控数据
配置Docker daemon暴露metrics:
{
"metrics-addr" : "0.0.0.0:9323",
"experimental" : true
}
重启Docker服务后生效
部署Prometheus:
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['docker-host:9323']
使用Grafana可视化数据
# 查看容器日志
docker logs [容器名/ID]
# 跟踪日志输出
docker logs -f [容器名/ID]
# 显示时间戳
docker logs -t [容器名/ID]
# 显示最后N行
docker logs --tail=100 [容器名/ID]
修改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服务
使用Fluentd日志驱动:
docker run --log-driver=fluentd --log-opt fluentd-address=localhost:24224 your-app
部署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
轻量级日志系统:
# 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数据源
日志策略:
监控策略:
安全考虑:
性能考虑:
通过以上方案,您可以构建一个完整的Docker应用监控和日志管理系统,帮助您更好地了解应用运行状态并及时发现问题。