查看原文
其他

用Jupyter笔记本做Jaeger数据分析

Jaeger CNCF 2022-09-06

作者:Pavol Loffay



在之前的博客文章,“用Jaeger做数据分析|跟踪告诉我们更多!”,我们已经介绍了我们的数据科学计划和平台。最终目标是在Jaeger项目中开发基于AI/ML的新功能,这将为我们的应用提供新的见解。这种类型的功能也称为AI操作(AI operations,AIOps)。


Jupyter笔记本

Jupyter笔记本为数据实验提供了一个简单的用户界面。我们想使用笔记本完成两个主要的用例:

  • 数据科学家对跟踪数据进行实验的接口

  • 随需应变的事件调查


第一个用例是自解释的。它降低了非基础设施人员连接Jaeger服务器以使用和分析数据的门槛。第二个用例比较复杂。想象一个事件,需要我们分析一条或一组数百或数千跨度的跟踪。这样的分析在用户界面中可能不可行。相反,我们可以编写代码来验证我们的假设。为此,我们开发了基于图形查询语言Gremlin的Trace DSL,以简化跟踪数据的过滤和特征提取。因此,Jaeger用户将能够根据需要使用Trace DSL启动一个Jupyter笔记本,并编写查询和分析。


Jupyter笔记本与Jaeger的例子

在本节中,我们将部署Jaeger Trace DSL和Jupyter笔记本,并对Jaeger服务器编写一个简单的查询。


让我们部署Jaeger、HotROD示例和支持Trace DSL的Jupyter笔记本:


docker run --rm -it -p 16686:16686 --name=jaeger jaegertracing/all-in-one:1.17docker run --rm -it -p 8080:8080 --link=jaeger -e JAEGER_ENDPOINT=http://jaeger:14268/api/traces jaegertracing/example-hotrod:1.17docker run --rm -it -p 8888:8888 -p 4041:4040 -p 9001:9001 --link=jaeger -e JUPYTER_ENABLE_LAB=yes quay.io/jaegertracing/jaeger-analytics-java:latest

如果你想打开当前目录中的笔记本,请将-v ${PWD}:/home/jovyan/work添加到Jupyter笔记本中。这些笔记本在jaegertracing/jaeger-analytics-java仓库中。


现在,在http://localhost:16686打开Jaeger UI,在http://localhost:8080打开HotROD示例,在http://localhost:8888/lab打开Jupyter笔记本。Jupyter实验室的标记写在Jupyter控制台日志中。


为了进行分析,我们必须生成一些数据,因此在HotROD UI中单击蓝色方框来订购汽车来生成良好的跟踪。为了验证跟踪是否到达Jaeger,打开Jaeger UI并从前端服务中搜索跟踪。跟踪应该是这样的:


HotROD示例应用程序的跟踪。


当我们知道数据存储在Jaeger中,我们就可以转移到Jupyter笔记本上,并在那里加载跟踪。Jaeger的笔记本保存在Jupyter目录中。这个目录可以从项目根目录打开,也可以从工作目录打开,要是主机文件系统的笔记本被注入docker容器。


在运行分析之前,我们必须将依赖项加载到笔记本的类路径中。只需单击dependencies单元格使其激活,然后单击顶部导航菜单中的play图标。


用于从jaeger-query加载数据的Jupyter笔记本。


在运行代码之前,我们必须更新变量traceIdStr以指向HotROD应用程序前面生成的一个跟踪。


用于从jaeger-query加载数据的Jupyter笔记本。


结果写在代码单元格下面。在这种情况下,跟踪的高度为3,前端和服务器服务之间的计算网络延迟为0.00102 ms。延迟很小,因为所有服务都作为同一进程的一部分运行,并且没有实际的网络开销。


最后一个代码单元显示了Trace DSL与Apache Gremlin的直接使用。Gremlin是一种图形遍历语言,它扩展tracetraverse alsource.class并添加了用于跟踪过滤和特征提取的方法。例如,它添加了一个像hasName(String name)的方法来根据操作名筛选span。在我们的示例中,查询验证具有给定操作名称的两个span是否直接或间接连接,或者换句话说,其中一个是另一个的后代。


用于从jaeger-query加载数据的Jupyter笔记本。


总结

我们看到使用gRPC生成的stub部署Jupyter笔记本并编写对Jaeger服务器的简单查询是多么容易。该特性提供了一个功能强大的接口,可以根据从Jaeger服务器检索到的跟踪编写自定义查询和假设分析。该示例可以很容易地扩展,以收集来自Kafka的跟踪流并在实时数据上进行实验。


欢迎任何反馈!在我们的Jaeger Gitter频道上与我们联系,或者简单地打开一个问题,并分享你的反馈或想法。

https://gitter.im/jaegertracing/Lobby

https://github.com/jaegertracing/jaeger-analytics-java


参考文献

  • Jaeger Java analytics:

    https://github.com/jaegertracing/jaeger-analytics-java

  • Data analytics with Jaeger blog post:

    https://medium.com/jaegertracing/data-analytics-with-jaeger-aka-traces-tell-us-more-973669e6f848

  • Apache Gremlin documentation:

    http://tinkerpop.apache.org/docs/current/reference/

  • Jaeger HotROD example application demo:

    https://medium.com/opentracing/take-opentracing-for-a-hotrod-ride-f6e3141f7941


感谢Gary Brown。


点击【阅读原文】阅读英文原文。


扫描二维码联系我们!




CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。 

CNCF云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存