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

FluentBit配置疑问:如何将OpenTelemetry输入的属性转发至Loki输出目标

FluentBit配置疑问:如何将OpenTelemetry输入的属性转发至Loki输出目标

我完全懂你现在的困扰——明明通过OpenTelemetry输入拿到的日志是带结构化属性的(比如你示例里的EnvName),用stdout输出能完整看到这些内容,但转发到Loki后就只剩最后那串纯message了,这确实让人纳闷。

其实问题出在FluentBit的Loki输出默认行为上:它默认只会把message字段作为日志内容发送,那些附加的属性需要我们手动配置才能传递过去。下面给你两种可行的解决方案:

方案一:把属性作为Loki的标签传递

如果你希望这些属性成为Loki日志的标签(方便后续过滤查询),可以修改Loki输出的配置,指定要提取的字段作为标签:

pipeline:
    inputs:
        - name: opentelemetry
          listen: 0.0.0.0

    outputs:
        - name: loki
          match: '*'
          host: host.docker.internal
          port: 3100
          labels: job=my
          label_keys: EnvName  # 这里指定要从日志记录中提取的属性字段

这里的label_keys参数会告诉FluentBit从日志记录里取出EnvName字段,把它作为额外的标签附加到Loki日志上。如果还有其他属性需要传递,用逗号分隔就行,比如label_keys: EnvName,OtherAttribute。

方案二:把完整结构化内容作为日志行发送

如果你希望Loki收到的是包含所有属性的完整结构化日志(比如JSON格式),可以先通过filter把日志转换成JSON格式,再让Loki输出:

pipeline:
    inputs:
        - name: opentelemetry
          listen: 0.0.0.0

    filters:
        - name: json
          match: '*'
          format: json
          output_key: log  # 把结构化记录转换成JSON,放到log字段里

    outputs:
        - name: loki
          match: '*'
          host: host.docker.internal
          port: 3100
          labels: job=my
          line_format: json  # 指定日志行以JSON格式发送

这样配置后,Loki收到的每一条日志都会是包含所有属性的JSON字符串,你在Loki里就能解析出EnvName这类属性了。

小提醒

要注意字段的实际路径:如果你的OpenTelemetry属性是嵌套在attributes子字段里的(有些场景下会这样),那配置里要写成$attributes.EnvName这种形式,先确认好FluentBit里日志记录的字段结构再调整哦。

备注:内容来源于stack exchange,提问作者kelko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:50:29