Syslog 日志驱动程序
syslog 日志驱动将日志路由到 syslog 服务器。syslog 协议使用
原始字符串作为日志消息,并支持有限的元数据集。syslog
消息必须以特定方式格式化才能有效。从有效消息中,
接收方可以提取以下信息:
- 优先级:日志级别,例如
debug、warning、error、info。 - 时间戳:事件发生的时间。
- 主机名:事件发生的位置。
- 设施:记录该消息的子系统,例如
mail或kernel。 - 进程名称和进程ID(PID):生成该日志的进程的名称和ID。
该格式定义在 RFC 5424 中,Docker 的 syslog 驱动程序以以下方式实现 ABNF 参考:
TIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID
+ + + | +
| | | | |
| | | | |
+------------+ +----+ | +----+ +---------+
v v v v v
2017-04-01T17:41:05.616647+08:00 a.vm {taskid:aa,version:} 1787791 {taskid:aa,version:}用法
要将 syslog 驱动程序用作默认日志驱动程序,请在 daemon.json 文件中将 log-driver 和 log-opt 键设置为适当的值,该文件位于 Linux 主机上的 /etc/docker/ 或 Windows Server 上的 C:\ProgramData\docker\config\daemon.json。有关使用 daemon.json 配置 Docker 的更多信息,请参阅 daemon.json。
以下示例将日志驱动程序设置为 syslog 并设置 syslog-address 选项。syslog-address 选项同时支持 UDP 和 TCP;本示例使用 UDP。
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "udp://1.2.3.4:1111"
}
}重启 Docker 以使更改生效。
注意
log-opts配置文件中的配置选项必须以字符串形式提供。因此,数值和布尔值(例如syslog-tls-skip-verify的值)必须用引号(")括起来。
您可以通过使用 --log-driver 标志为 docker container create 或 docker run 来设置特定容器的日志驱动程序:
$ docker run \
--log-driver syslog --log-opt syslog-address=udp://1.2.3.4:1111 \
alpine echo hello world
选项
以下日志选项作为 syslog 日志驱动程序的选项被支持。它们可以在 daemon.json 中设置为默认值,方法是将它们作为键值对添加到 log-opts JSON 数组中。也可以在启动容器时为每个选项添加 --log-opt <key>=<value> 标志,从而在给定的容器上设置它们。
| 选项 | 描述 | 示例值 |
|---|---|---|
syslog-address | 外部 syslog 服务器的地址。URI 说明符可以是 [tcp|udp|tcp+tls]://host:port、unix://path 或 unixgram://path。如果传输方式是 tcp、udp 或 tcp+tls,则默认端口是 514。 | --log-opt syslog-address=tcp+tls://192.168.1.3:514, --log-opt syslog-address=unix:///tmp/syslog.sock |
syslog-facility | 要使用的 syslog 设施。可以是任何有效 syslog 设施的编号或名称。请参阅
syslog 文档。 | --log-opt syslog-facility=daemon |
syslog-tls-ca-cert | CA 签名的信任证书的绝对路径。如果地址协议不是 tcp+tls,则忽略此路径。 | --log-opt syslog-tls-ca-cert=/etc/ca-certificates/custom/ca.pem |
syslog-tls-cert | TLS 证书文件的绝对路径。如果地址协议不是 tcp+tls,则忽略此参数。 | --log-opt syslog-tls-cert=/etc/ca-certificates/custom/cert.pem |
syslog-tls-key | TLS 密钥文件的绝对路径。如果地址协议不是 tcp+tls,则忽略此参数。 | --log-opt syslog-tls-key=/etc/ca-certificates/custom/key.pem |
syslog-tls-skip-verify | 如果设置为 true,则在连接到 syslog 守护进程时会跳过 TLS 验证。默认为 false。如果地址协议不是 tcp+tls,则忽略此设置。 | --log-opt syslog-tls-skip-verify=true |
tag | 追加到 syslog 消息中 APP-NAME 后的字符串。默认情况下,Docker 使用容器 ID 的前 12 个字符来标记日志消息。有关自定义日志标记格式的信息,请参阅
日志标记选项文档。 | --log-opt tag=mailer |
syslog-format | 要使用的 syslog 消息格式。如果未指定,则使用本地 Unix syslog 格式,不包含指定的主机名。指定 rfc3164 表示兼容 RFC-3164 的格式,rfc5424 表示兼容 RFC-5424 的格式,或 rfc5424micro 表示兼容 RFC-5424 且带有微秒时间戳分辨率的格式。 | --log-opt syslog-format=rfc5424micro |
labels | 适用于启动 Docker 守护进程时。此守护进程接受的与日志相关的标签的逗号分隔列表。用于高级 日志标记选项。 | --log-opt labels=production_status,geo |
labels-regex | 适用于启动 Docker 守护进程时。与 labels 类似且兼容。用于匹配与日志相关的标签的正则表达式。用于高级
日志标签选项。 | --log-opt labels-regex=^(production_status|geo) |
env | 在启动 Docker 守护进程时适用。此守护进程接受的与日志相关的环境变量的逗号分隔列表。用于高级 日志标签选项。 | --log-opt env=os,customer |
env-regex | 在启动 Docker 守护进程时适用。与 env 类似且兼容。用于匹配与日志相关的环境变量的正则表达式。用于高级
日志标签选项。 | --log-opt env-regex=^(os|customer) |