Splunk 日志驱动
splunk 日志驱动将容器日志发送到
Splunk Enterprise 和 Splunk Cloud 中的 HTTP 事件收集器
。
用法
您可以配置 Docker 日志以默认使用 splunk 驱动程序,也可以针对每个容器进行配置。
要将 splunk 驱动程序用作默认日志驱动程序,请在 daemon.json 配置文件中将键 log-driver 和 log-opts 设置为适当的值,然后重启 Docker。例如:
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "",
"splunk-url": "",
...
}
}在 Linux 主机上,daemon.json 文件位于 /etc/docker/,或者在 Windows Server 上位于 C:\ProgramData\docker\config\daemon.json。有关使用 daemon.json 配置 Docker 的更多信息,请参阅 daemon.json。
注意
log-opts配置文件中的配置选项必须以字符串形式提供。布尔值和数值(例如splunk-gzip或splunk-gzip-level的值)因此必须用引号(")括起来。
要为特定容器使用 splunk 驱动程序,请在 docker run 中使用命令行标志
--log-driver 和 log-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驱动程序,请使用带有标志--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 | 用于向后台日志记录器工作进程发送消息的通道中,可以存在的最大待处理消息数量,这些消息将被批量处理。 |