一. OpenTelemetry介绍
OpenTelemetry 是一个开源项目,旨在为应用程序提供统一的工具和标准,以收集、处理和传播遥测数据(如指标、日志和追踪信息)。它由多个组织共同开发,旨在解决不同监控工具和库之间的不兼容性。
主要特点:
-
语言支持:支持多种编程语言,如 Java、JavaScript、Python、Go 和 C# 等。
-
数据模型:提供标准化的模型和 API,使开发者可以轻松收集和报告遥测数据。
-
集成:与众多后端监控系统(如 Prometheus、Jaeger、Zipkin 等)集成,方便数据的存储和分析。
-
可扩展性:支持自定义数据收集和导出,便于根据特定需求进行扩展。
-
社区支持:有一个活跃的社区和广泛的文档,帮助用户更好地理解和使用该工具。
OpenTelemetry 的目标是让开发者可以更轻松地实施监控和观察,提升系统的可观测性和可靠性。
官方的地址为:What is OpenTelemetry? | OpenTelemetry
以上都是官方的描述,听起来有点儿抽象。
其实 OpenTelemetry 可以理解为使用 OpenTelemetry 探针来进行监测(遥测)数据的采集。例如我有一个应用程序。我可以使用 OpenTelemetry 来配置一些基本的探针信息,然后将这个探针植入到应用程序中,从而完成应用程序的监测数据采集。
二. OpenTelemetry 使用
这里先不介绍具体的配置过程。配置过程在之后的文章会继续介绍。现在只介绍基本的原理和使用,便于读者更加清楚地了解 OpenTelemetry 是什么。
在看接下来的内容之前,需要简单了解一些开源的监控系统:
1. Jaeger (Jaeger: open source, distributed tracing platform)
Jaeger 是一个开源的分布式追踪系统,最初由 Uber 开发,旨在监测和优化微服务架构中的请求流。它可以帮助开发者分析请求的延迟、识别性能瓶颈和追踪错误。
主要特点:
① 分布式追踪:能够追踪跨多个服务的请求,提供请求的完整视图。
② 可视化:提供用户友好的界面,可以查看和分析追踪数据。
③ 性能分析:通过查看服务间的调用关系,帮助识别慢请求和优化性能。
④ 多种存储后端:支持多种数据存储后端,如 Cassandra、Elasticsearch 和 Kafka。
⑤ 与 OpenTelemetry 集成:可以与 OpenTelemetry 配合使用,轻松收集和导出追踪数据。
Jaeger 可以理解为一个处理数据的后端,当我们使用 OpenTelemetry 探针采集到消息后,可以发送给 Jaeger,让这个后端去处理,最后再在 Jaeger 的 UI 页面看到具体的数据展示。
2. Prometheus (https://prometheus.io/)
Prometheus 是一个开源的监控和报警系统,特别适用于云原生环境和微服务架构。它以时间序列数据为核心,提供强大的数据收集、存储和查询功能。
主要特点:
① 数据模型:采用基于标签的时间序列数据模型,便于灵活查询和聚合。
② 强大的查询语言:使用 PromQL(Prometheus Query Language)进行复杂查询和分析。
③ 多种数据收集方式:支持主动拉取(scraping)和推送(pushgateway)两种数据收集方式。
④ 自定义报警:通过 Alertmanager 进行报警管理,支持多种通知渠道。
⑤ 易于集成:与 Kubernetes 等云原生技术深度集成,适合动态环境。
Prometheus 是现代监控系统的重要组成部分,广泛应用于各类生产环境。
综上所述,OpenTelemetry 作为一个数据采集的工具,可以跟监控系统 Jaeger 和 Prometheus 集合使用,从而可以在 Jaeger 和 Prometheus 的 UI 页面看到具体的监测数据。
可以理解为下图这样:
也就是说,通过OpenTelemetry Jaeger 和 Prometheus 的共同使用,我们只需要配置一些信息即可完成数据的采集和分析处理(关于OpenTelemetry Jaeger 和 Prometheus 的配置下一篇文章会更新)。
但是这些监控系统毕竟是别人的,我们要想自己开发一个监控系统供运维人员使用,便需要自己实现一个后端了。但是原理也类似,只不过是把 Jaeger 和 Prometheus 替换成我们自己的后端罢了。
由于 OpenTelemetry 探针采集到的数据特别多,如果直接发送到后端可能性能上吃不消,所以这里我们需要使用消息队列来进行监测数据的暂存,这里使用开源的消息队列 Kafka(下一章也会介绍 Kafka 的配置)。
所以如果使用 OpenTelemetry 来自己实现监控系统,则如下图所示:
三. 总结
以上便是关于 OpenTelemetry 的基本原理和使用了。如果我们想要完成一个应用程序的监测,就需要学会配置 OpenTelemetry Jaeger Prometheus 和 Kafka 等工具。至于如何配置这些工具,并且实现数据的流通,在下一章节会详细介绍。