Splunk 日誌驅動程式
splunk 記錄驅動程式會將容器記錄發送到 Splunk Enterprise 和 Splunk Cloud 中的 HTTP 事件收集器 (HTTP Event Collector)。
使用方式
您可以將 Docker 記錄配置為預設使用 splunk 驅動程式,也可以按容器進行設定。
若要將 splunk 驅動程式作為預設記錄驅動程式,請在 daemon.json 設定檔中將 log-driver 和 log-opts 鍵設定為適當的值,然後重新啟動 Docker。例如:
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "",
"splunk-url": "",
...
}
}daemon.json 檔案位於 Linux 主機的 /etc/docker/,或 Windows Server 的 C:\ProgramData\docker\config\daemon.json。有關使用 daemon.json 設定 Docker 的詳細資訊,請參閱 daemon.json。
注意
daemon.json設定檔中的log-opts設定選項必須以字串形式提供。因此,布林值和數值(例如splunk-gzip或splunk-gzip-level的值)必須用引號 (") 括起來。
若要為特定容器使用 splunk 驅動程式,請在 docker run 中使用命令列旗標 --log-driver 和 --log-opt:
$ docker run --log-driver=splunk --log-opt splunk-token=VALUE --log-opt splunk-url=VALUE ...
Splunk 選項
下列屬性可讓您配置 Splunk 記錄驅動程式。
- 若要在整個 Docker 環境中配置
splunk驅動程式,請編輯daemon.json並加入鍵"log-opts": {"NAME": "VALUE", ...}。 - 若要為個別容器配置
splunk驅動程式,請使用帶有--log-opt NAME=VALUE ...旗標的docker run指令。
| 選項 | 必要 | 描述 |
|---|---|---|
splunk-token | required | Splunk HTTP 事件收集器權杖 (Token)。 |
splunk-url | required | 通往您的 Splunk Enterprise、自助式 Splunk Cloud 執行個體或 Splunk Cloud 受管叢集的路徑(包含 HTTP 事件收集器使用的連接埠和配置),格式如下:https://your_splunk_instance:8088、https://input-prd-p-XXXXXXX.cloud.splunk.com:8088 或 https://http-inputs-XXXXXXXX.splunkcloud.com。 |
splunk-source | 選擇性 | 事件來源。 |
splunk-sourcetype | 選擇性 | 事件來源類型。 |
splunk-index | 選擇性 | 事件索引。 |
splunk-capath | 選擇性 | 根憑證路徑。 |
splunk-caname | 選擇性 | 用於驗證伺服器憑證的名稱;預設使用 splunk-url 的主機名稱。 |
splunk-insecureskipverify | 選擇性 | 忽略伺服器憑證驗證。 |
splunk-format | 選擇性 | 訊息格式。可以是 inline、json 或 raw。預設為 inline。 |
splunk-verify-connection | 選擇性 | 在啟動時驗證 Docker 是否可以連線到 Splunk 伺服器。預設為 true。 |
splunk-gzip | 選擇性 | 啟用/停用 gzip 壓縮以將事件傳送至 Splunk Enterprise 或 Splunk Cloud 執行個體。預設為 false。 |
splunk-gzip-level | 選擇性 | 設定 gzip 的壓縮層級。有效值為 -1(預設)、0(不壓縮)、1(最佳速度)... 9(最佳壓縮)。預設為 DefaultCompression。 |
tag | 選擇性 | 指定訊息標籤,該標籤會解譯某些標記。預設值為 {{.ID}}(容器 ID 的 12 個字元)。請參閱 記錄標籤選項文件 以自訂記錄標籤格式。 |
labels | 選擇性 | 以逗號分隔的標籤鍵清單。如果為容器指定了這些標籤,它們將包含在訊息中。 |
labels-regex | 選擇性 | 與 labels 相似且相容。用於比對與日誌相關標籤的正規表示式。用於進階的 日誌標籤選項。 |
環境變數 | 選擇性 | 以逗號分隔的環境變數鍵清單。如果為容器指定了這些變數,它們將包含在訊息中。 |
env-regex | 選擇性 | 與 env 相似且相容。用於比對與日誌相關環境變數的正規表示式。用於進階的 日誌標籤選項。 |
如果 label 和 env 鍵之間發生衝突,則以 env 的值為準。這兩個選項都會將額外的欄位新增至記錄訊息的屬性中。
以下是為 Splunk Enterprise 執行個體指定的記錄選項範例。該執行個體安裝在本機,即執行 Docker 常駐程式 (daemon) 的同一台機器上。
根憑證和通用名稱的路徑是使用 HTTPS 配置指定的。這用於驗證。SplunkServerDefaultCert 是由 Splunk 憑證自動產生的。
$ docker run \
--log-driver=splunk \
--log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
--log-opt splunk-url=https://splunkhost:8088 \
--log-opt splunk-capath=/path/to/cert/cacert.pem \
--log-opt splunk-caname=SplunkServerDefaultCert \
--log-opt tag="{{.Name}}/{{.FullID}}" \
--log-opt labels=location \
--log-opt env=TEST \
--env "TEST=false" \
--label location=west \
your/application
託管於 Splunk Cloud 的 Splunk 執行個體的 splunk-url 格式為 https://http-inputs-XXXXXXXX.splunkcloud.com,且不包含連接埠識別碼。
訊息格式
有三種記錄驅動程式訊息格式:inline(預設)、json 和 raw。
預設格式為 inline,其中每條記錄訊息都作為字串嵌入。例如:
{
"attrs": {
"env1": "val1",
"label1": "label1"
},
"tag": "MyImage/MyContainer",
"source": "stdout",
"line": "my message"
}{
"attrs": {
"env1": "val1",
"label1": "label1"
},
"tag": "MyImage/MyContainer",
"source": "stdout",
"line": "{\"foo\": \"bar\"}"
}若要將訊息格式化為 json 物件,請設定 --log-opt splunk-format=json。驅動程式會嘗試將每一行解析為 JSON 物件並將其作為嵌入物件傳送。如果無法解析該訊息,則會以 inline 方式傳送。例如:
{
"attrs": {
"env1": "val1",
"label1": "label1"
},
"tag": "MyImage/MyContainer",
"source": "stdout",
"line": "my message"
}{
"attrs": {
"env1": "val1",
"label1": "label1"
},
"tag": "MyImage/MyContainer",
"source": "stdout",
"line": {
"foo": "bar"
}
}若要將訊息格式化為 raw,請設定 --log-opt splunk-format=raw。屬性(環境變數和標籤)和標籤會作為訊息的前綴。例如:
MyImage/MyContainer env1=val1 label1=label1 my message
MyImage/MyContainer env1=val1 label1=label1 {"foo": "bar"}
進階選項
Splunk 記錄驅動程式可讓您透過為 Docker 常駐程式設定環境變數來配置一些進階選項。
| 環境變數名稱 | 預設值 | 描述 |
|---|---|---|
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_FREQUENCY | 5s | 等待更多訊息進行批次處理的時間。 |
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_BATCH_SIZE | 1000 | 在以單一批次發送之前應累積的訊息數量。 |
SPLUNK_LOGGING_DRIVER_BUFFER_MAX | 10 * 1000 | 保留在緩衝區中用於重試的最大訊息數量。 |
SPLUNK_LOGGING_DRIVER_CHANNEL_SIZE | 4 * 1000 | 發送至後台記錄工作執行緒(負責批次處理)的通道中,可容納的最大待處理訊息數量。 |