在 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>
我正在尝试在 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 URLcurl -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>