【问题标题】:How to view a Jaeger trace in Chrome Flame Graph如何在 Chrome Flame Graph 中查看 Jaeger 跟踪
【发布时间】:2022-08-05 14:58:26
【问题描述】:

我们的应用程序中有 Jaeger 仪器。我们通常对 Jaeger UI 感到满意,但是如果跟踪非常大,Web 视图就会变得非常不可用。在 Node.js 中,我们还使用了 Chrome 火焰图,效果非常好且触感非常好。

Jaeger 可以导出如下所示的 JSON 文件:

{\"data\":[{\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spans\":[{\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c05008820aeb3a\",\"flags\":1,\"operationName\":\"TaskProcessor\",\"references\":[],\"startTime\":1639398261835322,\"duration\":216903298,\"tags\":[{\"key\":\"host\",\"type\":\"string\",\"value\":\"\"},{\"key\":\"requestUri\",\"type\":\"bool\",\"value\":false},{\"key\":\"queryString\",\"type\":\"string\",\"value\":\"\"},{\"key\":\"internal.span.format\",\"type\":\"string\",\"value\":\"proto\"}],\"logs\":[],\"processID\":\"p1\",\"warnings\":null},{\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b52131\",\"flags\":1,\"operationName\":\"__construct\",\"references\":[{\"refType\":\"CHILD_OF\",\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c05008820aeb3a\"}],\"startTime\":1639398261946284,\"duration\":51,\"tags\":[{\"key\":\"magentoType\",\"type\":\"string\",\"value\":\"model\"},{\"key\":\"className\",\"type\":\"string\",\"value\":\"Peak_Touristcard_Model_TaskProcessor\"},{\"key\":\"internal.span.format\",\"type\":\"string\",\"value\":\"proto\"}],\"logs\":[],\"processID\":\"p2\",\"warnings\":null},{\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b4c024\",\"flags\":1,\"operationName\":\"_initOldFieldsMap\",\"references\":[{\"refType\":\"CHILD_OF\",\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b52131\"}],\"startTime\":1639398261946305,\"duration\":6,\"tags\":[{\"key\":\"magentoType\",\"type\":\"string\",\"value\":\"model\"},{\"key\":\"className\",\"type\":\"string\",\"value\":\"Peak_Touristcard_Model_TaskProcessor\"},{\"key\":\"internal.span.format\",\"type\":\"string\",\"value\":\"proto\"}],\"logs\":[],\"processID\":\"p2\",\"warnings\":null},{\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b4982a\",\"flags\":1,\"operationName\":\"_addFullNames\",\"references\":[{\"refType\":\"CHILD_OF\",\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b52131\"}],\"startTime\":1639398261946321,\"duration\":5,\"tags\":[{\"key\":\"magentoType\",\"type\":\"string\",\"value\":\"model\"},{\"key\":\"className\",\"type\":\"string\",\"value\":\"Peak_Touristcard_Model_TaskProcessor\"},{\"key\":\"internal.span.format\",\"type\":\"string\",\"value\":\"proto\"}],\"logs\":[],\"processID\":\"p2\",\"warnings\":null},{\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b500f1\",\"flags\":1,\"operationName\":\"_construct\",\"references\":[{\"refType\":\"CHILD_OF\",\"traceID\":\"16c0500882122d8a16c05008820aeb3a\",\"spanID\":\"16c0500888b52131\"}],\"startTime\":1639398261946332,\"duration\":2,\"tags\":[{\"key\":\"magentoType\",\"type\":\"string\",\"value\":\"model\"},{\"key\":\"className\",\"type\":\"string\",\"value\":\"Peak_Touristcard_Model_TaskProcessor\"},{\"key\":\"internal.span.format\",\"type\":\"string\",\"value\":\"proto\"}],\"logs\":[],\"processID\":\"p2\",\"warnings\":null},
...

Chrome Flame Graphs 可以像这样打开 JSON 格式:

[{\"args\":{\"name\":\"swapper\"},\"cat\":\"__metadata\",\"name\":\"thread_name\",\"ph\":\"M\",\"pid\":514,\"tid\":0,\"ts\":0},
{\"args\":{\"name\":\"CrBrowserMain\"},\"cat\":\"__metadata\",\"name\":\"thread_name\",\"ph\":\"M\",\"pid\":514,\"tid\":259,\"ts\":0},
{\"args\":{\"name\":\"Compositor\"},\"cat\":\"__metadata\",\"name\":\"thread_name\",\"ph\":\"M\",\"pid\":46733,\"tid\":42243,\"ts\":0},
{\"args\":{\"name\":\"ThreadPoolServiceThread\"},\"cat\":\"__metadata\",\"name\":\"thread_name\",\"ph\":\"M\",\"pid\":514,\"tid\":25607,\"ts\":0},
{\"args\":{\"name\":\"ThreadPoolServiceThread\"},\"cat\":\"__metadata\",\"name\":\"thread_name\",\"ph\":\"M\",\"pid\":46733,\"tid\":20739,\"ts\":0},
...

有没有人有在 Jaeger UI 以外的任何地方查看 Jaeger 跟踪的经验,甚至可能在 Google Flame Graph 中?

    标签: google-chrome-devtools jaeger


    【解决方案1】:

    要转换简单用例的跟踪,请考虑以下示例,该示例从标准输入获取 Jaeger JSON 跟踪:

    #!/usr/bin/env node
    
    const trace = JSON.parse(require("fs").readFileSync(0).toString());
    
    console.log(JSON.stringify(
      {
        traceEvents: [
          {"pid":1,"tid":1,"ts":0,"ph":"M","cat":"__metadata","name":"process_name","args":{"name":"Service calls"}},
          ...trace.data.flat().map( d=> (
            Object.keys(d.processes).map(key=>
              ({"pid": 1,"tid": Number(key.slice(1)),"ts": 0,"ph": "M","cat": "__metadata","name": "thread_name",
                "args": {"name": d.processes[key].serviceName}}))
          )).flat(),
          ...trace.data[0].spans.map( s=> (
            {
              "name": s.operationName, "ph": "X", "pid": 1, "tid": Number(s.processID.slice(1)), "ts": s.startTime, "dur": s.duration,
              "args":
                Object.fromEntries(
                  [...(s.tags||[]).map(t=>(
                      [t.key, t.value]
                    )),
                    [' ? logs',s.logs]]
                )
            }
          ))
        ]
      }
    ));
    

    这将生成一个与 Google 的 Trace Event Format 匹配的 JSON 文件,并且可以在 chrome://tracing(或 https://ui.perfetto.dev)中打开任何其他 Catapult traceviewer for web,如 Lighthouse/tracehouse、Speedscope 等。

    除了可视化痕迹的问题,考虑这两种工具之间的区别。

    Jaeger 植根于服务器监控环境,而 Google 的 Chrome 跟踪器(和 Perfetto)更侧重于工作站/设备的较低级别的 CPU/线程。在为 Jaeger 查看更大的跟踪器时要考虑到这一点,因为它可能不是最好的用例。

    您会发现这两种工具在语言/功能上可能不同,但也有共同点,例如,围绕并发和瓶颈。

    出于这个原因,在撰写本文时,这两者可能没有太大关系。 Jaeger 也是事务跟踪的后端,并且随着 Open Telemetry 最终从 Cloud Native Computing Foundation 毕业,您最好的选择是沿着这条路线寻找选项。例如,Grafana 与 Jaeger 数据源集成。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多