splunk-hec-logging
splunk-hec-logging 插件将请求和响应上下文信息序列化为 Splunk 事件数据格式 并分批推送到 Splunk HTTP 事件收集器 (HEC)。该插件还支持自定义日志格式。
示例
以下示例展示了如何在不同场景下配置 splunk-hec-logging 插件。
要跟随示例操作,请完成以下步骤以设置 Splunk:
- 安装 Splunk。Splunk Web 默认在
localhost:8000运行。 - 参考 在 Splunk Web 中设置和使用 HTTP 事件收集器 设置 HTTP 事件收集器。
- 导航到控制台右上角的 Settings > Data Inputs。你应该能看到至少一个 HTTP 事件收集器的输入项。记下令牌值。
- 导航到控制台右上角的 Settings > Data Inputs 并选择 HTTP Event Collector。在 Global Settings 中,启用所有令牌。
- 在 Global Settings 中,你应该还能看到收集器的默认端口为
8088。
要验证设置,请使用你的令牌执行以下命令:
curl "http://localhost:8088/services/collector/event" \
-H "Authorization: Splunk <replace-with-your-token>" \
-d '{"event": "hello world"}'
你应该看到 success 响应。
推送日志到 Splunk
以下示例展示了如何在路由上启用 splunk-hec-logging 插件,该插件记录客户端请求并将日志推送到 Splunk。
创建一个路由如下:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "splunk-route",
"uri": "/anything",
"plugins": {
"splunk-hec-logging":{
"endpoint":{
// Annotate 1
"uri":"http://192.168.2.108:8088/services/collector/event",
// Annotate 2
"token":"26b15ddd-31db-455b-ak0c-9b5be3decc4a"
}
}
},
"upstream": {
"nodes": {
"httpbin.org:80": 1
},
"type": "roundrobin"
}
}'
❶ 配置 Splunk HTTP 收集器的端点。请替换为你的 IP 地址。
❷ 替换为你的收集器令牌。
发送一些请求到该路由:
curl -i "http://127.0.0.1:9080/anything"
你应该收到 HTTP/1.1 200 OK 响应。
导航到 Splunk Web 并在左侧菜单中选择 Search & Reporting。在搜索框中输入 source="apache-apisix-splunk-hec-logging" 并搜索来自 APISIX 的事件。你应该看到与你的请求对应的事件,如下所示:
{
"response_size": 617,
"response_headers": {
"server": "APISIX/3.10.0",
"connection": "close",
"content-type": "application/json",
"access-control-allow-credentials": "true",
"access-control-allow-origin": "*",
"date": "Wed, 27 Nov 2024 19:49:27 GMT",
"content-length": "389"
},
"request_headers": {
"host": "127.0.0.1:9080",
"user-agent": "curl/8.6.0",
"accept": "*/*"
},
"request_query": {},
"request_url": "http://127.0.0.1:9080/anything",
"upstream": "18.208.8.205:80",
"latency": 746.00005149841,
"request_method": "GET",
"request_size": 85,
"response_status": 200
}
使用插件元数据记录请求和响应头
以下示例展示了如何使用 插件元数据 和 内置变量 自定义日志格式,以记录请求和响应中的特定头部信息。
在 APISIX 中,插件元数据 用于配置同一插件的所有插件实例的通用元数据字段。当一个插件在多个资源中启用并需要统一更新其元数据字段时,这非常有用。
创建一个路由如下:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "splunk-route",
"uri": "/anything",
"plugins": {
"splunk-hec-logging":{
"endpoint":{
// Annotate 1
"uri":"http://192.168.2.108:8088/services/collector/event",
// Annotate 2
"token":"26b15ddd-31db-455b-ak0c-9b5be3decc4a"
}
}
},
"upstream": {
"nodes": {
"httpbin.org:80": 1
},
"type": "roundrobin"
}
}'
❶ 配置 Splunk HTTP 收集器的端点。请替换为你的 IP 地址。
❷ 替换为你的收集器令牌。
配置 splunk-hec-logging 的插件元数据:
curl "http://127.0.0.1:9180/apisix/admin/plugin_metadata/splunk-hec-logging" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"log_format": {
"host": "$host",
"@timestamp": "$time_iso8601",
"client_ip": "$remote_addr",
// Annotate 1
"env": "$http_env",
// Annotate 2
"resp_content_type": "$sent_http_Content_Type"
}
}'
❶ 记录自定义请求头 env。
❷ 记录响应头 Content-Type。
发送带有 env 头的请求到该路由:
curl -i "http://127.0.0.1:9080/anything" -H "env: dev"
导航到 Splunk Web 并在左侧菜单中选择 Search & Reporting。在搜索框中输入 source="apache-apisix-splunk-hec-logging" 并搜索事件。你应该看到最新的事件对应你的请求,类似于以下内容:
{
"host":"127.0.0.1",
"env":"dev",
"client_ip":"192.168.65.1",
"@timestamp":"2024-11-27T20:59:28+00:00",
"route_id":"splunk-route",
"resp_content_type":"application/json"
}