日志管理
Docker 支持多种日志驱动,可以集中管理容器日志。
日志驱动类型
json-file(默认)
日志以 JSON 格式存储在文件中:
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}syslog
发送日志到 syslog:
json
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "tcp://192.168.1.1:514"
}
}journald
使用 systemd journal:
json
{
"log-driver": "journald"
}gelf
发送到 Graylog、Logstash 等:
json
{
"log-driver": "gelf",
"log-opts": {
"gelf-address": "udp://192.168.1.1:12201"
}
}fluentd
发送到 Fluentd:
json
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "192.168.1.1:24224"
}
}容器级别配置
运行时指定
sh
docker run --log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginxCompose 配置
yaml
services:
web:
image: nginx
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"日志轮转
json-file 轮转
json
{
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}max-size: 单个日志文件最大大小max-file: 保留的日志文件数量
集中式日志收集
ELK Stack
使用 Elasticsearch、Logstash、Kibana 收集日志:
yaml
services:
web:
logging:
driver: "gelf"
options:
gelf-address: "udp://logstash:12201"Loki
使用 Grafana Loki:
yaml
services:
web:
logging:
driver: "loki"
options:
loki-url: "http://loki:3100/loki/api/v1/push"最佳实践
- 配置日志轮转 - 防止日志文件过大
- 集中式收集 - 使用日志聚合工具
- 结构化日志 - 使用 JSON 格式
- 日志级别 - 区分不同级别的日志
- 监控告警 - 设置日志异常告警
BSFC Tech Pro Tip
生产环境应该使用集中式日志收集系统,便于日志查询和分析。