Splunk 紀錄檔驅動程式

splunk 記錄驅動程式會將容器記錄傳送到 Splunk Enterprise 和 Splunk Cloud 中的 HTTP 事件收集器

用法

您可以將 Docker 記錄設定為預設使用 splunk 驅動程式,或根據每個容器使用。

若要將 splunk 驅動程式用作預設記錄驅動程式,請在 daemon.json 設定檔中將 log-driverlog-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-gzipsplunk-gzip-level 的值)必須以引號 (") 括住。

若要將 splunk 驅動程式用於特定容器,請在 docker run 中使用命令列旗標 --log-driverlog-opt

$ docker run --log-driver=splunk --log-opt splunk-token=VALUE --log-opt splunk-url=VALUE ...

Splunk 選項

下列屬性可讓您設定 Splunk 記錄驅動程式。

  • 若要設定整個 Docker 環境的 splunk 驅動程式,請使用金鑰 "log-opts": {"NAME": "VALUE", ...} 編輯 daemon.json
  • 若要設定個別容器的 splunk 驅動程式,請使用帶有旗標 --log-opt NAME=VALUE ...docker run
選項必要說明
splunk-token必填Splunk HTTP 事件收集器權杖。
splunk-url必填Splunk Enterprise、自助式 Splunk Cloud 執行個體或 Splunk Cloud 受管叢集的路徑(包含 HTTP 事件收集器使用的埠和協定),格式如下:https://your_splunk_instance:8088https://input-prd-p-XXXXXXX.cloud.splunk.com:8088https://http-inputs-XXXXXXXX.splunkcloud.com
splunk-source選用事件來源。
splunk-sourcetype選用事件來源類型。
splunk-index選用事件索引。
splunk-capath選用根憑證的路徑。
splunk-caname選用用於驗證伺服器憑證的名稱;預設使用 splunk-url 的主機名稱。
splunk-insecureskipverify選用忽略伺服器憑證驗證。
splunk-format選用訊息格式。可以是 inlinejsonraw。預設為 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選用以逗號分隔的環境變數鍵列表,如果容器指定了這些變數,則應包含在訊息中。
env-regex選用類似於且相容於 env。用於匹配日誌相關環境變數的正則表達式。用於進階日誌標籤選項

如果 labelenv 鍵之間發生衝突,則 env 的值優先。這兩個選項都會將其他欄位新增到日誌訊息的屬性中。

以下是為 Splunk Enterprise 執行個體指定的日誌選項範例。該執行個體安裝在執行 Docker 守護行程式的同一台機器上。

使用 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(預設)、jsonraw


預設格式為 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_FREQUENCY5 秒等待更多訊息批次處理的時間。
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_BATCH_SIZE1000在一次批次處理中傳送訊息之前應累積的訊息數量。
SPLUNK_LOGGING_DRIVER_BUFFER_MAX10 * 1000緩衝區中保留以供重試的最大訊息數量。
SPLUNK_LOGGING_DRIVER_CHANNEL_SIZE4 * 1000可在通道中待處理的最大訊息數量,用於將訊息傳送到背景記錄器工作程式,該工作程式會將訊息批次處理。