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 的值)必須用引號 (") 括起來。

你可以使用 --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 中設定,方法是將它們作為鍵值對新增到 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-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,則在連線到 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)