首页 > 其他分享 >使用 OpenTelemetry 监控 Spring Boot

使用 OpenTelemetry 监控 Spring Boot

时间:2023-08-03 16:01:07浏览次数:44  
标签:OTEL EXPORTER Java Spring Boot 应用程序 OpenTelemetry export

使用 OpenTelemetry 监控 Spring Boot_Java

通过将 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 倍的成本监控应用程序。

使用 OpenTelemetry 监控 Spring Boot_应用程序_02

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

使用 OpenTelemetry 监控 Spring Boot_jar_03


标签:OTEL,EXPORTER,Java,Spring,Boot,应用程序,OpenTelemetry,export
From: https://blog.51cto.com/u_15739596/6950131

相关文章

  • spring-boot(廖师兄微信下单系统)学习笔记
    1、lombok工具1.1、依赖groupId:org.projectlombok;artifactId:lombok1.2、idea要安装lombokplugin1.3、作用:对model类加一个@Data注解就可以省写setandget方法对类加@Slf4j注解可以直接通过log调用日志方法对类加@Getter注解就可以省去写get方法2、不要在for中有查询......
  • SpringBoot 整合 redis-阿里云发送短信
    pom<dependencies><!--阿里云短信--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.16</version>......
  • Spring-1-透彻理解Spring XML的必备知识
    学习目标能够说出Spring的体系结构能够编写IOC-DI快速入门思考:为什么学习Spring而不是直接学习SpringBoot1Spring介绍思考:我们为什么要学习Spring框架?工作上面Java拥有世界上数量最多的程序员最多的岗位需求与高额薪资95%以上服务器端还是要用Java开发专业角度简化开发,降低企......
  • docker部署项目,涉及springboot\tomacat\nginx\es
    sudoapt-getinstalldocker-ce=5:20.10.6~3-0~debian-bullseyedocker-ce-cli=5:20.10.6~3-0~debian-bullseyecontainerd.iodocker部署项目信息:--172.17.0.1   172.16.22.401、docker部署tomcatdockerrun-d --namestock-admin--restartalways-p81:8080-e"TZ......
  • Spring Authorization Server (十)自定义异常
    在前面的篇章中,我们在请求认证服务器的交互过程去中,如果出现了异常,则服务器响应给客户端的信息格式非常不友好,我们希望服务器在发生异常时,将异常信息按照固定的json格式返回给客户端,这时需要我们来自定义异常,我们需要将异常进行捕获,然后按照我们定义的格式输出。那么本篇,我们就来介......
  • @SpringBootTest
     1.学会使用Test,让自己的代码不再有bug——@SpringBootTest的妙用 https://baijiahao.baidu.com/s?id=1760961522946985249&wfr=spider&for=pc2.SpringBootTest人类使用指南https://zhuanlan.zhihu.com/p/111418479  3.解析“@ExtendWith注解“https://blog.csdn......
  • 方便在非spring管理环境中获取bean的spring工具类
    spring工具类方便在非spring管理环境中获取beanimportorg.springframework.aop.framework.AopContext;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.NoSuchBeanDefinitionException;importorg.springframework.beans.facto......
  • SpringBoot-3 拦截器注入配置
    如果拦截器加载的时间点在Spring的上下文初始化之前,导致注入的值为null,您可以尝试以下两种解决方法:使用@PostConstruct注解:在拦截器中使用@PostConstruct注解标记一个初始化方法,在该方法中手动获取配置值,并进行相应的处理。这样可以确保在拦截器初始化完成后,配置值已经被正确加......
  • bootstrap-fileinput组件遇到的问题
    使用bootstrap-fileinput在进行上传的时候发现了一个问题,由于上传的可能是csv的文件那么这个时候当我们点击选择文件的时候他就会在网页上重新进行一个下载由于在断点的时候发现他是访问了blob的一个地址这个进行一个图片的显示。由于生成csv的文件地址访问了就直接下载了所以需要......
  • SpringMVC入门案例
    坐标<!--Spring坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version><......