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

EKS集群中Loki无法填充Tempo内部追踪链接问题求助

问题排查与解决方案

一、修正Loki数据源的Derived Fields匹配规则

你当前Loki数据源配置的matcherRegex: "traceID=(\\w+)",需要和日志里实际的TraceID字段格式完全匹配:

  • 如果你的应用日志里用的是trace_id而非traceID,直接把正则改成trace_id=(\\w+)
  • 确认Tempo数据源的uid确实是tempo,和Derived Fields里的datasourceUid: tempo保持一致

调整后的Loki数据源片段:

- name: Loki
  type: loki
  access: proxy
  orgId: 1
  uid: loki
  url: http://loki:3100
  isDefault: false
  editable: true
  jsonData:
    derivedFields:
      - datasourceName: Tempo
        matcherRegex: "trace_id=(\\w+)" # 匹配日志里实际的字段名
        name: TraceID
        url: "$${__value.raw}"
        datasourceUid: tempo

二、修复Fluent Bit的TraceID传递配置

你的Fluent Bit配置里label_keys: $trace_id存在错误:

  • label_keys不需要加$前缀,直接写字段名即可
  • 确保应用日志里确实包含trace_id字段,且Fluent Bit能正确解析

修改后的Fluent Bit OUTPUT配置:

[OUTPUT]
    Name              loki
    Match             kube.*
    Host              "loki-svc.monitoring-loki"
    tenant_id         ""
    Port              "3100"
    label_keys        trace_id
    auto_kubernetes_labels on

如果应用日志是JSON格式,还需要在Fluent Bit的INPUT段添加Parser: json,确保能解析出trace_id字段:

[INPUT]
    Name              tail
    Path              /var/log/*.log
    Parser            json # 替换原有的docker parser
    Tag               kube.*
    Refresh_Interval  5
    Mem_Buf_Limit     5MB
    Skip_Long_Lines   On

三、调整Tempo数据源的访问模式

你当前Tempo数据源用的access: browser,但通过Ingress访问Grafana时,浏览器无法直接解析集群内部的tempo:3100地址,改成access: proxy让Grafana作为代理转发请求:

- name: Tempo
  type: tempo
  access: proxy # 替换为proxy模式
  orgId: 1
  uid: tempo
  url: http://tempo:3100
  isDefault: true
  editable: true

四、验证Tempo的Trace接收状态

检查Tempo是否确实收到了otel-collector发送的追踪数据:

kubectl logs -n <tempo命名空间> <tempo-pod名> | grep "received trace"

如果没有收到,排查otel-collector配置:

  • 确认Tempo的OTLP端口是否正确:新版本Tempo的OTLP gRPC端口默认是4317,HTTP是4318,你当前用的55680是旧版本端口,需对应调整
  • 升级otel-collector到较新版本(你当前用的0.29.0过于老旧,建议升级到v0.80+)

五、确认Promtail的日志收集配置(若启用)

你配置里开启了Promtail但禁用了Fluent Bit,需确保Promtail能提取TraceID:
在Promtail的scrape配置中添加relabel规则,把日志里的trace_id转为标签:

scrape_configs:
- job_name: kubernetes-pods
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_container_log_file]
    action: keep
    regex: /var/log/containers/.*\.log
  - action: labelmap
    regex: ^trace_id=(.*)$ # 提取日志中的trace_id字段作为标签

六、测试正则匹配有效性

在Grafana的Loki查询页面,找到一条带TraceID的日志,复制内容后测试正则是否能命中:
比如日志内容为2024-05-20 10:00:00 INFO trace_id=abc123456789 message=test,用trace_id=(\\w+)应能匹配到abc123456789,若匹配失败则调整正则表达式适配实际日志格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:12:50