【问题标题】:How to initialize Splunk HTTP Event Collector via Docker Compose and use it with splunk logging driver如何通过 Docker Compose 初始化 Splunk HTTP 事件收集器并将其与 splunk 日志记录驱动程序一起使用
【发布时间】:2023-08-04 05:27:01
【问题描述】:

我正在尝试使用 Docker Compose 设置本地开发环境,该环境引导 Splunk Enterprise 服务器并在应用服务器上使用 splunk logging driver

版本:

  • Docker 引擎:18.06.1-ce
  • 编写:1.22.0
  • 编写文件:3.7
  • Splunk 企业版:7.2.0

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

version: "3.7"

services:
  app:
    build: ./app
    command: bash -c "npm run start:docker"
    depends_on:
      - splunk
    environment:
      - NODE_ENV=development
      - SERVER_PORT=8080
    logging:
      driver: splunk
      options:
        splunk-format: "json"
        splunk-insecureskipverify: "true"
        splunk-source: "app"
        splunk-token: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
        splunk-url: "http://splunk:8088"
        tag: "{{.ImageName}}/{{.Name}}/{{.ID}}"
    ports:
      - "80:8080"
    volumes:
      - "./app:/usr/src/app"

  splunk:
    environment:
      - SPLUNK_ENABLE_LISTEN=9997
      - SPLUNK_START_ARGS=--accept-license --no-prompt --answer-yes
      - SPLUNK_USERNAME=admin
      - SPLUNK_PASSWORD=password
    hostname: splunk
    image: splunk/splunk:7.2.0
    ports:
      - "8000:8000"
      - "8088:8088"
      - "9997:9997"
    restart: always

为了使其按预期工作,我需要生成一个 HTTP 事件收集器令牌并以某种方式使其可用于应用服务。

我看到您可以使用环境变量SPLUNK_CMD 来运行命令,大概是在Splunk 服务启动并运行之后,但是当我尝试将它用于generate a token with the CLI 时,什么也没发生。我在日志中没有看到任何失败,并且在“设置”>“数据输入”下没有标记。

另一个问题是 Splunk 需要一些时间来启动,并且在它开始侦听之前,应用服务无法构建,因为日志驱动程序无法连接。

有可能做我想做的事吗?如果有,怎么做?

【问题讨论】:

    标签: docker docker-compose splunk


    【解决方案1】:

    新镜像(7.2.0)的配置说可以用环境变量https://github.com/splunk/docker-splunk/blob/48d5322bc574792a5bfbfe8f68769aa16e7688b7/documentation/ADVANCED.md#valid-enterprise-environment-variables指定一个HTTP Event Collector token

    但在查看https://github.com/splunk/splunk-ansible/search?q=set_as_hec_receiver.yml&unscoped_q=set_as_hec_receiver.yml 之后,我认为它不适用于单个实例 - 似乎该剧本将仅针对重量级转发器和索引器执行。

    或者,如果您查看"legacy"/community supported 图像,您会发现另一种方法。例如,您可以查看我们在 Outcold Solutions 用于开发 Splunk 应用程序的应用程序样板https://github.com/outcoldsolutions/splunk-app-boilerplate,其中我们:

    1. 地图配置https://github.com/outcoldsolutions/splunk-app-boilerplate/blob/master/Makefile#L23
    2. 复制到https://github.com/outcoldsolutions/splunk-app-boilerplate/blob/master/Makefile#L26

    要解决此问题“另一个问题是 Splunk 需要一些时间才能启动,并且在它开始侦听之前,应用服务无法构建,因为日志驱动程序无法连接。” - 请查看选项splunk-verify-connection(请参阅https://docs.docker.com/config/containers/logging/splunk/#splunk-options),这样它将不断重试发送数据,直到 HTTP 事件收集器可用。

    作为splunk-verify-connection 的替代方法,您还可以使用另一种将日志转发到 Splunk 的方法,即使用 Outcold Solutions 收集器,从 JSON 日志中转发容器日志。很容易安装https://www.outcoldsolutions.com/docs/monitoring-docker/v5/installation/,你也可以使用一个应用程序来监控你的docker环境https://splunkbase.splunk.com/app/3723/

    【讨论】:

    • 谢谢,这很有帮助——尤其是 Splunk Docker 映像的高级配置文档的链接,我在搜索中没有找到它。这让我走上了寻找解决方案的好道路,正如您所提到的,可能涉及使用splunk_frontend_forwarder。我查看了您的替代解决方案,但这似乎是一项付费服务​​,如果可能的话,我真的很想使用 Splunk 和 Docker Compose 来完成这项工作。
    • 正确,它是付费应用程序。我们确实提供 6 个月的免费开发试用许可证,并有可能延长。见outcoldsolutions.com/contact