使用 OpenTelemetry 监控 Spring Boot
通过将 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 项目:
- 点赞
- 收藏
- 关注作者
评论(0)