Syslog 日誌驅動程式

syslog 日誌驅動將日誌路由到 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 驅動用作預設日誌驅動,請在 daemon.json 檔案中將 log-driverlog-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 以使更改生效。

注意

daemon.json 配置檔案中的 log-opts 配置選項必須以字串形式提供。因此,數值和布林值(例如 syslog-tls-skip-verify 的值)必須用引號(")括起來。

您可以透過對 docker container createdocker run 使用 --log-driver 標誌來為特定容器設定日誌記錄驅動程式

$ 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:portunix://pathunixgram://path。如果傳輸協議是 tcpudptcp+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-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,則在連線到 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)