【翻译】用Tempo和Jaeger在Grafana中进行分布式追踪

原文为InfraCloud软件工程师Ruturaj Kadikar在InfraCloud的博客上发表的客座文章。

如果我有一个好的日志和监控框架,为什么我还需要追踪?

如果某些东西没有按照预期工作(失败、错误、不正确的配置等),应用日志有利于显示重要事件。尽管它是应用程序设计中非常关键的元素,但人们应该节俭地记录。这是因为日志的收集、转换和存储是很昂贵的。

与日志不同的是,日志是由事件触发的,而且是离散的,而追踪提供了一个更广泛和连续的应用视图。追踪帮助我们了解一个进程/交易/实体在穿越应用堆栈时的路径,并确定各个阶段的瓶颈。这有助于优化应用程序和提高性能。

在这篇文章中,我们将看到如何在日志中引入追踪,并通过Grafana Tempo和Jaeger轻松实现可视化。在这个例子中,我们将使用Prometheus、Grafana Loki、Jaeger和Grafana Tempo作为数据源,分别在Grafana中监控指标、日志和跟踪。

什么是分布式跟踪?

在微服务架构中,理解一个应用程序的行为可能是一项耐人寻味的任务。这是因为传入的请求可能跨越多个服务,而每个间歇性服务可能对该请求有一个或多个操作。导致复杂性增加,在排除问题时需要更多时间。

分布式跟踪有助于深入了解各个操作,并准确地指出由性能差引起的故障区域。

什么是OpenTracing?

OpenTracing由API规范、框架和库组成,可以在任何应用程序中实现分布式跟踪。OpenTracing的API非常通用,可以防止厂商/产品锁定。最近,OpenTracing和OpenCensus合并成了OpenTelemetry(缩写为OTel)。它的目标是通过一组API、SDK、工具和集成来创建和管理遥测数据,如跟踪、度量和日志。注:OpenCensus由一套适用于各种语言的lib组成,用于从应用程序中收集指标和跟踪,在本地进行可视化,并将其远程发送以进行存储和分析。

OpenTracing的基本要素是什么?

跨度。它是分布式跟踪的一个主要构件。它包括一个名称、开始时间和持续时间。

跟踪。它是一个请求/交易在分布式系统中的可视化表现。

标签。它是用于识别一个跨度的键值信息。它有助于查询、过滤和分析跟踪数据。

日志。日志是键值对,用于捕获span特定的日志信息和其他调试或来自应用程序本身的信息输出。

Span-context。它是一个将某些数据与传入的请求联系起来的过程。这个上下文可以在同一进程中的所有其他应用层中访问。

哪些可用的工具与OpenTracing兼容?

Zipkin。它是由Twitter开发的第一批分布式跟踪工具之一,灵感来自于Google Dapper论文。Zipkin是用Java编码的,支持Cassandra和ElasticSearch的后端扩展性。

它包括收集跟踪数据的客户端或报告者,索引和存储数据的收集器,提取和检索跟踪数据的查询服务,以及可视化跟踪的用户界面。Zipkin与OpenTracing标准兼容,所以这些实现也应该与其他分布式跟踪系统一起工作。

Jaeger。Jaeger是Uber Technologies的另一个OpenTracing兼容项目,用Go编写。Jaeger也支持Cassandra和ElasticSearch作为可扩展的后端解决方案。虽然它的架构和Zipkin一样,但

你可能感兴趣的:(翻译)