将OpenTelemetry与Spring Boot集成,使您可以从应用程序中捕获分布式轨迹和其他遥测数据,从而为其在分布式环境中的性能和行为提供宝贵的见解。
什么是opentelemetry?
OpenTelemetry定义了用于收集遥测数据的API和协议,例如指标,跟踪和日志,并为流行的编程语言和技术提供了各种库,代理和集成。
>OpentElemetry是一种开放且无关的解决方案,它提供了一种统一的观察方法,使组织更容易管理其云本地基础架构的复杂性。它使组织能够从其应用程序中收集遥测,并将其发送到各种distributed tracing tools。
。导管应用程序
Spring Boot是一个流行的Java框架,可简化Java应用程序的开发。它提供了一种限制性的方法,并具有对依赖注入,配置管理和其他几个功能的内置支持。
RealWorld example app是一个称为“导管”的全堆栈应用程序,由可提供JSON API和Frontend UI的后端组成。对于不同的语言和框架有许多实现,但是在本教程中,您将使用弹簧后端和React Frontend。
现实世界后端
让我们从下载后端源代码开始:
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代理,该代理为包括Spring Boot在内的各种Java框架提供仪器来自动收集遥测数据。
OpentElemetry Java代理是一个独立的过程,它为Java应用程序提供自动仪器和跟踪功能,而无需任何代码更改。它通过在运行时附加到Java应用程序并拦截方法调用来收集遥测数据,例如痕迹和指标。
来起作用。代理位于仪器应用程序和后端系统或可观察性平台之间,允许集中式和简化的遥测数据处理。
下载最新的opentelemetry代理:
wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
Otel Agent通过系统属性或环境变量接受各种configuration选项。
上轨
UpTrace是一种用于支持分布的跟踪,指标和日志的opentelemetry的open source APM。您可以使用它来监视应用程序并解决问题。
UpTrace带有直观的查询构建器,丰富的仪表板,通知的警报规则以及大多数语言和框架的集成。
UpTrace可以在单个服务器上处理数十亿个跨度和指标,并允许您以较低的成本监视应用程序。
UpTrace DSN(数据源名称)是一个连接字符串,用于连接并将数据发送到UpTrace后端。您可以在installing 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应用程序并在http://localhost:4100/register
享受UI:
npm start
单击几个链接后,您应该看到这样的痕迹,例如到达您的Uptrace项目:
结论
通过使用OpentElemetry Java代理,您可以在不更改单行代码的情况下进行启动Java应用程序。好奇地尝试仪器吗?注册free Uptrace account,并遵循本教程。祝你好运。