json - 无法将指标发送到 Splunk HEC
问题描述
我在我的 Splunk v. 8.1.1 服务器上设置了一个 HEC 输入,我正在尝试向它发送指标,即:
curl -k https://$SPLUNK_HOST:$HEC_PORT/services/collector/raw -H "Authorization: Splunk $HEC_TOKEN" \
-d "
{'time': 1610123044, 'fields': {'metric_name': 'kernel.all.load', '_value': 2.8499999046325684, 'instance_id': 1, 'instance_name': '1 minute'}}
{'time': 1610123044, 'fields': {'metric_name': 'kernel.all.load', '_value': 3.8299999237060547, 'instance_id': 5, 'instance_name': '5 minute'}}
{'time': 1610123044, 'fields': {'metric_name': 'kernel.all.load', '_value': 3.6700000762939453, 'instance_id': 15, 'instance_name': '15 minute'}}"
(注意:为清楚起见,在引号中添加了换行符)
每次我都会从服务器得到肯定的响应:
{'text': 'Success', 'code': 0}
但是没有数据保存在索引中。我为 HEC 输入设置了默认索引。如果我删除或禁用此索引,我会在 Splunk 的主页上收到消息,即:
Received event for unconfigured/disabled/deleted index=pcp_hec with source="source::http:PCP via HEC" host="host::localhost:32926" sourcetype="sourcetype::httpevent". So far received events from 1 missing index(es).
当我恢复索引时,消息消失了,但索引下仍然没有保存数据。我无法弄清楚我的情况出了什么问题,因为官方文档对此主题非常简短。我在这个论坛上找到了两个线程(1、2)和其他一些类似的线程,但答案只包含文档中的相同示例。我试图包含示例中的元数据,但这并没有解决问题。它没有说明perflog
源类型实际上是什么。我也尝试log2metrics_json
了 sourcetype,但它也没有帮助。
解决方案
看起来您正在使用raw
端点但发送一个 json 对象。将您的端点更改为just /services/collector
,然后重试。
在示例页面的原始示例部分中,它显示raw
端点的数据只是一个简单的字符串。
否则,即使您的事件已被 API 接受,也并不意味着它已被编入索引(它会立即返回 Success,因此您的客户端不会挂起等待索引器)。接受事件后,可能有多种原因可能无法对其编制索引,包括中断或其他一些系统故障。这就是索引器确认的用武之地。
可以为每个令牌启用索引器确认。如果启用,连同“成功”状态,ackId
将发送一个 int。一旦您拥有ackId
(或来自同一客户端的多个请求的 id),您可以使用端点检查它们的状态/services/collector/ack
:
curl -k https://<host>:<port>/services/collector/ack?channel=FE0ECFAD-13D5-401B-847D-77833BD77131 -H "Authorization: Splunk {token}" -d "{"acks":[0,1,2,3]}"
这将返回如下内容:
{"acks": {"0": true, "1": false, "2": true, "3": false}}
其中 true 表示它已被索引,而 false 表示它还没有(尚未)。对于每个没有的,文档建议您继续轮询,直到它们被编入索引或者您在再次发送事件之前达到超时(您配置的)。
在请求channel
中,除了在您的令牌上启用索引器确认之外,还需要一个查询参数。这是用于跟踪客户事件和状态的任何唯一字符串。除了查询参数,您还可以在X-Splunk-Request-Channel
标头中传递值。
请务必阅读文档底部的客户端行为部分。它有一些我在这里没有提到的有用的最佳实践。
推荐阅读
- sql - 输出过去一年每个月的第一天的 where 子句
- database - “[FATAL] [DBT-10503]” 指定的模板文件无效
- java - 如何使用java在QBP ^ Q11中为QPD段设置样本ID
- java - 返回多个值的最佳实践?
- javascript - 延迟液体页面渲染,直到 Ajax 返回数据之后
- bash - 在查找命令行上插入排除项
- swift - 更新孩子的价值
- asp.net - 如何将 ASP.NET 应用程序部署到 Azure 容器?- 不支持映像的操作系统版本
- node.js - 节点 child_process.exec 将特殊字符显示为问号
- php - 在写入文件 PHP 之前从 unicode 转换为 UTF-8