系统日志记录驱动程序

日志记录驱动程序syslog将日志路由到syslog服务器。该syslog协议使用原始字符串作为日志消息,并支持一组有限的元数据。系统日志消息必须采用特定方式格式化才能有效。从有效消息中,接收者可以提取以下信息:

  • 优先级:日志记录级别,例如debugwarningerrorinfo
  • 时间戳:事件发生的时间。
  • 主机名:事件发生的位置。
  • 设施:哪个子系统记录了消息,例如mailkernel
  • 进程名称和进程 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驱动程序用作默认日志记录驱动程序,请将log-driverlog-opt键设置为文件中的适当值daemon.json,该文件位于/etc/docker/Linux 主机或 C:\ProgramData\docker\config\daemon.jsonWindows Server 上。有关使用配置 Docker 的更多信息daemon.json,请参阅 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配置文件中的配置选项daemon.json必须以字符串形式提供。因此,数字和布尔值(例如 的值 syslog-tls-skip-verify)必须用引号 ( ) 括起来"

您可以使用或--log-driver标志为特定容器设置日志记录驱动程序 :docker container createdocker run

$ docker run \
      --log-driver syslog --log-opt syslog-address=udp://1.2.3.4:1111 \
      alpine echo hello world

选项

支持以下日志记录选项作为syslog日志记录驱动程序的选项。daemon.json通过将它们作为键值对添加到JSON 数组,可以将它们设置为默认值log-opts。还可以通过--log-opt <key>=<value>在启动容器时为每个选项添加标志来在给定容器上设置它们。

选项描述示例值
syslog-address外部服务器的地址syslog。 URI 说明符可以是[tcp|udp|tcp+tls]://host:portunix://path、 或unixgram://path。如果传输方式为tcpudp、 或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。请参阅 系统日志文档--log-opt syslog-facility=daemon
syslog-tls-ca-certCA 签名的信任证书的绝对路径。如果地址协议不是 则忽略tcp+tls--log-opt syslog-tls-ca-cert=/etc/ca-certificates/custom/ca.pem
syslog-tls-certTLS 证书文件的绝对路径。如果地址协议不是 则忽略tcp+tls--log-opt syslog-tls-cert=/etc/ca-certificates/custom/cert.pem
syslog-tls-keyTLS 密钥文件的绝对路径。如果地址协议不是 则忽略tcp+tls--log-opt syslog-tls-key=/etc/ca-certificates/custom/key.pem
syslog-tls-skip-verify如果设置为true,则在连接到守护程序时将跳过 TLS 验证syslog。默认为false.如果地址协议不是 则忽略tcp+tls--log-opt syslog-tls-skip-verify=true
tagAPP-NAME附加到消息中的字符串syslog。默认情况下,Docker 使用容器 ID 的前 12 个字符来标记日志消息。有关自定义日志标签格式的信息,请参阅 日志标签选项文档。--log-opt tag=mailer
syslog-format要使用的消息格式syslog。如果未指定,则使用本地 Unix 系统日志格式,而不指定主机名。指定rfc3164RFC-3164 兼容格式、rfc5424RFC-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)