使用 OpenTelemetry 进行追踪和附加指标

在开发和性能运行时,使用 OpenTelemetry 收集追踪和附加指标。

关于 OpenTelemetry

OpenTelemetry 提供高质量、无处不在且可移植的遥测技术,以实现有效的可观察性。

本项目使用它来收集来自 Keycloak 的追踪信息

  • 追踪信息允许深入了解 Keycloak,并将请求分解为内部和数据库调用的树状结构。

这使用了 Keycloak 26 及更高版本中内置的 OpenTelemetry 功能。

访问 OpenTelemetry 网站 了解有关该工具的更多信息,以及以下关于如何访问和使用这些信息的部分。

设置 OpenTelemetry

OpenTelemetry 默认禁用。需要通过自定义设置 KC_OTEL 来启用它。

根据设置 KC_OTEL_SAMPLING_PERCENTAGE,出于性能原因,可能只记录一部分追踪信息。

与其他设置相反,这里没有使用 OpenTelemetry 收集器,而是直接将追踪信息发送到 Jaeger。

otel runtime view.dio

访问 OpenTelemetry 追踪信息

Grafana 和 Jaeger 可用于访问追踪信息,两者都默认部署。

假设命令 minikube ip 返回 192.168.39.39,Grafana 可在 http://grafana.192.168.39.39.nip.io 上访问,Jaeger 可在 http://jaeger.192.168.39.39.nip.io 上访问

使用浏览器通过 Jaeger 数据源在 Grafana 中搜索追踪信息,或者直接使用 Jaeger UI。

在 Grafana 中搜索追踪信息时,至少选择服务 keycloak 以查看追踪信息。可以使用操作和追踪信息的标签进一步限制结果。

otel grafana search traces

Jaeger UI 类似。与 Grafana UI 中一样,在搜索之前选择 Keycloak 服务。

要了解有关该工具的更多信息,请访问 Jaeger 首页

在 Jaeger UI 中运行搜索后,搜索时间戳是固定的,并编码在 URL 中。因此,重新运行搜索或设置不同的筛选选项将不会找到在第一次搜索后创建的追踪信息。要使用最新的时间戳开始搜索,请单击菜单工具栏中的 Search

otel jaeger search traces

日志中的追踪 ID

一旦 Java 代理激活,它将在 MDC(映射诊断上下文)中的所有日志行中创建追踪 ID

... "mdc":{"sampled":"true", "trace_id":"72b9fd1ac7229d417655a9c5e240e23b", "span_id":"6612116ac4f97aaa"} …​

在 Grafana 的 Loki 中搜索日志时,会有一个指向关联追踪信息的链接,然后将在右侧显示。

请注意,这仅适用于记录的追踪信息,这些追踪信息具有使用 01 记录的 trace_flag

otel from log to trace
图 1. 从日志到追踪信息的链接