Splunk 日志驱动

splunk 日志驱动将容器日志发送到 Splunk Enterprise 和 Splunk Cloud 中的 HTTP Event Collector

用法

你可以配置 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 驱动,请编辑 daemon.json,使用键 "log-opts": {"NAME": "VALUE", ...}
  • 要为单个容器配置 splunk 驱动,请在 docker run 命令中使用标志 --log-opt NAME=VALUE ...
选项必需描述
splunk-token必需Splunk HTTP Event Collector 令牌。
splunk-url必需你的 Splunk Enterprise、自助式 Splunk Cloud 实例或 Splunk Cloud 托管集群的路径(包含 HTTP Event Collector 使用的端口和方案),采用以下格式之一: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 Daemon 运行的同一机器上。

使用 HTTPS 方案指定了根证书路径和 Common Name。这用于验证。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 Daemon 设置环境变量来配置一些高级选项。

环境变量名称默认值描述
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用于向后台日志记录器工作者发送消息的通道中可以存在的待处理消息的最大数量,该工作者会对消息进行批处理。
页面选项