Grafana 系列 - 统一展示 - 11-Logs Traces 无缝跳转

本文最后更新于:2024年7月25日 下午

系列文章

概述

前文 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 用于更友好地跳转

以此抛砖引玉,希望读者可以做出更精美、实用的监控统一展示和无缝跳转方案。


Grafana 系列 - 统一展示 - 11-Logs Traces 无缝跳转
https://ewhisper.cn/posts/14929/
作者
东风微鸣
发布于
2023年5月8日
许可协议