为 Telegraf 和 InfluxDB 添加 Zipkin 和跟踪支持
作者:Ayrdrie Palmer / 产品,开发者
2017年9月7日
导航到
为什么需要跟踪?
似乎每个人都开始采用微服务架构来支持他们的持续交付计划。与传统的单体架构相比,微服务架构允许您从一系列小型、模块化的服务中构建应用程序,这些服务作为独立的过程运行,允许您在不影响整个应用程序的情况下进行更改。这很令人兴奋,因为它允许更快、更好的代码交付,但同时也增加了复杂性,因为几个独特且多样化的服务可能是失败的原因,且可能不清楚根本原因。需要的是一种方法来可视化生产系统在微服务层面的情况,以了解系统为何出现异常行为。
为了实现这一目标,开发者需要查看每个服务以及服务之间发生的错误,而一种新的实现方式是使用跟踪。跟踪允许您检测这些服务交互的整体路径。没有跟踪,开发者必须逐个审查每个进程的指标和日志,以检测代码中的错误,然后尝试弄清楚事物之间的关系,以确定根本原因。随着服务的日益高级,这些以前简单的策略变得复杂和繁琐。InfluxData 认识到简化微服务平台故障排除的必要性,并决定将跟踪功能添加到Zipkin Telegraf插件。
什么是跟踪?
在深入研究我们的插件之前,我们需要回顾一下跟踪是什么。跟踪,或者说追踪,讲述了事务在分布式系统中传播的过程。它是由“跨度”组成的定向无环图(DAG)。在这些跨度中,有一些标识符提供了关于特定跨度的信息。这样的标识符包括ID、名称、类型和持续时间,这些有助于识别每个跨度之间的关系,从而创建一个跟踪。跟踪可以在许多情况下使用。通常,在一天中某个时候,进程会减慢速度,很难检测到持续时间突然变化的原因。跟踪是跟踪延迟、分析和通信等错误的完美解决方案,通过识别根本原因。以下是一个显示跟踪中跨度之间关系的图
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可视化收集的数据。
以下是说明此过程的图
配置
如果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_name
的 my_web_server
注释的 spans 名称的列表。
未来计划
该插件目前通过 Telegraf 收集数据并存储在 InfluxDB 中,可以对数据进行查询。然后,这些数据可以通过 Jaeger 显示,Jaeger 是一个基于 Dapper 的 OpenTracing 兼容的分布式追踪系统,用于监控基于微服务的架构。InfluxData 将致力于允许使用我们自己的 Chronograf 可视化工具进行追踪可视化。
InfluxData 的优势
其他分布式追踪系统将收集和用户界面结合在一起,这是一个很好的特性,直到需要运行多个系统。这会导致极高的基数,使得数据难以解释。InfluxData 通过将收集和可视化分别集成到 Telegraf 和 Chronograf 中来解决这个问题。它们都易于设置,维护几乎不存在。
下一步
通过 下载我们的开源软件 免费设置 InfluxData 来亲自体验这些优势。我们提供了详细的入门步骤,以帮助您 设置 此新插件,并将持续更新有关该插件的新功能。