容器日志主要分为两类: 1. 标准输出/错误日志:容器内进程输出到stdout/stderr的日志 2. 应用日志文件:容器内应用写入文件的日志
docker info --format '{{.LoggingDriver}}'
# 全局配置
vim /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
# 单容器配置
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx
# 全局配置
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "udp://192.168.1.1:514"
}
}
# 单容器配置
docker run --log-driver=syslog --log-opt syslog-address=udp://192.168.1.1:514 nginx
# 需要systemd支持
{
"log-driver": "journald"
}
# 查看日志
journalctl -u docker CONTAINER_NAME=容器名
systemctl restart docker
# 使用官方Docker镜像
docker run -d -v /var/log:/var/log -v /var/lib/docker/containers:/var/lib/docker/containers fluent/fluentd
<source>
@type tail
path /var/lib/docker/containers/*/*.log
pos_file /var/log/fluentd-docker.pos
tag docker.*
read_from_head true
<parse>
@type json
time_key time
time_format %Y-%m-%dT%H:%M:%S.%NZ
</parse>
</source>
<match docker.**>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
logstash_prefix docker
flush_interval 5s
</match>
# 示例配置 /etc/logrotate.d/docker-containers
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
delaycompress
missingok
copytruncate
}
logrotate -d /etc/logrotate.d/docker-containers
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
environment:
- discovery.type=single-node
ports:
- "9200:9200"
volumes:
- esdata:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:7.9.2
ports:
- "5601:5601"
depends_on:
- elasticsearch
logstash:
image: docker.elastic.co/logstash/logstash:7.9.2
ports:
- "5000:5000"
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
volumes:
esdata:
input {
tcp {
port => 5000
codec => json
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
# 查看容器日志
docker logs 容器ID
# 实时查看日志
docker logs -f 容器ID
# 查看最后N行日志
docker logs --tail=100 容器ID
# 查看特定时间段的日志
docker logs --since "2023-01-01" --until "2023-01-02" 容器ID
# 查看Kubernetes Pod日志
kubectl logs pod名
kubectl logs -f pod名
kubectl logs --previous pod名 # 查看崩溃容器的日志
通过合理配置容器日志管理系统,您可以有效收集、存储和分析容器化应用的日志数据,为运维监控和故障排查提供有力支持。