在 docker 中配置企业 Splunk,以便服务可以通过 HTTP 记录到 HTTP 事件收集器

Configure enterprise Splunk in docker, so services can log to HTTP Event Collector over HTTP

我正在尝试在 docker 中设置和配置企业 Splunk 以进行本地测试。我希望能够通过 splunk 的 docker 日志提供程序将日志发送到 HTTP 事件收集器 (HEC) - 请参阅 here.

当我 运行 splunk 容器时,我可以通过将 SPLUNK_HEC_TOKEN 指定为环境变量来配置 HEC 令牌(请参阅下面的 docker-compose),但我希望能够通过 HTTP(即没有 SSL)调用 HEC 端点。如果在 /opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf 中启用了 SSL,我的测试服务(请参阅下面的 docker-compose)不起作用 - 我收到以下错误:

Error response from daemon: failed to initialize logging driver: Options https://localhost:8088/services/collector/event/1.0: x509: cannot validate certificate for localhost because it doesn't contain any IP SANs.

我的 docker-compose 文件如下所示:

version: '3.5'

networks:
   skynet:

services:

   splunk:
      image: splunk/splunk:latest
      environment:
         SPLUNK_START_ARGS: "--accept-license"
         SPLUNK_PASSWORD: $SPLUNK_PASSWORD
         SPLUNK_HEC_TOKEN: $SPLUNK_HEC_TOKEN
      ports:
         - 8000:8000
         - 8088:8088
      networks:
         - skynet

   test:
      image: ryans/test-service
      depends_on:
         - splunk
      environment:
         WAIT_FOR_IT: http://localhost:8000
      ports:
         - 5001:5001
      logging:
         driver: splunk
         options:
            splunk-url: https://localhost:8088
            splunk-token: $SPLUNK_HEC_TOKEN
            splunk-insecureskipverify: 'true'
      networks:
         - skynet

有趣的是,如果我注释掉我的测试服务,并且仅 运行 docker-compose 仅​​包含 Splunk 容器;我可以使用 cURL 例如

通过 HTTPS 调用 Splunk HEC URL
curl -k https://localhost:8088/services/collector -H 'Authorization: Splunk abcd1234' -d '{\"event\": \"Hello from event collector\"}'

在 Splunk 网络界面中;如果我转到 settings > Data Inputs > HTTP Event Collector > Global Settings 并明确禁用启用 SSL;然后我可以通过 HTTP(使用 cURL)将日志发送到 HEC 端点,并且我可以无错误地启动我的测试服务(并且日志开始通过 Splunk)。

docker run -p 5001:5001 --log-driver=splunk --log-opt splunk-token=abcd1234 --log-opt splunk-url=http://localhost:8088 ryans/test-service

我的问题是如何让 Enable SSL 设置默认为 disabled/off?

仅供参考,我尝试覆盖 splunk/splunk docker 图像以在 /opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf 中手动设置 enableSSL,但出于某种原因(当我执行到 运行ning容器)恢复为 enabled/on 即 enableSSL = 1...

Docker 文件:

FROM splunk/splunk:latest
COPY ./inputs.conf /opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf

inputs.conf:

[http]
disabled = 0
enableSSL = 0

[http://splunk_hec_token]
disabled = 0
token = abcd1234

您是否尝试过使用此处详述的 default.yml

https://splunk.github.io/docker-splunk/ADVANCED.html#usage

例子

splunk:
  hec:
    enable: True
    ssl: false
    port: 8088
    # hec.token is used only for ingestion (receiving Splunk events)
    token: <default_hec_token>