OpenTelemetry × Elastic Observability 系列(一):整体架构介绍

本文是 OpenTelemetry × Elastic Observability 系列的第一篇,将介绍 OpenTelemetry Demo 的整体架构,以及如何集成 Elastic 来采集和可视化可观测性数据。后续文章将分别针对不同编程语言,深入讲解 OpenTelemetry 的集成实践。
程序架构
OpenTelemetry Demo 是由 OpenTelemetry 社区开发的微服务演示应用程序,用于展示 OpenTelemetry (OTel) 的插桩(Instrumentation)和可观测性能力。OpenTelemetry Demo 是一个电子商务网页,由多个通过 HTTP 和 gRPC 相互通信的微服务组成。所有服务都使用 OpenTelemetry 进行插桩,并生成链路追踪(trace)、指标(metric)和日志(log)。

下表列出了应用程序中的各个微服务的介绍及其使用的编程语言:
启动程序
Elastic 提供了 OpenTelemetry Demo 的 Elastic Observability 版本,该版本使用了 Elastic Distributions of OpenTelemetry (EDOT) 来为应用程序进行插桩。Elastic Distributions of OpenTelemetry(EDOT) 是为 Elastic 量身打造的 OpenTelemetry 开源发行版生态,包含定制化的 OpenTelemetry Collector 和多个 OpenTelemetry 语言 SDK。

Elastic 提供的 OpenTelemetry Demo 依赖于 Elastic Cloud,该平台提供开箱即用的 APM Server、Elasticsearch 和 Kibana 等服务。为了方便用户在本地搭建和运行环境,我对该项目进行了一些修改,使其支持本地部署 APM Server、Elasticsearch、Kibana 等组件。你可以直接克隆我修改后的项目来运行:
网站界面
启动成功后,浏览器输入 http://localhost:8080/
可以访问网站的前端界面。

你可以在网站上将商品加入购物车并进行结算。

负载测试
Load Generator 基于 Python 负载测试框架 Locust 编写。默认情况下,它将模拟用户请求前端的多个不同路由。浏览器输入 http://localhost:8080/loadgen/
可以访问 Load Generator 的 Web 界面。

功能标志
Demo 应用提供了多个功能标志(Feature Flag),可用于模拟不同的场景和故障。这些标志由 flagd 管理,这是一个支持 OpenFeature 的简单功能标志服务。
运行 Demo 时,可以通过访问 http://localhost:8080/feature
的用户界面来更改这些标志的值。

Elastic Observability
通过浏览器访问 http://localhost:5601/
可打开 Kibana 的 Web 界面。在 Observability -> APM 页面中,可以查看与 Elastic Observability 应用相关的可观测性数据。
Elastic Observability 提供全栈可观测性方案,通过支持 APM 和 OpenTelemetry,实现日志、指标和链路追踪的统一分析与可视化。它帮助团队加速故障排查、提升系统透明度,并降低运维成本。
Service Map 是 Elastic Observability 的核心功能之一,它实时地展示了应用程序中各服务之间的依赖关系和交互情况。

Service Inventory 列出了所有的服务以及每个服务的关键指标(延时、吞吐量、失败率等)。

Trace 以瀑布图的形式展示请求在各个微服务间的完整调用链,包含请求方法、耗时、状态码等关键信息,帮助用户快速定位性能瓶颈或异常问题。

如果想要查看某条 trace 关联的信息,可以点击 Investigate
按钮。

然后可以选择查看该 trace 关联的日志。

或者是该 trace 的 Service Map。

总结
本文介绍了 OpenTelemetry Demo 的整体架构,并演示了如何借助 Elastic Observability 实现链路追踪、日志与指标的统一观测。这是 OpenTelemetry × Elastic Observability 实践系列的第一篇文章,在后续的文章中,我们将深入探讨不同编程语言(如 Java、Go、Node.js 和 Python)的 OpenTelemetry 集成实践。
参考资料
OpenTelemetry Demo Docs:https://opentelemetry.io/docs/demo/
Elastic Distributions of OpenTelemetry:https://www.elastic.co/docs/reference/opentelemetry
OpenTelemetry Demo with the Elastic Distributions of OpenTelemetry:https://www.elastic.co/observability-labs/blog/opentelemetry-demo-with-the-elastic-distributions-of-opentelemetry
elastic/opentelemetry-demo:https://github.com/elastic/opentelemetry-demo
Use OpenTelemetry with APM:https://www.elastic.co/docs/solutions/observability/apm/use-opentelemetry-with-apm
Native OpenTelemetry support in Elastic Observability:https://www.elastic.co/observability-labs/blog/native-opentelemetry-support-in-elastic-observability
Combining Elastic Universal Profiling with Java APM Services and Traces:https://www.elastic.co/observability-labs/blog/universal-profiling-with-java-apm-services-traces
Revealing unknowns in your tracing data with inferred spans in OpenTelemetry:https://www.elastic.co/observability-labs/blog/tracing-data-inferred-spans-opentelemetry
elastic/observability-examples:https://github.com/elastic/observability-examples/tree/main/Elastiflix
欢迎关注

版权声明: 本文为 InfoQ 作者【Se7en】的原创文章。
原文链接:【http://xie.infoq.cn/article/25f045aeb9252eb20cfe507b4】。文章转载请联系作者。
评论