OpenTelemetry 实战:从 0 到 1 编写一个 Instrumentation
背景
因为公司内部在使用 PowerJob 作为我们的分布式调度系统,同时又是使用 OpenTelemetry 作为可观测的底座,但目前 OpenTelemetry 还没有对 PowerJob 提供支持,目前社区只对同类型的 XXL-JOB 有支持。
恰好公司内部也有一些开发同学有类似的需求:
于是在这个背景下我便开始着手开发 PowerJob 的 instrumentation,最终的效果如下:
因为公司内部在使用 PowerJob 作为我们的分布式调度系统,同时又是使用 OpenTelemetry 作为可观测的底座,但目前 OpenTelemetry 还没有对 PowerJob 提供支持,目前社区只对同类型的 XXL-JOB 有支持。
恰好公司内部也有一些开发同学有类似的需求:
于是在这个背景下我便开始着手开发 PowerJob 的 instrumentation,最终的效果如下:
23 年在 ChatGPT 刚出来的时候就在 V 站上看到有一个看到有大佬用自己的微信聊天记录和博客文章生成了一个 AI 替身:
最近在给 opentelemetry-java-instrumentation
提交了一个 PR,是关于给 gRPC 新增四个 metrics:
rpc.client.request.size
: 客户端请求包大小rpc.client.response.size
:客户端收到的响应包大小rpc.server.request.size
:服务端收到的请求包大小rpc.server.response.size
:服务端响应的请求包大小这个 PR 的主要目的就是能够在指标监控中拿到 RPC
请求的包大小,而这里的关键就是如何才能拿到这些包的大小。
在上一篇文章:OpenTelemetry 实战:从零实现分布式链路追踪讲解了链路相关的实战,本次我们继续跟进如何使用 OpenTelemetry 集成 metrics 监控。
建议对指标监控不太熟的朋友可以先查看这篇前菜文章:从 Prometheus 到 OpenTelemetry:指标监控的演进与实践
之前写过一篇 从 Dapper 到 OpenTelemetry:分布式追踪的演进之旅的文章,主要是从概念上讲解了 Trace 在 OpenTelemetry 的中的场景和使用。
也写过一篇 实操 OpenTelemetry:通过 Demo 掌握微服务监控的艺术:如何从一个 demo 开始集成 OpenTelemetry。
但还是有不少小伙伴反馈说无法快速上手(可能也是这个 demo 的项目比较多),于是我准备从 0 开始从真实的代码一步步带大家集成 OpenTelemetry
,因为 OpenTelemetry 本身是跨多种语言的,所以也会以两种语言为(Java、Golang)主进行讲解。
使用这两种语言主要是因为 Java 几乎全是自动埋点,而 Golang 因为语言特性,大部分都得硬编码埋点;覆盖到这两种场景后其他语言也是类似的,顶多只是 API 名称有些许区别。
在这个过程中也会穿插一些 OpenTelemetry 的原理,希望整个过程下来大家可以在项目中实际运用起来,同时也能知其所以然。
前段时间在 pulsar-client-go 社区里看到这么一个 issue: