跳到主要内容
版本:3.10.x

将访问日志发送到 Splunk

API7 网关可以将访问日志直接发送到 Splunk,具体方式是通过 splunk-hec-logging 插件使用 HTTP Event Collector(HEC)协议。无需单独部署日志转发器,即可在 Splunk 中集中分析日志、配置告警和创建监控面板。

本指南介绍集成流程。有关完整的插件参数和元数据参考,请参阅 splunk-hec-logging

如果需要收集 Kubernetes Pod 中的网关错误日志,而不是从路由传输请求访问日志,请参阅将 Kubernetes 错误日志发送到 Splunk

前置条件

步骤一:在 Splunk 中启用 HEC

  1. 在 Splunk 中,进入 Settings > Data Inputs > HTTP Event Collector
  2. 点击 New Token 并完成以下配置:
    • Name:描述性名称,例如 api7-gateway
    • Source type_json
    • Index:选择或创建用于存储网关日志的索引,例如 main
  3. 保存并记录 HEC 令牌

HEC 端点 URL 通常为 https://<SPLUNK_HOST>:8088/services/collector/event

步骤二:启用插件

可以在单个路由上启用 splunk-hec-logging(仅记录选定流量),也可以将其配置为全局规则(记录网关组中的所有流量)。请选择以下一种方式。

选项 A:按路由启用

# 为上游创建服务
curl -k "https://localhost:7443/apisix/admin/services/splunk-service?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "splunk-service",
"upstream": {
"type": "roundrobin",
"nodes": [
{ "host": "httpbin.org", "port": 80, "weight": 1 }
]
}
}'

# 创建使用该服务并启用插件的路由
curl -k "https://localhost:7443/apisix/admin/routes/splunk-route?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "splunk-route",
"service_id": "splunk-service",
"paths": ["/anything/*"],
"plugins": {
"splunk-hec-logging": {
"endpoint": {
"uri": "https://splunk.example.com:8088/services/collector/event",
"token": "YOUR_HEC_TOKEN"
}
}
}
}'

选项 B:全局规则

全局规则会将插件应用到网关组处理的每个请求。仍需要至少一个路由来匹配流量。

curl -k "https://localhost:7443/apisix/admin/global_rules/splunk-hec-logging?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"plugins": {
"splunk-hec-logging": {
"endpoint": {
"uri": "https://splunk.example.com:8088/services/collector/event",
"token": "YOUR_HEC_TOKEN"
}
}
}
}'

可选:自定义日志格式

使用插件元数据覆盖每个事件包含的默认字段。值支持 NGINX $variable 语法。以下示例展示三个常用字段;有关完整的默认格式和所有支持的变量,请参阅 splunk-hec-logging

curl -k "https://localhost:7443/apisix/admin/plugin_metadata/splunk-hec-logging?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"log_format": {
"method": "$request_method",
"uri": "$request_uri",
"status": "$status"
}
}'

该元数据会应用于同一网关组中的所有 splunk-hec-logging 插件实例。

验证

通过网关发送测试请求:

curl -i "http://127.0.0.1:9080/anything/test"

在 Splunk 中,使用步骤一选择的索引搜索日志条目:

index=main source="apache-apisix-splunk-hec-logging"

应该会看到包含请求详情的事件。插件会先批量处理事件再将其发送到 Splunk,因此日志条目可能需要几秒钟才会出现。

其他资源