使用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 上 十分简单。
官 如下:
官方举例:
简单说明一下上 流程:
- 创建tracerProvider,通过tracerProvider来连接 Jaeger
- 创建Tracer ,推荐使用 全局的TracerProvider 来创建如:
- 创建span 。
- 调用span.End(),完成上 。
关键组件
TracerProvider 接口
可以简单理解为Tracer提供者,只有一个方法Tracer 返回tracer
Tracer 接口
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!