さくっとJAVAのWEBアプリを作成してOMC APMを試す

Oracle Management CloudのApplication Performance Monitoringをちょっと試してみたいと思っても、実際にWEBアプリケーションの動作する環境を準備しなければいけないのでなかなか面倒です。
ここではJAVAのWEBアプリケーションと必要な環境の構築をDockerを使い、誰でも簡単にAPMを試せる環境を極力簡単に構築する方法をご紹介します。

## 作成するWebアプリケーション
MySQLにJDBCアクセスするダミーのWEBサンプルアプリケーション。レスポンスが遅くなるような仕掛けあり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/426acf5b-4fa3-be0a-bd87-0115eca345ba.png)

## Dockerでの構築イメージ
ここではOracle CloudのAlways FreeにDockerをインストールして、ApacheとMySQLのコンテナを起動します。そしてサンプルのWEBアプリケーションをOMCのAPMで監視するという構成を作成します。OCIのLinuxのVMインスタンスであれば、手順通りのCopy&Pasteで実施できるようにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/5de43401-7fea-7374-a850-83cfbdc55106.png)


##Always FreeのVMインスタンスを用意
-  VMインスタンスはインターネットへHTTPSアクセスができることが必須
-  アクセスはアウトバンドのみ(Cloud Agent --> OMC) インバウンドは発生しない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/81e117ab-cadc-3843-0e35-1e0af8300f72.png)

```
1. Docker&Docker Composeのインストール
$ sudo yum install docker-engine
$ sudo gpasswd -a $USER docker
$ docker -v
Docker version 19.03.1-ol, build ead9442
$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
※ここで今接続しているターミナルを終了して、もう一度新しくターミナルを開き直す
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service

2.Webアプリのソースをダウンロード＆解凍
$ pwd
/home/opc
$ wget https://github.com/westan24/omcapp/archive/master.zip
$ unzip master.zip
$ cd omcapp-master
$ unzip omcapp.zip
$ ls
apmdemo2.war        Dockerfile   my.cnf      person_db_mysql.sql
docker-compose.yml  initial.sql  omcapp.zip  README.md

3.Docker MySQLに必要なフォルダの作成
$ sudo rm -rf ./db
$ sudo mkdir ./db
$ sudo mkdir ./db/mysql_data
$ sudo mkdir ./db/mysql_init/
$ sudo cp initial.sql db/mysql_init/
$ sudo cp person_db_mysql.sql db/mysql_init/

```
##最新のAPMエージェントをOMCからダウンロードする 
- OMCのコンソールからエージェントをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/a7e95d9e-db93-baf8-85a4-240108bf8b47.png)

-  右上のアイコンのエージェントのダウンロードをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/59d06db7-fe6a-d59c-b7de-924591f9e7e7.png)

- エージェントタイプをAPMエージェントを選択し、APM JAVA Agentをクリックしてダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/b55e9c11-be3d-7d1a-fd14-ae39aadaeff9.png)

-  右上のアイコンの登録キーの管理をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/ae45d4d1-a08d-bb0d-fbc1-c0bf420b14ce.png)

-  好きな名前を入力し、新規キーの作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/ac007196-bc5b-e272-39c0-d8cf2ab02495.png)

-  生成されたキーの値をダウンロードしておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/53433bf7-9188-1b86-ae10-b96e227df559.png)

## Dockerコンテナの作成及び起動
```
ダウンロードした1.4x_APM_226.zipとregistrationKey.txtの２つのファイルを/home/opc/omcapp-masterにコピーする
$ ls
1.46_APM_226.zip    Dockerfile   omcapp.zip           registrationKey.txt
apmdemo2.war        initial.sql  person_db_mysql.sql
docker-compose.yml  my.cnf       README.md

※APMエージェント名をリネーム (APMエージェント名はバージョンごとにインクリメントされるので)
$ mv 1.46_APM_226.zip 1.45_APM_226.zip

$ docker-compose up -d
～色々構築中メッセージが流れる～
Creating mysql ... done
Creating tomcat ... done

$ docker-compose ps
 Name              Command             State                 Ports
--------------------------------------------------------------------------------
mysql    docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
tomcat   catalina.sh run               Up      0.0.0.0:8080->8080/tcp

※両方のコンテナがUPされていればOK
```
- ブラウザで以下のアドレスにアクセス
    - http://computeのPublicIP:8080/apmdemo2/menu
    - アクセスできない場合は、8080がOCIのセキュリティリストでオープンしてるか確認

- サンプルのWebアプリケーション
このWebアプリは途中エラーが発生することもあります。あまり細かいことは気にせずに・・・。
(Log Analyticsのログ分析とかで使えるようにしているので)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/221d0107-4762-74ce-e6e1-ab1d17608fbe.png)

## 実際にAPMでWEBアプリケーションのパフォーマンスを見る
- APMのホーム画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/ffff825b-f77e-ab4c-7efc-63b1be49688f.png)

- サーバーリクエスト内部の詳細ダイアグラム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/0162bc02-d380-a104-8ba2-f8d38065a149.png)

- データベースがJDBC接続の場合はSQLクエリーごとの実行状況が見れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/9c488360-681e-432e-8bda-a88da9e92017.png)

- 各インスタンスごとの実行履歴 (10秒かかっているアクセスが表示されている)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/01eeaade-dbed-b2a1-d35a-90eef9e07cbd.png)

- ユーザのブラウザ操作履歴の情報を見るに、エンドユーザー・モニタリングの有効化が必要です
    - 設定方法は、OMC APM Agentのインストール - .NET編 -を参照して下さい
    - https://qiita.com/western24/items/855cee9d2c0a93b8cf79
    
- レスポンスが10秒遅延した場合のユーザのブラウザ操作履歴
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/c830f9c6-ff8f-9fd2-08af-de3cebbcd891.png)
- アクセスの経路とページ表示まで10秒かかったことが分かる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/330a134b-2ec0-cd8d-31c8-7865f8638b0b.png)

いかがだったでしょうか？
OMCのInfrastructure MonitoringでDockerの監視やLog AnalyticsでTomcatとMySQLのログを分析するなどの動作検証にもそのまま使えるかと思います。Node.jsのバージョンもまたの機会にご紹介したいと思います。

Oracle Management Cloud関連の情報は[こちら](https://qiita.com/western24/items/1e44bfcaa77f3251a263)