首页 > 解决方案 > 在 docker 中配置企业 Splunk,以便服务可以通过 HTTP 登录到 HTTP Event Collector

问题描述

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

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

来自守护程序的错误响应:无法初始化日志记录驱动程序:选项 https://localhost:8088/services/collector/event/1.0: x509: 无法验证 localhost 的证书,因为它不包含任何 IP SAN。

我的 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

有趣的是,如果我注释掉我的测试服务并仅使用 Splunk 容器运行 docker-compose;我可以使用 cURL 通过 HTTPS 调用 Splunk HEC URL,例如

curl -k https://localhost:8088/services/collector -H 'Authorization: Splunk abcd1234' -d '{\"event\": \"Hello from event collector\"}'

在 Splunk Web 界面中;如果我去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设置默认为禁用/关闭?

仅供参考,我尝试覆盖splunk/splunkdocker 映像以手动设置 enableSSL in /opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf,但由于某种原因(当我执行到正在运行的容器中时)它被恢复为启用/打开,即enableSSL = 1...

Dockerfile:

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

输入.conf:

[http]
disabled = 0
enableSSL = 0

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

标签: dockerdocker-composesplunk

解决方案


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

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>


推荐阅读