日志驱动类型
什么是日志驱动
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/
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


暂无评论内容