日志驱动类型

日志驱动类型

什么是日志驱动

Docker 日志驱动(Logging Driver)是 Docker 用于从容器中收集和路由日志消息的机制。容器输出的 stdout/stderr 由日志驱动捕获并发送到指定的目的地。

为什么需要选择日志驱动

  • 集中管理:将多个容器的日志集中到统一平台
  • 持久化:避免日志丢失
  • 搜索分析:方便日志查询和分析
  • 存储优化:控制日志大小和轮转

Docker 支持的日志驱动

驱动 说明 适用场景
json-file 默认驱动,JSON 格式写入文件 单机开发
local 自定义格式的本地存储 对性能有要求
syslog 发送到 Syslog 服务器 已有 Syslog 基础设施
journald 发送到 systemd journal Linux 系统
gelf Graylog Extended Log Format Graylog 用户
fluentd 发送到 Fluentd 日志聚合管道的企业
awslogs Amazon CloudWatch Logs AWS 环境
splunk HTTP Event Collector Splunk 用户
etwlogs Windows Event Tracing Windows 容器
gcplogs Google Cloud Logging GCP 环境
logentries Rapid7 Logentries Rapid7 用户
none 丢弃所有日志 不需要日志的场景

配置日志驱动

全局配置(daemon.json)

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

单容器配置

docker run --log-driver=syslog --log-opt syslog-address=udp://192.168.1.100:514 nginx

Compose 配置

services:
  app:
    image: myapp
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

常用日志驱动详解

1. json-file(默认)

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

日志文件默认在 /var/lib/docker/containers//-json.log

2. local

{
  "log-driver": "local",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5",
    "compress": "true"
  }
}

特点:
– 比 json-file 性能更好(使用 protobuf 格式)
– 自动压缩日志
– 默认保留 5 个文件,每个 20MB

3. syslog

docker run \
  --log-driver=syslog \
  --log-opt syslog-address=tcp://192.168.1.100:514 \
  --log-opt syslog-facility=daemon \
  --log-opt tag="{{.Name}}/{{.ID}}" \
  nginx

4. journald

docker run \
  --log-driver=journald \
  --log-opt tag="{{.Name}}" \
  nginx

# 查看日志
journalctl -u docker.service CONTAINER_NAME=mynginx

5. fluentd

docker run \
  --log-driver=fluentd \
  --log-opt fluentd-address=localhost:24224 \
  --log-opt tag="docker.{{.Name}}" \
  nginx

Fluentd 配置:


  @type forward
  port 24224


 docker.**>
  @type elasticsearch
  host elasticsearch.example.com
  port 9200
  index_name docker

6. awslogs

docker run \
  --log-driver=awslogs \
  --log-opt awslogs-region=us-east-1 \
  --log-opt awslogs-group=myapp-logs \
  --log-opt awslogs-stream=web-1 \
  nginx

多日志驱动支持

Docker 支持每个容器使用不同的日志驱动:

services:
  web:
    image: nginx
    logging:
      driver: "json-file"
      options:
        max-size: "5m"

  worker:
    image: myworker
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://syslog.example.com:514"

  batch:
    image: batch-job
    logging:
      driver: "none"  # 不需要日志

查看容器日志

# 查看日志
docker logs container_name
docker logs -f container_name
docker logs --tail 100 container_name

# 注意:--tail/--since/--until 不适用于所有日志驱动
# json-file 和 local 驱动支持
# syslog/journald/fluentd 不支持这些选项

日志驱动性能对比

驱动 性能 存储效率 功能
json-file 中等 基础
local 基础
syslog 远程
journald 查询方便
fluentd 功能丰富
awslogs AWS 集成

选择建议

# 单机开发
log-driver: json-file  # 默认,无需额外配置

# 生产环境(已部署日志平台)
log-driver: fluentd   # 推荐:灵活、生态好
log-driver: syslog    # 已有 Syslog 基础设施

# 云环境
log-driver: awslogs   # AWS
log-driver: gcplogs   # GCP

# 性能敏感
log-driver: local     # 轻量级,本地查看方便

# 不需要日志
log-driver: none      # 彻底不记录

切换日志驱动的注意事项

# 1. 更改日志驱动后,现有日志不会迁移
# 2. 停止的容器不会使用新驱动
# 3. 重启容器后使用新驱动

# 安全切换
docker stop container_name
docker rm container_name
docker run --log-driver=new-driver image_name

选择合适的日志驱动可以帮助你更有效地管理和分析容器日志。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容