Skip to main content

生态扩大进行中!云原生 API 网关 Apache APISIX 集成 Splunk HTTP Event Collector

· One min read
帅进超
曾奕霖

本文将为大家介绍如何在云原生 API 网关 Apache APISIX 中配置和使用 Splunk HEC 服务。

随着技术的不断迭代和企业架构的不断演进,系统的复杂度越来越高。日志作为分析和观测的“原材料”,能支持和兼容不同的分析引擎会为用户在选型和后期运维过程中降低很大成本。基于日志的分析和观测作为保障系统稳定的基石,它的角色非常重要。

Apache APISIX 作为一个高性能的 API 网关不仅在性能上有着良好的表现,并且在数据和日志的运维上通过和社区用户的交流共建也已经支持了大部分主流的开源及商业日志解决方案,包括:HTTP LoggerTCP LoggerKafka LoggerUDP LoggerRocketMQ LoggerSkyWalking LoggerAliyun Cloud Logging(SLS)Google Cloud Logging 等。

最近通过社区的共建支持,Apache APISIX 的 Logger 全家桶中又多了一位新成员:Splunk HEC Logging

本文将为大家介绍如何在 Apache APISIX 中配置和使用 Splunk HEC 服务。

关于 Splunk HTTP Event Collector#

Splunk 是一个机器数据的全文搜索引擎,可应用于采集、索引、搜索和分析各种应用数据,根据 DB Engines 的检索引擎排名,目前 Splunk 位列第二,是一款应用广泛的全文检索软件。Splunk 和 ElasticSearch 一样,是准实时可以提供不间断搜索结果的数据流。

Splunk HTTP Event Collector(HEC) 是 Splunk 提供的 HTTP 事件收集器,主要提供以 HTTP(S) 协议将数据和应用程序事件发送到 Splunk 的能力。

关于 Splunk HEC Logging 插件#

splunk-hec-logging 插件用于将 Apache APISIX 的请求日志转发到 Splunk 中进行分析和存储。启用该插件后,Apache APISIX 将在 Log 阶段获取请求上下文信息,并将其序列化为 Splunk Event Data 格式后提交到批处理队列中。当触发批处理队列每批次最大处理容量,或刷新缓冲区的最大时间时,会将队列中的数据提交到 Splunk HEC 中。

如何使用 Splunk HEC Logging 插件#

Splunk 配置步骤#

部署 Splunk Enterprise#

请参考 Splunk 的 官方安装指南 进行部署,本文将通过 Docker 进行部署演示。 Docker 命令参数如下:

docker run -p 18088:8088 -p 18000:8000 \    # 8088为HEC端口,8000为管理后台端口  -e "SPLUNK_PASSWORD=your-password" \      # 管理后台登录密码  -e "SPLUNK_START_ARGS=--accept-license" \ # 接受许可证条款(Splunk默认将提供一张Enterprise Trial License)  -e "SPLUNK_HEC_TOKEN=your-hec-token" \    # 设置默认HEC令牌,配置此项后将创建一个默认的HEC  -itd --rm --name splunk-example splunk/splunk:latest

命令参数具体释义可参考:Docker Splunk 文档

配置 Splunk HEC#

Docker 中已经配置并创建了默认的 HEC,在这里不再过多赘述创建 HEC 的流程。具体手动创建的流程可参考文档:Set up and use HTTP Event Collector in Splunk Web

登录 Splunk Enterprise 并检查 HEC#

通过浏览器访问 Docker 的映射端口。因为需要把管理后台的 8000 端口映射到宿主机的 18000 端口,所以在操作时可以在宿主机上通过「回环地址加端口」的方式在浏览器访问即可。例如:http://127.0.0.1:18000,登录的默认用户名是 admin,密码是在上例的环境变量中设置的 SPLUNK_PASSWORD 的值。

如下图所示,表示登录成功。

Splunk 登录界面

单击界面右上方 “Settings > Data Inputs” 检查默认 HEC 是否设置成功:

默认 HEC

在 HTTP Event Collector 的 Inputs 列中我们已经可以看到 HEC 的数量,表示设置成功。

HEC 的数量

此时可以点击 HTTP Event Collector 进入 HEC 详情列表查看 HECs 的 Token 信息。

HECs 的 Token 信息

Token Values 即在上文中 Docker 环境变量中配置的 SPLUNK_HEC_TOKEN 的值。

Apache APISIX 配置步骤#

启用插件#

运行以下命令,启用 splunk-hec-logging 插件。

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "plugins":{        "splunk-hec-logging":{            "endpoint":{                // HEC 端点地址                "uri":"http://127.0.0.1:18088/services/collector",                // HEC Token                "token":"BD274822-96AA-4DA6-90EC-18940FB2414C"            },            // // 刷新批处理队列缓冲区的最大时间(以秒为单位)            "inactive_timeout":2,             // 每个批处理队列最大容纳日志条目数            "batch_max_size":10        }    },    "upstream":{        "type":"roundrobin",        "nodes":{            "127.0.0.1:1980":1        }    },    "uri":"/splunk.do"}'

插件参数说明如下表所示。

名称是否必填默认值描述
endpointN/ASplunk HEC 端点配置信息
endpoint.uriN/ASplunk HEC 事件收集API
endpoint.tokenN/ASplunk HEC 身份令牌
endpoint.channelN/ASplunk HEC 发送渠道标识,参考:About HTTP Event Collector Indexer Acknowledgment
endpoint.timeout10Splunk HEC 数据提交超时时间(以秒为单位)
ssl_verifyTRUE启用 SSL 验证, 参考:OpenResty 文档
max_retry_count0从处理管道中移除之前的最大重试次数
retry_delay1如果执行失败,流程执行应延迟的秒数
buffer_duration60必须先处理批次中最旧条目的最大期限(以秒为单位)
inactive_timeout5刷新缓冲区的最大时间(以秒为单位)
batch_max_size1000每个批处理队列可容纳的最大条目数

发送请求#

运行以下命令,向 Splunk 发送请求。

$ curl -i http://127.0.0.1:9080/splink.doHTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveDate: Fri, 10 Dec 2021 09:57:52 GMTServer: APISIX/2.11.0
Hello, Splunk HEC Logging

验证日志#

登录 Splunk 控制台,点击 “Search & Reporting”。

Splunk 控制台

在搜索输入框中输入:source="apache-apisix-splunk-hec-logging",即可查询到发送的请求日志。

查询请求日志

停用插件#

移除 splunk-hec-logging 相关配置即可。

curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "uri":"/logging.do",    "upstream":{        "type":"roundrobin",        "nodes":{            "127.0.0.1:1980":1        }    },    "plugins":{    }}'

总结#

目前,Apache APISIX 也在开发其他插件以支持集成更多服务,如果您对此感兴趣,欢迎随时在 GitHub Discussion 中发起讨论,也可通过邮件列表进行交流。

相关阅读#