--- title: OpenTelemetry Java Agentを使ってTomcat上のLegacyなServletアプリをTracingするメモ tags: ["OpenTelemetry", "Tracing", "Zipkin", "Tomcat"] categories: ["Observability", "OpenTelemetry"] date: 2024-11-14T02:48:26Z updated: 2025-03-07T08:58:45Z --- OpenTelemetry Java Agentを使ってTomcat上のレガシーなServletアプリをTracingするメモ。 ### Tracingバックエンドの起動 ここではTracingバックエンドとして[OTLP対応のZipkin](https://github.com/openzipkin-contrib/zipkin-otel)を使用します。 ``` docker run --name zipkin --rm -p 9411:9411 -e UI_ENABLED=true ghcr.io/openzipkin-contrib/zipkin-otel ``` http://localhost:9411 にアクセス。 image ### Tomcat 9のインストール ``` brew install tomcat@9 ``` 他の方法でTomcatをインストールする場合は、以下の`CATALINA_HOME`のパスを修正してください。 ### Otel Java Agentのインストール ```bash export CATALINA_HOME=/opt/homebrew/opt/tomcat@9/libexec wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar -P $CATALINA_HOME/bin ``` ```bash cat <<'EOF' > $CATALINA_HOME/bin/setenv.sh export CATALINA_OPTS="$CATALINA_OPTS -javaagent:$CATALINA_HOME/bin/opentelemetry-javaagent.jar" export OTEL_SERVICE_NAME=legacy-app export OTEL_TRACES_EXPORTER=otlp export OTEL_METRICS_EXPORTER=none export OTEL_LOGS_EXPORTER=none export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:9411 export OTEL_TRACES_SAMPLER=traceidratio export OTEL_TRACES_SAMPLER_ARG=1.0 export OTEL_EXPORTER_OTLP_COMPRESSION=gzip export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf export CATALINA_OPTS="$CATALINA_OPTS -Dotel.resource.disabled.keys=process.command_args,process.command_line,process.executable.path,process.runtime.name,process.runtime.version,process.pid,process.runtime.description,os.type,os.description,host.arch" EOF ``` ### レガシーアプリのダウンロードとデプロイ ``` wget https://archive.apache.org/dist/struts/1.3.10/struts-1.3.10-apps.zip unzip struts-1.3.10-apps.zip cp struts-1.3.10/apps/struts-examples-1.3.10.war $CATALINA_HOME/webapps/ ``` ### Tomcatの起動 ``` $CATALINA_HOME/bin/startup.sh ``` ログを確認。次のようなログが出ていればOK。 ``` $ cat $CATALINA_HOME/logs/catalina.out NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended [otel.javaagent 2024-11-14 11:33:43:373 +0900] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 2.10.0 14-Nov-2024 11:33:44.222 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Serverのバージョン名: Apache Tomcat/9.0.97 14-Nov-2024 11:33:44.225 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server ビルド: Nov 6 2024 19:55:19 UTC 14-Nov-2024 11:33:44.225 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log サーバーのバージョン番号: 9.0.97.0 ... 14-Nov-2024 11:33:44.390 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します 14-Nov-2024 11:33:44.390 情報 [main] org.apache.catalina.core.StandardEngine.startInternal サーブレットエンジンの起動:[Apache Tomcat/9.0.97] 14-Nov-2024 11:33:44.400 情報 [main] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/opt/homebrew/Cellar/tomcat@9/9.0.97/libexec/webapps/struts-examples-1.3.10.war] を配備します 14-Nov-2024 11:33:44.597 情報 [main] org.apache.jasper.servlet.TldScanner.scanJars 少なくとも1つのJARでTLDをスキャンしましたが、TLDが含まれていませんでした。スキャンしたもののTLDが見つからなかったJARの完全なリストについては、このロガーのデバッグログを有効にしてください。スキャン中に不要なJARをスキップすると、起動時間とJSPのコンパイル時間が短縮されます。 14-Nov-2024 11:33:44.628 情報 [main] org.apache.struts.action.ActionServlet.initChain Loading chain catalog from jar:file:/opt/homebrew/Cellar/tomcat@9/9.0.97/libexec/webapps/struts-examples-1.3.10/WEB-INF/lib/struts-core-1.3.10.jar!/org/apache/struts/chain/chain-config.xml 14-Nov-2024 11:33:44.708 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/org/apache/struts/validator/validator-rules.xml' 14-Nov-2024 11:33:44.709 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/WEB-INF/upload/validation.xml' 14-Nov-2024 11:33:44.742 警告 [main] org.apache.struts.config.impl.ModuleConfigImpl.addFormBeanConfig Overriding ActionForm of name localeForm 14-Nov-2024 11:33:44.744 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/org/apache/struts/validator/validator-rules-compressed.xml' 14-Nov-2024 11:33:44.744 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/WEB-INF/validator/validation.xml' 14-Nov-2024 11:33:44.744 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/WEB-INF/validator/validation-bundles.xml' 14-Nov-2024 11:33:44.744 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/WEB-INF/validator/validation-i18nVariables.xml' 14-Nov-2024 11:33:44.744 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/WEB-INF/validator/validation-type.xml' 14-Nov-2024 11:33:44.744 情報 [main] org.apache.struts.validator.ValidatorPlugIn.initResources Loading validation rules file from '/WEB-INF/validator/validation-validwhen.xml' 14-Nov-2024 11:33:44.765 情報 [main] org.apache.catalina.startup.HostConfig.deployWAR Web アプリケーションアーカイブ [/opt/homebrew/Cellar/tomcat@9/9.0.97/libexec/webapps/struts-examples-1.3.10.war] の配備は [365] ミリ秒で完了しました ... 14-Nov-2024 11:33:44.869 情報 [main] org.apache.coyote.AbstractProtocol.start プロトコルハンドラー ["http-nio-8080"] を開始しました。 14-Nov-2024 11:33:44.882 情報 [main] org.apache.catalina.startup.Catalina.start サーバーの起動 [516] ミリ秒 ``` http://localhost:8080/struts-examples-1.3.10 にアクセス。 image ### Traceの確認 Zipkinで"Run Query"ボタンをクリック。Traceが見える。 image image ### Tomcatの停止 ``` $CATALINA_HOME/bin/shutdown.sh ```