Grafana系列-統一展示-11-Logs Traces無縫跳轉

東風微鳴發表於2023-05-16

系列文章

概述

前文 Grafana 系列 - 統一展示 -1- 開篇所述, Grafana 可以瞭解所有相關的資料--以及它們之間的關係--對於儘快根治事件和確定意外系統行為的真正來源非常重要。Grafana 允許團隊在一個地方對所有的資料進行無縫的視覺化和跳轉。

最典型的就是 Grafana Labs 的 LGTM 技術棧,包括:

  • Loki(Logging)
  • Grafana(視覺化)
  • Tempo(Tracing)
  • Mimir(Metrics)

LGTM

透過如下的技術細節,可以實現 Logging、Tracing、Metrics 的無縫視覺化和跳轉:

  • Metrics -> Logs: 基於服務發現和統一 labels
  • Logs -> Metrics: 基於 LogQL 提取 Metric 指標
  • Logs -> Traces: 基於衍生欄位 (fields) 或自動化的日誌
  • Traces -> Logs: 基於 labels
  • Traces -> Metrics: 基於來自 spans 的 Metric 指標
  • Metrics -> Traces: 基於 Prometheus 的 Exemplars.

具體如下圖:

LTM Seamless Moving

即使沒有采用 Grafana Labs 的解決方案,也仍然能實現一定程度的無縫跳轉。

如:

  • Logging 使用 EFK
  • Tracing 使用 Jaeger

如果日誌中也包括 trace_id, Name 至少可以透過 trace_id, 實現 Logs -> Traces 的無縫跳轉。

?Notes:

前提是: 日誌中包括 trace_id 相關欄位.
當然, 日誌中就包含 trace_id 欄位, 屬於開發對日誌格式規劃地比較好了. 這使得運維側配置跳轉邏輯簡單了很多.
更多情況下, 是要結合 cluster namespace app pod 等欄位/label 進行查詢. (而非直接透過 trace_id 直接定位.)

實戰 Logs(ElasticSearch) To Traces(Jaeger)

?Notes:

實戰場景: 針對報錯日誌, 定位到出錯的 Trace.

首先, 更新 ES 資料來源配置, 增加 Data links 相關配置:

  • Field: trace_id (根據實際情況配置, 也可能是 traceId 等)
  • Internal link: ✔️, 並選擇一個 Trace(Jaeger) 資料來源
  • Query: ${__value.raw}

之後, 可以透過ES 日誌快速搜尋儀表板, 篩選出ERROR 日誌, 點選展開 details, 會發現 trace_id 會帶一個跳轉連結, 如下圖:

Error Log -> trace_id link

點選後, 會直接跳轉到 Explore -> Jaeger 頁面, 並帶有出錯的 trace_id, 同時顯示鏈路拓撲和 trace 瀑布圖, 如下圖:

Trace Node Graph

Error Log Trace View

???

總結

至此, 我們完成了一個非常簡單的, 從 Logs(ElasticSearch) 到 Trace(Jaeger) 的單向跳轉. 但已經會為我們分析問題提供較大的便利了.

如果需要實現 Metrics, Logs, Traces 三者的雙向跳轉, 那麼在這三者的解決方案需要是特定的方案, 另外這三者的資料來源、Dashboard 和 Query 中都需要有更多精細的配置。包括不限於:

  • 上文提到的三者之間的聯動配置
  • 各個資料來源上配置 Data link、Derived fields、Exemplars、Trace to logs、Trace to Metrics 等
  • 在 Dashboard 上新增 Text 等 Panel,並結合 Variable 用於更友好地跳轉
  • 在 Panel 配置 panel link 用於更友好地跳轉
  • ...

以此拋磚引玉,希望讀者可以做出更精美、實用的監控統一展示和無縫跳轉方案。

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章