使用 Jaeger 完成服务间的链路追踪

  • 时间:
  • 浏览:0

效果图:

Tracer:项目中的追踪实例,追踪项目里数据变化/函数执行的过程,上能 认为是有一另2个多定向非循环的 spans 的集合图。

hello.gen.proto

对于数据方面 jaeger 是比较自由的,上能 拉 jaeger-ui 代码也不我根据买车人设置的 KeyValuePair 做个性化设置。

好多好多 ,设置 errorSpan 励志的话 代码如下:

世上本这么 路,走的人多了,便变成了路 -- 鲁迅

请求地址: http://localhost:7071/abc,浏览器打开地址: http://localhost:16686/search

使用以后 先了解:

Baggage:字符串组成的键值对,和 Span/SpanContext 互相关联,会在所有的下游 Spans 中进行传播。(上能 做某些强大的功能,如在整个链路夹带数据,使用成本高,小心使用)

这里大致介绍一下 Configuration/Tracer/Span ,以便实现有一另2个多基础的 tracing 。

Go 服务之间(http & grpc)

至于为那些用 jaeger... 你这个支持多语言方案算么?遵循 opentracing 规范算么?开箱即用算么?还有更多?

Tracer 和 Span 如下图:

SpanContext:表示必须传播到下游 Spans 和跨应用/线程的 Span 数据,上能 简单理解为串在各个系统里的统一标识对象。

jaeger-agent (负责发送的线程,对 spans 进行解决并发送给 collector,监听 spans 的 UDP 发送。设计这层是为了作为基础组件部署到主机上,从 client 中抽象出了 collector 的发现和路由。注意:1.这层应该是部署在应用本地;2.由于配置报告的 endpoint,则直接将 spans 发送到 collector,不让须 agent。)

a-service.js

本次讨论励志的话 题也不我必须在各个服务之间踏出条"路",让 bug 有"路"可循。

c-service.js

opentracing-specification

opentracing-javascriptjaegertracingjaeger-client-nodejaeger-client-goistio-zhdemo-github

jaeger-client (OpenTracing API 各语言的实现,用于在应用中塞入信息分派点)

jaeger-ui (UI 展示层,基于 React)

反正先撸袖开干...

基于以上的体系行态,本文关注点在 jaeger-client 次责,为甚会 实现服务之间和服务组织组织结构的 tracing。

至于为那些遵循 opentracing 规范的好... 你这个...杠精同学,文末地址可参考

注意:jaeger 的存储是可插拔组件,目前支持 Cassandra、ElasticSearch 和 Kafka。

data store (追踪信息的存储)

jaeger 体系和流程如下图

jaeger-collector (分派追踪 spans,并通过管道对追踪数据进行解决。当前的管道支持追踪的验证、索引、转换,最后存储数据)

这里起了有一另2个多 http 服务 main ,端口 3081,从 main 这边通过 grpc 请求服务 service 上的法律法律办法。第一次写 go 线程,不喜勿喷... 如有不正之处,感谢指出。

main.go

Jaeger: open source, end-to-end distributed tracing

Jaeger: 开源的、分布式系统的端到端追踪

Monitor and troubleshoot transactions in complex distributed systems

在繁杂的分布式系统之间做监控及间题报告 排查的事务解决。

jaeger-query (从存储中检索追踪信息并通过 UI 展示)

本文以 Nodejs 为主,Go 为辅(由于当前刚好涉及到你这个种生活服务的链路追踪方案 )。

Configuration

Span:追踪中的逻辑单元,比如一次请求的过程/有一另2个多函数的执行,暗含操作名称、结束英文时间、持续时间。

请求地址: http://localhost:3081/get_h ,浏览器打开地址: http://localhost:16686/search

service.go

Span

比如有服务[a,b,c],发起有一另2个多请求到 a,服务 a 调用服务 b 的接口,服务 b 调用服务 c 的接口,依次做追踪。

request.js

对于 jaeger-ui 效果如下图:

b-service.js

效果图:

Tracer

生成 grpc 所需文件

jaeger-client 是 opentracing 的实现,于是 jaeger-client api 几乎等同于 opentracing api。

span 励志的话 ,会有 span 和 errorSpan 之分,在 jaeger-ui 代码里的判断是:

本文仅做 jaeger 使用的简单参考,实际项目考虑到 Microservices 、 Service Mesh 、 Business Logic Logs 等等影响因素,tracing 会更具繁杂性且有更多的坑得踩。