白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

OpenTelemetry 入门:MQTT 和物联网可观测性

EMQX Team
2023-11-14
OpenTelemetry 入门:MQTT 和物联网可观测性

什么是 OpenTelemetry?

OpenTelemetry(通常称为 OTel)是一组工具、API 和 SDK,用于检测、生成、收集和导出遥测数据,包括指标、日志和跟踪数据,以供后续分析使用。这个开源的可观测性平台由云原生计算基金会(CNCF)管理,其目标是以一种与供应商解绑的方式提供所有必要组件,用于观测您的服务。

OpenTelemetry 使开发人员能够建立标准化、可互操作的遥测数据收集管道。不论是在小型内部项目还是大型分布式系统中,它都能为开发人员提供便捷的方式,利用遥测数据来检测和调试软件。

在许多领域的软件开发中,特别是在物联网行业,可观测性越来越受到重视。物联网的部署通常高度分散,连接的设备数量可达数百万台。考虑到这些物联网设备的有限计算能力,传统监测工具可能无法胜任。OpenTelemetry 则可以很好地应对,它为物联网设备提供了一种灵活的方式来收集遥测数据,即使在复杂的物联网环境中,也能确保可观测性。

本文将介绍 OpenTelemetry 的基础知识,并解释它如何与 MQTT 协议结合来监测和管理物联网通信。

OpenTelemetry 的三个核心概念

指标(Metrics)

OpenTelemetry 中的指标是对一段时间内测量数据的数值表达。这些数据可以包括对系统属性的测量,如 CPU 使用率和内存消耗情况,也可以包括自定义的业务指标,例如购物车中的商品数量。指标有助于开发者监测应用程序的健康状况,并为资源分配、性能调优以及应用程序开发和维护等众多方面提供有价值的信息。

日志(Logs)

在 OpenTelemetry 中,日志是离散事件的带时间戳的记录。这些事件可以包括代码中的错误或异常、系统事件、用户操作等各种情况。日志对于理解应用程序的行为和进行调试非常重要。它们提供了应用程序内部事件的细粒度视图,有助于更容易地识别和解决问题。

跟踪(Tracing)

跟踪也是 OpenTelemetry 的核心概念之一。在 OpenTelemetry 中,跟踪被定义为系统中一系列因果事件的表示,这些事件可以包括请求的启动和完成、数据库查询、对外部服务的调用等各种操作。跟踪有助于开发者理解导致特定结果的事件序列,从而更容易进行调试和优化他们的应用程序。

OpenTelemetry 的组件

下图展示了 OpenTelemetry 的组成部分,以及它们如何协同工作。

Components of OpenTelemetry

图片来源: https://opentelemetry.io/

OpenTelemetry 收集器

OpenTelemetry 收集器(OpenTelemetry Collector)充当着一个与供应商无关的桥梁,用于连接应用程序与数据处理后端。它具备接收、处理和导出遥测数据的功能,作为一个中间层,降低了应用程序直接与遥测后端互动的需求。另外,它还能够标准化数据,确保不同的遥测后端可以正确解析这些数据。

多语言 SDK

OpenTelemetry 提供了多种语言的 SDK,包括 Java、Python、Go 等。这些 SDK 对开发人员至关重要,因为它们可用于在代码中实现遥测数据的采集。它们不仅提供了手动数据采集的 API,还提供了自动数据采集的库。此外,SDK 还支持批处理和重试逻辑,有助于开发人员更轻松地确保数据可靠传输。

代理和检测

代理(Agent)是一种组件,安装在服务中,用于生成遥测数据。它们能够自动为您的代码添加跟踪和指标数据采集功能,而只需进行少量的代码修改。检测(Instrumentation)则是插入到您的应用程序中用于收集数据的代码,这些代码可以由开发人员自行编写和添加,也可以通过代理自动生成。

导出器

导出器(Exporter)是将遥测数据从您的服务传输到后端的组件。它们负责将数据转换为后端可以理解的格式。OpenTelemetry 提供了一些针对常见后端(例如 Jaeger 和 Prometheus)的内置导出器,但您也可以编写自己的自定义导出器。

OpenTelemetry 为物联网部署带来的优势

OpenTelemetry 在物联网环境中的应用越来越广泛,它在可观测性方面的强大功能为管理大规模物联网部署的企业带来了以下好处:

  • 更强的可观测性:通过将物联网系统与 OpenTelemetry 集成,可以从多个来源(包括连接的设备)收集数据,从而能够全面了解系统的功能。这种全面的视图对于发现瓶颈、预防故障和优化性能至关重要。
  • 更高效的故障排查:OpenTelemetry 还能深入了解系统运行状况,这有助于更有效地排查故障。在问题出现时,尤其是在分布式系统中,确定问题的根本原因可能颇具挑战性。然而,OpenTelemetry 的跟踪和日志数据能够协助精确定位故障源,同时确保系统正常运行。
  • 更好的性能监测:使用 OpenTelemetry 的另一个显著益处是性能监测。它使开发人员能够实时追踪应用程序的性能,以确保其达到所期望的性能标准。如果性能出现下降,开发人员可以借助 OpenTelemetry 提供的详细指标来识别原因并采取必要的优化措施。
  • 增强的安全洞察:OpenTelemetry 在跟踪与安全有关的事件(例如登录尝试)方面提供了有价值的安全信息。及时获得这些安全信息并进行分析,有助于发现安全威胁或漏洞,并采取措施来保护物联网系统。
  • 更便捷的分布式追踪:OpenTelemetry 在微服务架构中具有重要作用,它推动了分布式追踪的实施。分布式追踪有助于开发人员了解请求在通过多个微服务时的路径,从而更好地诊断问题并优化物联网环境中的服务互动。

OpenTelemetry 与 MQTT 的结合

MQTT(Message Queuing Telemetry Transport)是一种广受欢迎的轻量级消息传输协议,被广泛应用于物联网领域。MQTT 的优势在于其简洁和高效,非常适合网络带宽受限的场景。

当与 OpenTelemetry 结合使用时,MQTT 将获得全面可观测性框架的强大功能。OpenTelemetry 可为 MQTT 提供:

  • 数据丰富:OpenTelemetry 可以用额外的元数据(比如设备标识符、位置标签等信息)来补充通过 MQTT 传输的数据包。这种附加的数据能够提供更符合实际情况的操作视图,从而更容易获得有意义的见解。
  • 集中数据收集:OpenTelemetry 能够从多个 MQTT Broker 中获取数据,并将这些数据整合到一个中央数据存储中。这种能力对涉及多个 Broker 向大量设备发送消息的大规模物联网场景特别有用。
  • 实时监测:企业可以通过 OpenTelemetry 实现对 MQTT 消息的实时监测。此功能能够帮助企业及时发现消息传输中的潜在延迟或瓶颈,这对关键任务型物联网应用非常重要,因为对于这种类型的任务延迟可能造成严重后果。
  • 灵活的数据导出:借助 OpenTelemetry 的各种导出器,可以将遥测数据推送到各种数据后端进行进一步分析。例如,可以将 MQTT 数据导出至云端解决方案(如 Azure Monitor)或者本地工具(如 Grafana),以满足不同的需求。
  • 分析和洞察:通过结合 MQTT 的轻量级数据传输功能和 OpenTelemetry 的强大分析能力,企业可以对其数据进行深入研究。这种组合为企业提供了优化设备性能、进行预测性维护、甚至根据用户行为识别市场趋势的能力。

OpenTelemetry 助力下的 MQTT:关键监测指标

OpenTelemetry 能够提供有关 MQTT 环境性能的重要信息。接下来我们将深入探讨需要监测的关键指标。

客户端指标

客户端指标非常重要,因为它们能够反映每个 MQTT 客户端的性能状态。这些指标包括消息发布量、消息接收量以及活跃连接数等。监测这些指标可以帮助识别系统中性能不佳或造成问题的客户端。

消息指标

消息指标有助于了解系统中的整体消息流量情况。这些指标包括总发送消息数、总接收消息数以及消息大小等。通过监测这些指标,可以了解系统的负载水平,并及时发现和处理任何潜在的瓶颈或问题。

Broker 指标

Broker 指标可以反映 MQTT Broker 的性能状况。这些指标包括客户端连接数、订阅数量以及 Broker 内存使用情况等。监测这些指标有助于确保 Broker 性能达到最佳,并及时发现潜在问题。

延迟指标

延迟指标对于了解系统性能至关重要。这些指标包括端到端延迟和单个操作的延迟等。高延迟会影响系统的性能和可靠性,因此监测这些指标可以帮助及早发现并解决问题。

错误和故障指标

错误和故障指标对于评估系统的可靠性非常重要。这些指标包括消息丢失数量、连接断开数量以及客户端或 Broker 抛出的错误数量等。通过监测这些指标,可以及早发现并纠正问题,减小对系统性能和可靠性的潜在影响。

EMQX:支持 OpenTelemetry 集成的 MQTT 消息平台

作为全球领先的 MQTT Broker,EMQX 目前已集成了 OpenTelemetry 的强大功能。EMQX 5.2 版本使用 gRPC OTEL 协议提供了向 OpenTelemetry 收集器发送指标的直接通道。这种集成不仅提升了数据传输效率,还确保了遥测数据能够有效地传送、处理,并与多种后端平台兼容,包括开源平台(如 Jaeger 和 Prometheus)以及专业商业解决方案。

EMQX 和 OpenTelemetry 集成主要有以下优势:

  • 广泛集成: EMQX 利用 OpenTelemetry 的平台无关性,实现了与多种可观测性后端的兼容。
  • 易于设置: 在 EMQX Dashboard 中,只需设置收集器的 gRPC 地址和指标传输间隔,就可以轻松完成与 OpenTelemetry 的集成。
  • 指标可视化: 完成集成后,可以直接在 Prometheus 的 Web 控制台中查看 EMQX 的指标,从而增强系统的可观测性。
咨询 EMQ 技术专家
联系我们 →

推荐阅读