Azure App Service上で動かすTomcatにElastic APMを設定する機会がありましたので、注意点など含めて紹介しようと思います。
Java+TomcatでElastic APMを使う方法
公式ドキュメントはこちら
https://www.elastic.co/guide/en/apm/agent/java/current/setup.html
手順は変わりませんがApp Serviceで設定する上で少し注意する点があります。
App Serviceのための設定
必要なもの
APM AgentとWARファイルだけです。
APM Agentはこちらからダウンロードできます。
https://search.maven.org/search?q=g:co.elastic.apm%20AND%20a:elastic-apm-agent
WARファイルはTomcatのサンプルファイルを使用します。
https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
App Service作成
ここはElastic向けのものはありませんので詳細は省きます。
こんな感じで作成すればよいでしょう。
環境変数CATALINA_OPTS設定
設定情報
以下を設定する必要があります。
- javaagent
- Elastic Java APM Agentへのパス
-
/home/site/libs
で固定されています
- elastic.apm.server_urls
- APMデータの送付先。Elastic APM Agentがデータを送信する先は、Elastic Cloudに自動的に建てられているElastic Agent(APM Agentとは別)です。
- elastic.apm.secret_token
- アクセストークン
- elastic.apm.service_name
- Elastic APMのUIに表示する文字列
これらの設定は以下から確認できます。
Fleet -> Agent Policies -> Elastic Cloud Agent Policies -> Elastic APM -> APM Agents -> Java
server_url
,secret_token
の変更方法についてはこちらの記事に記載しております。
https://qiita.com/takeo-furukubo/items/1b2d7825927a8defe147#elastic-cloud%E7%94%A8%E3%81%AE%E8%A8%AD%E5%AE%9A
設定方法
実際にApp Serviceに設定する際には、設定->構成->新しいアプリケーション設定で設定を行います。
(実際には<address>と<token>にはそれぞれの環境の文字列が入っています)
CATALINA_OPTS
-javaagent:/home/site/libs/elastic-apm-agent-1.33.0.jar -Delastic.apm.service_name=tomcat-test -Delastic.apm.server_urls=https://<address>:443 -Delastic.apm.secret_token=<token>
elastic.apm.service_name
には識別しやすい文字列を入れておきましょう(今回であればtomcat-test
)
App ServiceへのDeploy方法
Tomcatを使用する場合はこちらのドキュメントの方法で行います。
https://docs.microsoft.com/ja-jp/azure/app-service/deploy-zip?tabs=cli#deploy-warjarear-packages
ローカル環境にはAzure CLIをインストールしておきます。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli
WARファイルのDeploy
az webapp deploy --resource-group <group name> --name <app name> --src-path sample.war --type war
/home/site/wwwroot
にapp.war
という名前で展開されます。
APM Agent(jar)ファイルのDeploy
az webapp deploy --resource-group <group name> --name <app name> --src-path elastic-apm-agent-1.33.0.jar --type lib --target-path elastic-apm-agent-1.33.0.jar
ドキュメントにはtarget-pathの記載が有りませんが、記載しないと
An error occured during deployment. Status Code: 400, Details: Path must be defined for type='Lib'
というエラーになります。
target pathと言いながら/home/site/wwwroot
とか書くとうまくいきません。
このコマンドでは/home/site/libs
に--target-path
で指定した名前で配置されます。ですので上記のようにそのままjarファイル名を記述しています。
確認
サイトにアクセス
App Serviceの概要へ戻りURLの横にあるリンクをクリックしましょう。
https://<app name>.azurewebsites.net
となっているはずです。
このように表示されればOKです。
Elastic APMでの確認
Elastic CloudのKibanaにアクセスしてObservability -> APMをクリックします。
以下のようにName部分にelastic.apm.service_name
で設定した値(今回だとtomcat-test
)が表示されていれば成功です。
まとめ
Elastic APMは様々な環境で簡単にAPMデータを取得することが可能です。ぜひお試しください。
Elastic Cloud 無料トライアル
こちらからElastic Cloudの14日間無料トライアルを是非お試しください
Elastic Cloud 無料トライアル
手順は下記リンクをご参照ください
Elastic Cloud について 〜実際にデプロイメントを作ってみよう〜