为 Telegraf 和 InfluxDB 添加 Zipkin 和跟踪支持

导航到

为什么需要跟踪?

似乎每个人都开始采用微服务架构来支持他们的持续交付计划。与传统的单体架构相比,微服务架构允许您从一系列小型、模块化的服务中构建应用程序,这些服务作为独立的过程运行,允许您在不影响整个应用程序的情况下进行更改。这很令人兴奋,因为它允许更快、更好的代码交付,但同时也增加了复杂性,因为几个独特且多样化的服务可能是失败的原因,且可能不清楚根本原因。需要的是一种方法来可视化生产系统在微服务层面的情况,以了解系统为何出现异常行为。

为了实现这一目标,开发者需要查看每个服务以及服务之间发生的错误,而一种新的实现方式是使用跟踪。跟踪允许您检测这些服务交互的整体路径。没有跟踪,开发者必须逐个审查每个进程的指标和日志,以检测代码中的错误,然后尝试弄清楚事物之间的关系,以确定根本原因。随着服务的日益高级,这些以前简单的策略变得复杂和繁琐。InfluxData 认识到简化微服务平台故障排除的必要性,并决定将跟踪功能添加到Zipkin Telegraf插件

什么是跟踪?

在深入研究我们的插件之前,我们需要回顾一下跟踪是什么。跟踪,或者说追踪,讲述了事务在分布式系统中传播的过程。它是由“跨度”组成的定向无环图(DAG)。在这些跨度中,有一些标识符提供了关于特定跨度的信息。这样的标识符包括ID、名称、类型和持续时间,这些有助于识别每个跨度之间的关系,从而创建一个跟踪。跟踪可以在许多情况下使用。通常,在一天中某个时候,进程会减慢速度,很难检测到持续时间突然变化的原因。跟踪是跟踪延迟、分析和通信等错误的完美解决方案,通过识别根本原因。以下是一个显示跟踪中跨度之间关系的图

Example of a trace

Zipkin

Zipkin 是一个分布式跟踪系统。它帮助收集在微服务架构中解决延迟问题的必要时间数据。它管理着这些数据的收集和查询。Zipkin的设计基于Google Dapper论文。Zipkin使用Cassandra、MySQL或Elasticsearch作为后端,我们想看看我们能否将数据存储在InfluxDB中。

我们如何实现跟踪:作为一个Zipkin Telegraf插件

我们从Zipkin的数据结构中提取数据,并将其实现到一个新的InfluxData Telegraf插件中。Telegraf插件是为收集、处理和写入指标而构建的。此插件收集微服务架构中解决延迟问题所需的跟踪和时序数据。因此,Zipkin插件是一个独立的代码单元,它在后台运行一个Zipkin http服务器。它按固定时间间隔收集由跟踪客户端发送的跨度,并将它们转换为Telegraf的内部数据格式。

然后插件将收集的数据写入InfluxDB数据库。InfluxDB接收来自Telegraf插件的行协议写入请求,并将它们存储起来。然后我们可以使用Jaeger的UI可视化收集的数据。

以下是说明此过程的图

Telegraf & Jaeger process

配置

如果Content-Type为application/json或application/x-thrift,则插件接受JSON或thrift格式的跨度。如果Content-Type未设置,则插件假定它是JSON格式。

跟踪

此插件使用注释标签和字段来跟踪跨度中的数据

  • TRACE:是一组共享单个根跨度的跨度集。通过收集所有共享traceId的跨度来构建跟踪。
  • SPAN:是一组与特定RPC对应的注释和二进制注释。
  • Annotations:对于跨度的每个注释和二进制注释,都会输出一个指标。记录请求的开始和结束时间的时刻。

标签

  • "id":跨度的64位ID。
  • "parent_id":与特定子跨度关联的ID。如果没有子跨度,则父ID设置为ID。
  • "trace_id":特定跟踪的64或128位ID。跟踪中的每个跨度都共享此ID。高和低部分连接并转换为十六进制。
  • "name":定义一个跨度

字段

  • "duration_ns":跨度开始和结束之间的时间(以纳秒为单位)。

查询示例

获取服务my_web_server的所有跨度名称

SHOW TAG VALUES FROM "zipkin" with key="name" WHERE "service_name" = 'my_web_server'

此查询返回一个包含具有给定 service_namemy_web_server 注释的 spans 名称的列表。

未来计划

该插件目前通过 Telegraf 收集数据并存储在 InfluxDB 中,可以对数据进行查询。然后,这些数据可以通过 Jaeger 显示,Jaeger 是一个基于 Dapper 的 OpenTracing 兼容的分布式追踪系统,用于监控基于微服务的架构。InfluxData 将致力于允许使用我们自己的 Chronograf 可视化工具进行追踪可视化。

InfluxData 的优势

其他分布式追踪系统将收集和用户界面结合在一起,这是一个很好的特性,直到需要运行多个系统。这会导致极高的基数,使得数据难以解释。InfluxData 通过将收集和可视化分别集成到 Telegraf 和 Chronograf 中来解决这个问题。它们都易于设置,维护几乎不存在。

下一步

通过 下载我们的开源软件 免费设置 InfluxData 来亲自体验这些优势。我们提供了详细的入门步骤,以帮助您 设置 此新插件,并将持续更新有关该插件的新功能。