Splunk 日志驱动程序
splunk
日志驱动程序将容器日志发送到HTTP事件收集器在Splunk Enterprise和Splunk Cloud中。
用法
您可以配置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
驱动程序,请使用命令行标志--log-driver
和log-opt
以及docker run
$ 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: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 | 可选 | 如果为容器指定了这些环境变量,则应包含在消息中的环境变量键的逗号分隔列表。 |
env-regex | 可选 | 与env 类似并兼容。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标签选项。 |
如果label
和env
键之间发生冲突,则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
(默认)、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 | 用于将消息发送到后台日志记录工作程序(对其进行批处理)的通道中可以存在的待处理消息的最大数量。 |