Splunk 日誌驅動程式

splunk 日誌驅動程式將容器日誌傳送到 HTTP 事件收集器 中的 Splunk Enterprise 和 Splunk Cloud。

用法

您可以將 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 驅動程式,請使用 docker run 命令和 --log-opt NAME=VALUE ... 標誌。
選項必需描述
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_FREQUENCY5s等待更多訊息進行批處理的時間。
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_BATCH_SIZE1000應該積累的訊息數量,以便在一次批處理中傳送。
SPLUNK_LOGGING_DRIVER_BUFFER_MAX10 * 1000緩衝區中用於重試的最多訊息數量。
SPLUNK_LOGGING_DRIVER_CHANNEL_SIZE4 * 1000用於將訊息傳送到後臺日誌記錄工作程式(將訊息批處理)的通道中可以容納的最多掛起訊息數量。