使用 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 中。因此,重新執行搜尋或設定不同的篩選選項將無法找到第一次搜尋後建立的追蹤資料。若要使用最新的時間戳記開始搜尋,請按一下選單工具列中的 搜尋

otel jaeger search traces

記錄中的追蹤 ID

一旦 Java 代理程式啟用,它會在 MDC (映射診斷內容) 中所有記錄行中建立追蹤 ID。

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

在 Grafana 的 Loki 中搜尋記錄時,會有一個連結到相關追蹤的連結,然後該連結會顯示在右側。

請注意,這只適用於記錄的追蹤資料,其記錄的 trace_flag01

otel from log to trace
圖 1. 從記錄到追蹤的連結