如何为Maven Jetty插件配置OpenTelemetry Java Agent
为Jetty Maven插件运行的Jersey项目接入OpenTelemetry Java Agent
你当前的项目是基于Swagger-UI的Jersey Servlet API,通过jetty-maven-plugin以WAR包形式运行,原插件配置如下:
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty-maven-plugin.version}</version> <configuration> <webApp> <war>${project.build.directory}/main-api.war</war> </webApp> <scan>1</scan> <contextHandlers> <contextHandler implementation="org.eclipse.jetty.server.handler.ContextHandler"> <contextPath>/swagger-ui</contextPath> <resourceBase>${project.build.directory}/${project.build.finalName}/swagger-ui </resourceBase> <handler implementation="org.eclipse.jetty.server.handler.ResourceHandler"/> </contextHandler> </contextHandlers> </configuration> </plugin>
可以通过以下两种方式将OpenTelemetry Java Agent接入运行进程:
方法一:命令行参数指定Agent
- 先下载对应版本的
opentelemetry-javaagent.jar(注意版本要和你的Java版本兼容,Java 8+可用最新稳定版) - 运行Jetty时,在命令行添加
-javaagent参数及OpenTelemetry配置:
mvn jetty:run -Djavaagent=/本地路径/opentelemetry-javaagent.jar -Dotel.service.name=你的服务名称 -Dotel.exporter.otlp.endpoint=http://你的采集服务地址:4317
otel.service.name:必填,用来标识你的服务otel.exporter.otlp.endpoint:指定OpenTelemetry Collector的地址,根据实际部署情况修改- 还可以添加其他配置参数,比如采样率、日志导出等,按需添加即可
方法二:在插件配置中内置JVM参数
直接修改jetty-maven-plugin的配置,在<configuration>节点内添加<jvmArgs>,把Agent路径和配置参数写进去:
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty-maven-plugin.version}</version> <configuration> <webApp> <war>${project.build.directory}/main-api.war</war> </webApp> <scan>1</scan> <!-- 新增JVM参数配置 --> <jvmArgs> -javaagent:/本地路径/opentelemetry-javaagent.jar -Dotel.service.name=你的服务名称 -Dotel.exporter.otlp.endpoint=http://你的采集服务地址:4317 </jvmArgs> <contextHandlers> <contextHandler implementation="org.eclipse.jetty.server.handler.ContextHandler"> <contextPath>/swagger-ui</contextPath> <resourceBase>${project.build.directory}/${project.build.finalName}/swagger-ui </resourceBase> <handler implementation="org.eclipse.jetty.server.handler.ResourceHandler"/> </contextHandler> </contextHandlers> </configuration> </plugin>
这样每次执行mvn jetty:run时,Jetty会自动加载OpenTelemetry Agent。
可选:用Maven依赖管理Agent
不想手动下载Agent的话,可以在项目的pom.xml中添加依赖:
<dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-javaagent</artifactId> <version>替换为最新稳定版</version> <scope>runtime</scope> </dependency>
然后把-javaagent的路径改成Maven本地仓库的路径,比如:
-javaagent:${settings.localRepository}/io/opentelemetry/opentelemetry-javaagent/版本号/opentelemetry-javaagent-版本号.jar
这样Maven会自动下载Agent到本地仓库,不用手动管理文件。
内容的提问来源于stack exchange,提问作者Rob Audenaerde
相关产品推荐
相关产品推荐

