OCIの運用管理サービスにあるApplication Performace Monitoringは、Javaまたは.NETのアプリケーション等のサーバー側とクライアント側の両面で監視し、パフォーマンスに関する問題特定を効率化するサービスです。主な特徴は、以下のスライドをご覧ください。
仕組みとしては、アプリケーションからAPMのエンドポイントに対して、メトリックやスパンなどのテレメトリデータを随時アップロードするのですが、アプリケーションが動作するアーキテクチャに応じてエージェントかトレーサ、オープンソースの方式から選択することになります。
それぞれの設定や動作を理解するには、実際に試してみるのが手っ取り早いのですが、そのためにはアプリケーションが必要です。なので、今回は簡単なサンプル・アプリケーションを用意したので、これを用いながら、APMを使用するための設定手順を紹介していきます。
アプリケーションは、Spring Boot、Helidon、Node.jsでそれぞれ動作するように構成されており、Spring Bootには、APM Java Agent、HelidonにはAPM Java Tracer、Node.jsにはOpenTelemetryを用いてAPMにモニタリング情報がアップロードされます。
まずは、APMドメインを作成し、Spring BootのアプリケーションのデプロイとAPM Java Agentを設定するところを説明します。
APMドメインの作成
-
OCIメニューから監視及び管理 -> アプリケーション・パフォーマンス・モニタリング -> 管理 -> APMドメインの作成をする
-
APM Java Agentをダウンロードしておく
APM -> 管理 -> APMエージェントのダウンロードから、最新のAPM Java Agentをダウンロードする
アプリケーションのデプロイ & APM Java Agentのインストール
- コンピュート・インスタンスを作成。最小構成でOK
例えば、Oracle Linux 8、VM.Standard.E4 1core、パブリックIP有
#Firewall停止
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
#JDKのインストール
sudo dnf install -y java-17-openjdk-devel
java -version
#MySQLのインストール
sudo dnf install -y mysql-server
sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service
mysql --version
#MySQLにテストデータを作成
mysql -u root
create database springbootmysqldemo;
use springbootmysqldemo;
create table product(productname varchar(100) primary key, unitprice varchar(100), unit varchar(100));
insert into product values('Application Performance Monitoring Service - Synthetic Usage - Free', '¥0.00', '10 monitor runs per hour');
insert into product values('Application Performance Monitoring Service - Tracing Data - Free*', '¥0.00', '1,000 events per hour');
commit;
#サンプルアプリをダウンロードし解凍
wget https://github.com/western24/apmdemo/raw/main/springboot-mysql-demo.zip
unzip springboot-mysql-demo.zip
#APM Java Agentを/home/opcにコピー
#APM Java Agentをインストール
java -jar ./apm-java-agent-installer-xxxxxx.jar provision-agent -service-name=springboot-mysql-demo -destination=/home/opc -private-data-key=xxxxxxxxxxxxxxxxx -data-upload-endpoint=https://xxxxx.apm-agt.us-ashburn-1.oci.oraclecloud.com
#パッケージングしてSpring Bootを起動
cd springboot-mysql-demo
./mvnw package
java -javaagent:/home/opc/oracle-apm-agent/bootstrap/ApmAgent.jar -jar ./target/springboot.jar
-
ブラウザでアクセス(※VCNのセキュリティ・リストで8181をオープンしておく)
http://VMのPublic IP:8181
このAPM Java Agentの方法は、OMCの頃からある一番ベーシックな方法です。APサーバが対応していれば、既存アプリケーションのコード修正する必要はなく、エージェントのインストールとAPサーバの再起動という最小限の影響でAPMを使用することができます。
また、2023年8月時点でのAPM Java Agentが対応しているAPサーバは、Weblogic、Tomcat、Spring Boot、Jboss、Jetty、最近追加されたAPM .NETエージェントでは.NET Frameworkのアプリケーションも対応しています。
APM Java Agentは、サーバー側の情報取集が主な役割ですが、エンド・ユーザー側の情報収集には次のブラウザ・エージェントを使用します。
ブラウザ・エージェントの設定
ブラウザ・エージェントはアプリケーションにJava Scriptを埋め込んで、ユーザー操作やページビューにかかった時間をAPMに記録する機能です。ドキュメントに記載のあるJava Scriptのフォーマットに従って、記録したいHTMLに追記します。
ヘッダーやフッターのようにアプリケーションのWEBフォーマットに共通のHTMLがあれば記述は一か所のみですべてのページに反映させることも可能です。このサンプルアプリでも一か所の修正ですべてのページに反映するようになっています。
- springboot-mysql-demo/src/main/resources/static/js/browseragent.jsのファイルにブラウザ・エージェントのJavaScriptを追記する
#追加内容は以下
document.write('<script>\n');
document.write('window.apmrum = (window.apmrum || {});\n');
document.write("window.apmrum.serviceName='<APM Browser>';\n")
document.write("window.apmrum.webApplication='<Web App Name>';\n");
document.write("window.apmrum.ociDataUploadEndpoint='<データ・アップロード・エンドポイント>';\n");
document.write("window.apmrum.OracleAPMPublicDataKey='<auto_generated_public_datakey>';\n");
document.write('</script>\n');
document.write('<script async crossorigin="anonymous" src="<データ・アップロード・エンドポイント>/static/jslib/apmrum.min.js"></script>');
ex)実際の設定例
document.write('<script>\n');
document.write('window.apmrum = (window.apmrum || {});\n');
document.write("window.apmrum.serviceName='apmdemo';\n")
document.write("window.apmrum.webApplication='springboot-mysql-demo';\n");
document.write("window.apmrum.ociDataUploadEndpoint='https://xxxx.apm-agt.us-ashburn-1.oci.oraclecloud.com';\n");
document.write("window.apmrum.OracleAPMPublicDataKey='xxxxxx';\n");
document.write('</script>\n');
document.write('<script async crossorigin="anonymous" src="https://xxxx.apm-agt.us-ashburn-1.oci.oraclecloud.com/static/jslib/apmrum.min.js"></script>');
#再パッケージングしてSpring Bootを起動
./mvnw package
java -javaagent:/home/opc/oracle-apm-agent/bootstrap/ApmAgent.jar -jar ./target/springboot.jar
以上が、APM Java Agentとブラウザ・エージェントによるアプリケーションのパフォーマンス監視の設定の流れです。設定自体は、難しくないと思いますので、設定後にサンプル・アプリケーションの操作とそれに応じたトレース・エクスプローラの情報を見比べながら色々試してみるとAPMの見方は理解できるのではないかと思います。
次回は、Helidonのアプリケーションのデプロイ方法について紹介します。