链路追踪作为一种用于监控和观察分布式系统中请求流动和性能的技术,在现代微服务架构中扮演着重要角色。在复杂的分布式环境中,它可以记录并可视化跨多个服务与组件的完整请求路径,并提供每个服务节点上的执行时间,帮助开发人员清晰地掌握请求走向、识别性能瓶颈。
在出现故障或错误时,链路追踪能够提供详细的信息,帮助开发人员快速定位问题的根源,加速故障排查过程。通过分析链路追踪数据,团队可以基于实际使用情况优化服务、调整资源配置,从而进行容量规划和设计决策。
产品介绍
Datalayers:是澜图未来(成都)数据科技有限公司开发的一款为工业物联网、车联网、能源行业设计的分布式多模态、超融合数据库,具备时序数据存储、多模融合、键值存储、存算分离、读写分离、自适应压缩、原生 SQL、边云同步和云原生等特点,支持边缘向云端的数据同步,并针对受限设备进行优化。
链路追踪的实现
EMQX ECP 相关的链路追踪服务 NeuronEX 和 EMQX 的 Trace 数据都支持通过 otlp protocol 写入到 otlp 协议的服务端,通过 OpenTelemetry Collector 的 otlp receivers 插件,可以开启 http 和 grpc 两种协议的接收器,OpenTelemetry Collector 收到 trace 数据后,通过各种 Exporter 插件可以将数据写入不同的后端数据库中。
由于 Datalayers 也支持 InfluxDB 行协议,可以通过 OpenTelemetry Collector 的 InfluxDB Exporter 插件与 Datalayers 实现集成。
OpenTelemetry Collector 官方提供了 Core 和 Contrib 两个不同的版本。其中,前者只包基础的插件,后者包含了所有的插件。Core 版本中没有 influxdb exporter 插件,而 Contrib 版本中有。用户也可以按需自己构建镜像,只包含自己需要的插件,建议生产环境采用这种方式。
由于 Datalayers 仅支持 InfluxDB v1.x API 行协议, 因此需要在 OpenTelemetry Collector 的 InfluxDB Exporter 插件配置中开启 v1_compatibility
相关配置。
通过 span_dimensions
可以自定义行协议中的标签, 同时也是 Datalayers 表的联合索引字段,InfluxDB Exporter 默认强制 span_dimensions
会加上 trace_id 和 span_id,和我们自己配置的 span_dimensions
共同构成协议中的标签。
InfluxDB Exporter 所有配置详见:
https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/influxdbexporter/README.md
最简 OpenTelemetry Collector 配置示例:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
influxdb:
endpoint: http://172.31.104.77:8361
v1_compatibility:
enabled: true
db: demo
username: admin
password: public
service:
extensions: []
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [influxdb]
Datalayers 使用 SQL 作为查询语言,SQL 是一种相对简单的语言,易于学习和使用。它使用类似自然语言的语法,使得用户可以快速上手,从而减少了学习成本。
可以通过 REST API 或者 Arrow Flight SQL 进行查询。其中 REST API 是基于 HTTP 的,而 Arrow Flight SQL 是基于 gRPC 的,性能更好,并且提供了常见语言的 SDK 。ECP 目前使用的是 REST API 查询, 后期可能会切换到性能更好的 Arrow Flight SQL方式。此外,Datalayers 还支持按时间窗口进行聚合查询等功能,感兴趣可以查阅官方文档。
ECP 链路追踪查询界面
总结
至此,本文完整介绍了 EMQX ECP 和 Datalayers 通过 OpenTelemetry Collector 集成实现链路追踪功能。将 EMQX ECP 的链路追踪数据以 InfluxDB 行协议方式写入 Datalayers,并结合 Datalayers 的 REST API 和 Arrow Flight SQL 两种查询方式,检索和展示链路追踪数据,实现对分布式系统的监控和诊断。
未来,EMQX ECP 还会进一步拓展存储和查询指标数据的功能,敬请期待。