Splunk 日志记录驱动程序

日志记录驱动程序将容器日志发送到 Splunk Enterprise 和 Splunk Cloud 中的 HTTP 事件收集器splunk

用法

您可以将 Docker 日志记录配置为默认使用驱动程序,也可以在 每个容器。splunk

要将驱动程序用作默认日志记录驱动程序,请在配置文件中将 keys 和 设置为适当的值,然后重新启动 Docker。例如:splunklog-driverlog-optsdaemon.json

{
  "log-driver": "splunk",
  "log-opts": {
    "splunk-token": "",
    "splunk-url": "",
    ...
  }
}

daemon.json 文件位于 Linux 主机或 Windows Server 上。有关 使用 配置 Docker,请参阅 daemon.json/etc/docker/C:\ProgramData\docker\config\daemon.jsondaemon.json

注意

log-opts配置文件中的配置选项必须 以字符串形式提供。因此,布尔值和数值(如 或 的值)必须用引号括起来 ().daemon.jsonsplunk-gzipsplunk-gzip-level"

要使用特定容器的驱动程序,请使用命令行标志和:splunk--log-driverlog-optdocker run

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

Splunk 选项

以下属性允许您配置 Splunk 日志记录驱动程序。

  • 要跨 Docker 环境配置驱动程序,请使用注册表项进行编辑。splunkdaemon.json"log-opts": {"NAME": "VALUE", ...}
  • 要为单个容器配置驱动程序,请与标志 .splunkdocker 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自选消息格式。可以是 、 或 。默认为 。inlinejsonrawinline
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 的 12 个字符)。请参阅 log tag option 文档 以自定义日志标签格式。{{.ID}}
labels自选以逗号分隔的标签键列表,如果为 container 指定了这些标签,则应包含在 message 中。
labels-regex自选与 类似并兼容。用于匹配与日志记录相关的标签的正则表达式。用于高级日志标记选项labels
env自选环境变量键的逗号分隔列表,如果为 container 指定了这些变量,则应包含在 message 中。
env-regex自选与 类似并兼容。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标记选项env

如果 和 键之间存在冲突,则 the 的值优先。这两个选项都会向 logging 消息。labelenvenv

以下是为 Splunk Enterprise 指定的日志记录选项的示例 实例。该实例安装在本地的同一台计算机上, Docker 守护程序正在运行。

根证书和公用名的路径是使用 HTTPS 指定的 方案。这用于验证。的 由 Splunk 证书自动生成。SplunkServerDefaultCert

$ 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 实例,其格式为 like 的 API 中,不包含 port 说明符。splunk-urlhttps://http-inputs-XXXXXXXX.splunkcloud.com

消息格式

有三种日志记录驱动程序消息格式:(默认)、 、 和。inlinejsonraw


默认格式是每条日志消息作为字符串嵌入的位置。 例如: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\"}"
}

要将消息格式设置为对象,请将 .这 driver 尝试将每一行解析为 JSON 对象,并将其作为嵌入的 对象。如果它无法解析消息,则会发送 。例如:json--log-opt splunk-format=jsoninline

{
  "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 日志记录驱动程序允许您通过设置 环境变量。

环境变量名称默认值描述
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用于将消息发送到后台记录器工作程序(对消息进行批处理)的通道中可以包含的最大待处理消息数。