用OpenTelemetry监视弹簧靴
#开源 #java #springboot #monitoring

将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 Home

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项目:

Conduit

结论

通过使用OpentElemetry Java代理,您可以在不更改单行代码的情况下进行启动Java应用程序。好奇地尝试仪器吗?注册free Uptrace account,并遵循本教程。祝你好运。