Skip to content

日志管理

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 \
  nginx

Compose 配置

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"

最佳实践

  1. 配置日志轮转 - 防止日志文件过大
  2. 集中式收集 - 使用日志聚合工具
  3. 结构化日志 - 使用 JSON 格式
  4. 日志级别 - 区分不同级别的日志
  5. 监控告警 - 设置日志异常告警

BSFC Tech Pro Tip

生产环境应该使用集中式日志收集系统,便于日志查询和分析。


由 BSFC Tech 提供技术支持