10.7. OpenTelemetry 追踪应用程序开发
虽然 JBoss EAP 会自动和隐式跟踪对 Jakarta RESTful Web Services 应用的 REST 调用,但您可以从应用程序中创建自定义范围以进行精细的追踪。span 是 trace 中的单个操作。例如,您可以在应用程序中创建一个范围,例如定义资源,称为方法,以此类推。您可以通过注入 Tracer 实例来在应用程序中创建自定义 trace。
10.7.1. 为 OpenTelemetry tracing 配置 Maven 项目 复制链接链接已复制到粘贴板!
要创建 OpenTelemetry 追踪应用程序,请创建一个具有所需依赖项和目录结构的 Maven 项目。
先决条件
- 您已安装了 Maven。如需更多信息,请参阅 下载 Apache Maven。
- 您已为最新版本配置了 Maven 存储库。有关安装最新的 Maven 存储库补丁的详情,请参考 Maven 和 JBoss EAP microprofile maven 存储库。
流程
在 CLI 中,使用
mvn命令来设置 Maven 项目。此命令为项目创建目录结构,以及pom.xml配置文件。语法
$ mvn archetype:generate \ -DgroupId=<group-to-which-your-application-belongs> \ -DartifactId=<name-of-your-application> \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-webapp \ -DinteractiveMode=falseExample
$ mvn archetype:generate \ -DgroupId=com.example.opentelemetry \ -DartifactId=simple-tracing-example \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-webapp \ -DinteractiveMode=false导航到应用程序根目录。
语法
$ cd <name-of-your-application>Example
$ cd simple-tracing-example更新生成的
pom.xml文件。设置以下属性:
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <failOnMissingWebXml>false</failOnMissingWebXml> <version.server.bom>4.0.0.GA</version.server.bom> <version.wildfly-jar.maven.plugin>6.1.1.Final</version.wildfly-jar.maven.plugin> </properties>设置以下依赖项:
<dependencies> <dependency> <groupId>jakarta.enterprise</groupId> <artifactId>jakarta.enterprise.cdi-api</artifactId> <version>2.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.spec.javax.ws.rs</groupId> <artifactId>jboss-jaxrs-api_2.1_spec</artifactId> <version>2.0.2.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> <version>1.5.0</version> <scope>provided</scope> </dependency> </dependencies>将以下构建配置设置为使用
mvn widlfy:deploy来部署应用程序:<build> <!-- Set the name of the archive --> <finalName>${project.artifactId}</finalName> <plugins> <!-- Allows to use mvn wildfly:deploy --> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> </plugin> </plugins> </build>
验证
在应用程序根目录中,输入以下命令:
$ mvn install您会看到类似如下的输出:
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.440 s [INFO] Finished at: 2021-12-27T14:45:12+05:30 [INFO] ------------------------------------------------------------------------
现在,您可以创建一个 OpenTelemetry 追踪应用程序。
10.7.2. 创建创建自定义范围的应用程序 复制链接链接已复制到粘贴板!
以下流程演示了如何创建可创建两个自定义 span 的应用程序,如下所示:
-
prepare-hello- 当应用中的方法getHello ()被调用时。 -
process-hello- 当值hello分配给一个新的String对象hello时。
此流程还演示了如何在 Jaeger 控制台中查看这些 span。该流程中的 & lt;application_root > 表示包含 pom.xml 文件的目录,其中包含应用程序的 Maven 配置。
先决条件
- 已安装 Docker。如需更多信息,请参阅 获取 Docker。
- 您已创建了一个 Maven 项目。如需更多信息,请参阅为 OpenTelemetry tracing 配置 Maven 项目。
-
您已配置了
opentelemetry子系统。如需更多信息,请参阅配置opentelemetry子系统。
流程
在 & lt;application_root > 中,创建一个用于存储 Java 文件的目录。
语法
$ mkdir -p src/main/java/com/example/opentelemetryExample
$ mkdir -p src/main/java/com/example/opentelemetry前往新目录。
语法
$ cd src/main/java/com/example/opentelemetryExample
$ cd src/main/java/com/example/opentelemetry创建包含以下内容的
JakartaRestApplication.java文件:此JakartaRestApplication类将应用声明为 Jakarta RESTful Web Services 应用。package com.example.opentelemetry; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/") public class JakartaRestApplication extends Application { }创建包含以下内容的
ExplicitlyTracedBean.java文件,其内容为 classExplicitlyTracedBean。此类通过注入Tracer类来创建自定义 span。package com.example.opentelemetry; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; @RequestScoped public class ExplicitlyTracedBean { @Inject private Tracer tracer;1 public String getHello() { Span prepareHelloSpan = tracer.spanBuilder("prepare-hello").startSpan();2 prepareHelloSpan.makeCurrent(); String hello = "hello"; Span processHelloSpan = tracer.spanBuilder("process-hello").startSpan();3 processHelloSpan.makeCurrent(); hello = hello.toUpperCase(); processHelloSpan.end(); prepareHelloSpan.end(); return hello; } }为
TracedResource.java类创建包含以下内容的TracedResource.java 文件。此文件注入ExplicitlyTracedBean类,并声明两个端点:traced和cdi-trace。package com.example.opentelemetry; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") @RequestScoped public class TracedResource { @Inject private ExplicitlyTracedBean tracedBean; @GET @Path("/traced") @Produces(MediaType.TEXT_PLAIN) public String hello() { return "hello"; } @GET @Path("/cdi-trace") @Produces(MediaType.TEXT_PLAIN) public String cdiHello() { return tracedBean.getHello(); } }导航到应用程序根目录。
语法
$ cd <path_to_application_root>/<application_root>Example
$ cd ~/applications/simple-tracing-example使用以下命令编译并部署应用程序:
$ mvn clean package wildfly:deploy启动 Jaeger 控制台。
$ docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -p 14250:14250 \ -p 9411:9411 \ jaegertracing/all-in-one:1.29-
在浏览器中,导航到
\localhost:8080/simple-tracing-example/hello/cdi-trace。 -
在一个浏览器中,打开位于
http://localhost:16686/search的 Jaeger 控制台。 - 在 Jaeger 控制台中,选择 JBoss EAP XP 并点 Find Traces。
- 单击 3 Spans。
Jaeger 控制台显示以下 trace:
|GET /hello/cdi-trace1 - | prepare-hello2 - | process-hello3
每当您访问 http://localhost:16686/search 的应用程序端点时,都会使用所有子范围创建一个新的 trace。