使用opentelemetry-go操作Jaeger

使用opentelemetry-go操作Jaeger

最近工作上需要做性能优化需要对服务性能做监控,之前了解过一点分布式链路追踪,所以水篇文章。

可观察性入门

下面放一段opentelemetry的谷歌翻译,翻译不太好但是看个大概是可以的。

感兴趣可以看 opentelemetry的官网:

https://opentelemetry.io/

什么是可观察性/h2>

可观察性让我们从外部了解一个系统,让我们在不知道其内部运作的情况下就该系统提出问题。此外,使我们能够轻松解决和处理新问题(即“未知的未知数”),并帮助我们回答“为什么会发生这种情况的问题。

为了能够询问系统的这些问题,必须对应用程序进行适当的检测。也就是说,应用程序代码必须发出 traces、 metrics和 logs等 signals。当开发人员不需要添加更多工具来解决问题时,应用程序会被正确地检测,因为他们拥有所需的所有信息。

OpenTelemetry是检测应用程序代码的机制,以帮助使系统可观察。

可靠性和指标

Telemetry(遥测) 是指从系统发出的关于其行为的数据。数据可以以Traces、 Metrics和Logs的形式出现。

Reliability(可靠性) 回答了这个问题:“服务是否在做用户期望它做的事情 一个系统可能 100% 的时间都在运行,但是如果当用户点击“添加到购物车”将一条黑色裤子添加到他们的购物车时,系统却不断添加一条红色裤子,那么系统会被说成是 可靠的。

Metrics(指标) 指标是一段时间内有关您的基础架构或应用程序的数字数据的聚合。示例包括:系统错误率、CPU 利用率、给定服务的请求率。

SLI或 Service Level Indicator,表示对服务行为的度量。一个好的 SLI 从用户的角度衡量您的服务。一个示例 SLI 可以是网页加载的速度。

SLO或服务水平目标是向组织/其他团队传达可靠性的方法。这是通过将一个或多个 SLI 附加到业务价值来实现的。

了解分布式跟踪

要了解分布式跟踪,让我们从一些基础知识开始。

Log

Log是由服务或其他组件发出的带时间戳的消息。然而,与Traces不同的是,它们不一定与任何特定的用户请求或事务相关联。它们几乎在软件中随处可见,过去开发人员和运营商都非常依赖它们来帮助他们理解系统行为。

样本日志:

不幸的是,日志对于跟踪代码执行并不是非常有用,因为它们通常缺少上下文信息,例如从哪里调用它们。

当它们作为Span的一部分包含时,它们变得更加有用。

Span

一个Span代表一个工作或操作单元。它跟踪请求进行的特定操作,描绘在执行该操作期间发生的事情。

Span 包含名称、时间相关数据、 结构化日志消息和 其他元数据(即属性),以提供有关它跟踪的操作的信息。

以下是 Span 中出现的信息类型示例:

请添加图片描述

瀑布图显示了 Root Span 与其子 Span 之间的父子关系。当一个 Span 封装另一个 Span 时,这也代表了一种嵌套关系。

opentelemetry 简介

OpenTelemetry 是工具、API 和 SDK 的集合。使用它来检测、生成、收集和导出遥测数据(指标、日志和跟踪),以帮助您分析软件的性能和行为。

Jaeger简介

Jaeger:开源、端到端的分布式链路链路追踪框架。

在复杂分布式系统中进行监控和故障排除

Jaeger 解决的问题

  • 分布式事务监控
  • 性能和延迟优化
  • 根本原因分析
  • 服务依赖分析
  • 分布式上下文传播

感兴趣可以看看的官网

https://www.jaegertracing.io/

Jaeger服务docker部署

为了方便使用,部署采用官网的all-in-one的 镜像。

执行命令后,打开http://127.0.0.1:16686/,出现下图则,安装成功

opentelemetry-go

opentelemetry-go 是go语言版本的客户端,使用opentelemetry-go 进行trace 上报十分简单。

官网如下:

官方举例:

简单说明一下上报流程:

  1. 创建tracerProvider,通过tracerProvider来连接 Jaeger
  2. 创建Tracer ,推荐使用 全局的TracerProvider 来创建如:
  3. 创建span 。
  4. 调用span.End(),完成上报。

关键组件

TracerProvider 接口

可以简单理解为Tracer提供者,只有一个方法Tracer 返回tracer

Tracer 接口

// Tracer is the creator of Spans.//// Warning: methods may be added to this interface in minor releases.type Tracer interface {   // Start creates a span and a context.Context containing the newly-created span.   //   // If the context.Context provided in `ctx` contains a Span then the newly-created   // Span will be a child of that span, otherwise it will be a root span. This behavior   // can be overridden by providing `WithNewRoot()` as a SpanOption, causing the   来源:细数时光
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月13日
下一篇 2022年5月13日

相关推荐