You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Loki流式传输SaaS日志时的loghttp报错及JSON嵌套问题咨询

Loki Push接口嵌套JSON结构支持性说明

核心结论

Loki 不支持在streams结构的stream字段内嵌套任意非字符串类型的JSON对象。

报错核心原因

这类expects " or n, but found {的解析报错,本质是请求结构不符合Loki Push接口的schema要求:

  • stream字段的定位是索引标签集合,所有键值对的值必须为字符串类型。Loki的标签是用于日志筛选的索引维度,本身不支持嵌套结构、原生对象、数组等非字符串值。
  • 从你提供的报错上下文片段可以看到,你在stream字段中写入了"log": {嵌套JSON对象}的内容,解析器读取到这个位置时,本来期待拿到字符串或数值类型的标签值,却碰到了代表JSON对象起始的{符号,因此直接抛出类型不匹配错误,和报错定位的字节位置完全对应。

高频触发场景

  • 错误将日志正文内容塞入标签段:从你提供的curl示例可以看到,你将本应属于日志正文的超大JSON对象,放到了stream字段的标签值位置,没有和标签元数据做分离。
  • 未对日志内容做字符串序列化:嵌套的JSON日志作为日志正文传输时,必须先序列化为字符串格式,不能直接作为原生JSON值嵌套在请求结构中。
  • 标签值类型不符合规范:哪怕是自定义的业务标签,只要值为对象、数组类型,都会触发同类解析错误。

正确的请求结构参考

{
  "streams": [
    {
      "stream": {
        "env": "dev_logs",
        "service": "saas_platform"
      },
      "values": [
        [
          "1617704515000000000",
          "{\"id\":[4692850486,1470085],\"flow_id\":1470085}"
        ]
      ]
    }
  ]
}

补充说明:如果后续需要对日志内部的嵌套JSON字段做检索,可以在Loki查询语句中使用内置的JSON解析器提取字段,不需要也不允许将这类字段提前定义为stream段的标签。

内容的提问来源于stack exchange,提问作者Shalini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 15:06:05