调用Loki push接口报错:已配置标签仍提示每个流至少需要一对标签
问题原因
- 你使用的是Loki 2.3及以上版本,该版本的
/loki/api/v1/push接口要求streams下的labels字段必须为符合Prometheus标签规则的字符串格式,而非你当前使用的JSON对象格式,这是触发报错的核心原因。 - 部分shell环境下,curl命令内直接拼接的JSON字符串存在引号转义异常问题,也会导致Loki接收到的
labels字段为空,无法识别到你配置的job标签。
解决方案
方案一:直接修改curl命令的labels格式
将labels字段的值从JSON对象改为标签字符串格式,转义内部双引号即可,调整后的命令如下:
curl -i -H "Content-type: application/json" -X POST --data '{ "streams": [ { "labels": "{job=\"randomjob\"}", "entries": [{ "ts": "2021-10-12T16:13:06.801064Z", "line": "TEST!" }] } ] }' http://localhost:3100/loki/api/v1/push
方案二:通过文件传参避免转义问题
如果修改格式后仍存在转义异常,可以把请求体存入单独的JSON文件,再通过curl加载文件发送请求。
- 新建
payload.json文件,写入以下内容:
{ "streams": [ { "labels": "{job=\"randomjob\"}", "entries": [ { "ts": "2021-10-12T16:13:06.801064Z", "line": "TEST!" } ] } ] }
- 执行curl命令加载文件发送请求:
curl -i -H "Content-type: application/json" -X POST --data @payload.json http://localhost:3100/loki/api/v1/push
请求执行成功会返回204 No Content响应,此时你可以在Grafana的Loki数据源中通过{job="randomjob"}查询到对应的测试日志。
内容的提问来源于stack exchange,提问作者yen
相关产品推荐
相关产品推荐

