菜单
开源

自动日志记录:通过日志发现追踪

运行已插装的分布式系统是深入了解系统的强大方式,但它也带来了自身的挑战。其中之一就是发现存在哪些追踪。

使用 span 日志连接器,您可以使用 Alloy 执行自动日志记录。

在 Tempo 初期,只有知道要查找的追踪 ID,才能查询到追踪。一个解决方案是自动日志记录。自动日志记录提供了一种简单快速的方式,通过日志消息发现追踪 ID。格式良好的日志行会写入到日志导出器,用于经过追踪管道的每个 span、root 或进程。这使得自动构建追踪发现机制成为可能。除此之外,您还可以使用日志源从追踪中获取指标,并允许快速从日志消息跳转到 Grafana 中的追踪视图。

虽然这种方法很有用,但不如 TraceQL 强大。如果您来到此处是因为您知道想要记录追踪 ID,以便能够从日志跳转到追踪,那么请继续阅读。

如果您想直接查询系统,请阅读 TraceQL 文档

配置

对于高吞吐量系统,记录每个 span 的日志可能会产生过多数据量。在这种情况下,建议按 root span 或进程记录日志。

Automatic logging overview

自动日志记录会在 span 中搜索给定的 span 或资源属性集,并将它们记录为键值对。这允许在 Loki 中通过这些键值对进行搜索。

开始之前

要配置自动日志记录,您需要使用适当的选项配置 otelcol.connector.spanlogs 连接器。

要查看所有可用的配置选项,请参阅 otelcol.connector.spanlogs 组件参考

这个简单示例在将追踪根导出到 Grafana OTLP 网关之前记录它们,是开始使用自动日志记录的好方法

alloy
otelcol.receiver.otlp "default" {
  grpc {}
  http {}

  output {
    traces = [otelcol.connector.spanlogs.default.input]
  }
}

otelcol.connector.spanlogs "default" {
  roots = true

  output {
    logs = [otelcol.exporter.otlp.default.input]
  }
}

otelcol.exporter.otlp "default" {
  client {
    endpoint = env("OTLP_ENDPOINT")
  }
}

此示例记录所有追踪根,将 http.methodhttp.target 属性添加到日志行,然后将日志推送到本地 Loki 实例

alloy
otelcol.receiver.otlp "default" {
  grpc {}
  http {}

  output {
    traces = [otelcol.connector.spanlogs.default.input]
  }
}

otelcol.connector.spanlogs "default" {
  roots           = true
  span_attributes = ["http.method", "http.target"]

  output {
    logs = [otelcol.exporter.loki.default.input]
  }
}

otelcol.exporter.loki "default" {
  forward_to = [loki.write.local.receiver]
}

loki.write "local" {
  endpoint {
    url = "loki:3100"
  }
}

示例

Automatic logging overview

Automatic logging overview