Syslog 日誌驅動程式
syslog 日誌驅動程式將日誌路由至 syslog 伺服器。syslog 通訊協定使用原始字串作為日誌訊息,並支援有限的元數據集。syslog 訊息必須以特定格式編寫才能生效。從有效的訊息中,接收者可以提取以下資訊:
- 優先級 (Priority):日誌級別,例如
debug、warning、error、info。 - 時間戳記 (Timestamp):事件發生的時間。
- 主機名稱 (Hostname):事件發生的位置。
- 設備 (Facility):記錄訊息的子系統,例如
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 以使變更生效。
注意
daemon.json設定檔中的log-opts設定選項必須以字串形式提供。因此,數值和布林值(例如syslog-tls-skip-verify的值)必須用引號 (") 括起來。
您可以透過在 docker container create 或 docker run 指令中使用 --log-driver 旗標,為特定容器設定日誌驅動程式。
$ docker run \
--log-driver syslog --log-opt syslog-address=udp://1.2.3.4:1111 \
alpine echo hello world
選項
syslog 日誌驅動程式支援以下日誌選項。它們可以透過將其作為鍵值對新增至 log-opts JSON 陣列,在 daemon.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 格式(不含指定的主機名稱)。若要使用 RFC-3164 相容格式,請指定 rfc3164;若要使用 RFC-5424 相容格式,請指定 rfc5424;若要使用具備微秒時間戳記解析度的 RFC-5424 相容格式,請指定 rfc5424micro。 | --log-opt syslog-format=rfc5424micro |
labels | 適用於啟動 Docker 守護程序時。此守護程序接受的以逗號分隔的日誌相關標籤清單。用於進階 日誌標籤選項。 | --log-opt labels=production_status,geo |
labels-regex | 適用於啟動 Docker 守護程序時。類似於並相容於 labels。用於匹配日誌相關標籤的正規表示式。用於進階 日誌標籤選項。 | --log-opt labels-regex=^(production_status|geo) |
環境變數 | 適用於啟動 Docker 守護程序時。此守護程序接受的以逗號分隔的日誌相關環境變數清單。用於進階 日誌標籤選項。 | --log-opt env=os,customer |
env-regex | 適用於啟動 Docker 守護程序時。類似於並相容於 env。用於匹配日誌相關環境變數的正規表示式。用於進階 日誌標籤選項。 | --log-opt env-regex=^(os|customer) |