使用 OpenTelemetry 监控 Spring Boot

举报
千锋教育 发表于 2023/08/03 15:44:38 2023/08/03
【摘要】 通过将 OpenTelemetry 与 Spring Boot 集成,您可以从应用程序捕获分布式跟踪和其他遥测数据,从而提供有关其在分布式环境中的性能和行为的宝贵见解。什么是开放遥测?OpenTelemetry定义了用于收集遥测数据(例如指标、跟踪和日志)的 API 和协议,并为流行的编程语言和技术提供了各种库、代理和集成。OpenTelemetry 是一种开放且供应商中立的解决方案,提供统...

通过将 OpenTelemetry 与 Spring Boot 集成,您可以从应用程序捕获分布式跟踪和其他遥测数据,从而提供有关其在分布式环境中的性能和行为的宝贵见解。

什么是开放遥测?

OpenTelemetry定义了用于收集遥测数据(例如指标、跟踪和日志)的 API 和协议,并为流行的编程语言和技术提供了各种库、代理和集成。

OpenTelemetry 是一种开放且供应商中立的解决方案,提供统一的可观测性方法,使组织能够更轻松地管理其云原生基础设施的复杂性。它使组织能够从其应用程序收集遥测数据并将其发送到各种分布式跟踪工具

管道应用程序

Spring Boot 是一个流行的 Java 框架,它简化了 Java 应用程序的开发。它提供了一种约定优于配置的方法,并内置了对依赖项注入、配置管理和其他几个功能的支持。

RealWorld 示例应用程序是一个名为“Conduit”的全栈应用程序,由提供 JSON API 的后端和前端 UI 组成。不同的语言和框架有许多实现,但在本教程中,您将使用 Spring 后端和 React 前端。

真实世界后端

我们首先下载后端源码:

git clone https://github.com/gothinkster/spring-boot-realworld-example-app.git

然后您需要从下载的源代码构建一个 JAR:

cd spring-boot-realworld-example-app
./gradlew bootJar

如果您收到Could not find snakeyaml-1.27-android.jar (org.yaml:snakeyaml:1.27),请应用以下差异build.gradle并重试:

diff --git a/build.gradle b/build.gradle
index 12781f0..52a8f71 100644
--- a/build.gradle
+++ b/build.gradle
@@ -33,6 +33,7 @@ dependencies {
     implementation 'io.jsonwebtoken:jjwt:0.9.1'
     implementation 'joda-time:joda-time:2.10.6'
     implementation 'org.xerial:sqlite-jdbc:3.34.0'
+    implementation 'org.yaml:snakeyaml:1.28'

现在您可以使用编译的 JAR 启动应用程序:

java -jar build/libs/spring-boot-realworld-example-app-0.0.1-SNAPSHOT.jar

您可以通过访问检查后端是否正常工作http://localhost:8080/tags

curl http://localhost:8080/tags
{"tags":[]}

让我们按 CTRL+C 暂时停止该应用程序。

OpenTelemetry Java 代理

要将 OpenTelemetry 与 Spring Boot 应用程序集成,您可以使用 OpenTelemetry Java 代理,它为各种 Java 框架(包括 Spring Boot)提供工具,以自动收集遥测数据。

OpenTelemetry Java 代理是一个独立的进程,可为 Java 应用程序提供自动检测和跟踪功能,而无需更改任何代码。它的工作原理是在运行时附加到 Java 应用程序并拦截方法调用以收集遥测数据(例如跟踪和指标)。

该代理位于仪表化应用程序和后端系统或可观测平台之间,允许集中且简化的遥测数据处理。

要下载最新的 OpenTelemetry Agent:

wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar

Otel Agent通过系统属性或环境变量接受各种配置选项。

上行跟踪

Uptrace 是OpenTelemetry 的开源 APM,支持分布式跟踪、指标和日志。您可以使用它来监控应用程序并解决问题。

Uptrace 配备了直观的查询生成器、丰富的仪表板、带通知的警报规则以及大多数语言和框架的集成。

Uptrace 可以在单个服务器上处理数十亿个跨度和指标,并允许您以降低 10 倍的成本监控应用程序。

追踪主页

Uptrace DSN(数据源名称)是一个连接字符串,用于连接 Uptrace 后端并向其发送数据。安装Uptrace并创建项目后即可获取DSN 。

使用以下环境变量配置OpenTelemetry Java以将数据发送到 Uptrace。

export OTEL_RESOURCE_ATTRIBUTES=service.name=myservice,service.version=1.0.0
export OTEL_TRACES_EXPORTER=otlp
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_COMPRESSION=gzip
export OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.uptrace.dev:4317
export OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=https://<token>@uptrace.dev/<project_id>
export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=DELTA
export OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION=BASE2_EXPONENTIAL_BUCKET_HISTOGRAM

让我们再次启动后端应用程序,但这次您将使用 Java 代理自动检测 JAR:

java -javaagent:opentelemetry-javaagent-all.jar -jar build/libs/spring-boot-realworld-example-app-0.0.1-SNAPSHOT.jar

像往常一样,您可以打开http://localhost:8080/tags以检查 API 是否正常工作。

现实世界的前端

你有一个可以工作的后端,但是如果没有前端,它就不是很有趣。让我们继续安装一个用作 UI 的React + Redux前端:

git clone https://github.com/gothinkster/react-redux-realworld-example-app.git

该应用程序附带各种 JS 依赖项:

cd react-redux-realworld-example-app
npm install

现在您需要配置前端应用程序以使用我们在 运行的后端http://localhost:8080/。您可以通过编辑src/agent.js文件来做到这一点:

const API_ROOT = 'http://localhost:8080'

之后,您可以启动 React 应用程序并享受 UI http://localhost:4100/register

npm start

单击几个链接后,您应该会看到像这样的跟踪到达您的 Uptrace 项目:

导管


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。