OSS APM pinpoint を試してみる

JavaのWebAPをトレースするため、OSSのAPM [pinpoint](https://github.com/naver/pinpoint)の[quickstart](http://naver.github.io/pinpoint/1.8.0/quickstart.html)を試してみる。
サービスマップや、タイムライン、APサーバのリソース状況などを可視化できる。

下記によると、コードを変更せずに、AP状態を可視化することが可能とのこと。
https://github.com/naver/pinpoint/wiki/Technical-Overview-Of-Pinpoint#bytecode-instrumentation-not-requiring-code-modifications




##実行環境
OS：CentOS7.5(VirtualBox + Vagrantで作成。ホストOSはWindows10)
pinpoint：ver.1.8.0

完成イメージは、下記が、ゲストOS内で稼働している状態。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/294476/163f7081-5323-01c0-d43f-c78544005691.png)
※出展：http://naver.github.io/pinpoint/1.8.0/overview.html

##手順
※1～4 は、ゲストOSの操作。0、5は、ホストOSでの操作。

###0.ゲストOSの準備

####0.1 VirtualBox、Vagrant のインストール
Vagrant、VirtualBoxのWindows版を、下記からダウンロードしてインストールする。
※インストーラのデフォルト設定で良い。

Vagrant
https://www.vagrantup.com/downloads.html

VirtualBox
https://www.virtualbox.org/wiki/Downloads
2つともインストールしたら、OSを再起動する。再起動後、コマンドプロンプトで、vagrantが実行できることを確認する。

<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/74cf3f26-41e7-9597-870b-0f261242fcc4.png" width=30%>


####0.2 ゲストOS の起動

#####0.2.1 Vagrantファイルの作成
ホストOSで、適当なディレクトリを作って、コマンドプロンプトで作成したディレクトリで、下記を実行する。
> vagrant init bento/centos-7.5

#####0.2.2 Vagrantファイルの編集
実行後に作成されたVagrantfile の、IP設定と、リソースサイズの設定を変更する。

●IP設定
>  # Create a private network, which allows host-only access to the machine
>  # using a specific IP.
>  config.vm.network "private_network", ip: "192.168.33.10"

●リソース設定
>  config.vm.provider "virtualbox" do |vb|
>  #   # Display the VirtualBox GUI when booting the machine
>  #   vb.gui = true
>  #
>  #   # Customize the amount of memory on the VM:
>  #  vb.memory = "2048"
>  &ensp;&ensp;vb.customize ["modifyvm", :id, "--memory", "2048", "--cpus", "2", "--ioapic", "on"]
>  end

#####0.2.3 ゲストOS起動
下記コマンドで、ゲストOSを起動する。
> vagrant up

#####0.2.3 ゲストOSにSSH
ゲストOS起動後、下記コマンドで、ゲストOSにSSHする。
> vagrant ssh


以降は、0.2.4 でSSHしたゲストOS内の操作。

###1.Javaインストール
jdk6,7,8,9 をインストールして、環境変数を設定する。

####1.1 jdk6,7,8をインストール
> sudo yum install openjdk-1.6.0-devel
> sudo yum install openjdk-1.7.0-devel
> sudo yum install openjdk-1.8.0-devel

####1.2 jdk9をインストール
※手順は、[こちら](https://weblabo.oscasierra.net/installing-openjdk9-on-centos7/)を参考に実施。

> wget https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_linux-x64_bin.tar.gz
> tar xzvf openjdk-9.0.4_linux-x64_bin.tar.gz
> sudo mv jdk-9.0.4 /opt/
> sudo alternatives --install /usr/bin/java java /opt/jdk-9.0.4/bin/java
> sudo alternatives --install /usr/bin/jar jar /opt/jdk-9.0.4/bin/jar 1
> sudo alternatives --install /usr/bin/javac javac /opt/jdk-9.0.4/bin/javac 1

####1.3 環境変数設定
~/.bashrc に下記を追加。

> JAVA_6_HOME=/etc/alternatives/java_sdk_1.6.0
> JAVA_7_HOME=/etc/alternatives/java_sdk_1.7.0
> JAVA_8_HOME=/etc/alternatives/java_sdk_1.8.0
> JAVA_9_HOME=/opt/jdk-9
> JAVA_HOME=$JAVA_8_HOME

###2. pinpointインストール
[これ](https://github.com/naver/pinpoint/archive/master.zip)をダウンロードして、展開して、下記を実行。
※インストールは、かなり時間がかかる。
※ホームディレクトリに展開した前提で記載。
> cd ~/pinpoint-master
> ./mvnw install -DskipTests=true

###3. HBASEインストール、初期化
> cd ~/pinpoint-master/quickstart/bin
> ./start-hbase.sh
> ./init-hbase.sh


###4. pinpointのデーモンを起動する
####4.1 Collector 起動
> cd ~/pinpoint-master/quickstart/bin
> ./start-collector.sh

<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/c03f0a4a-ef1e-5b19-6404-f321662f04f4.png" width=30%>


####4.2 TestApp 起動
> cd ~/pinpoint-master/quickstart/bin
> ./start-testapp.sh

<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/dcf4c609-9798-ea1f-5434-bad3719e7068.png" width=30%>

####4.3 Web UI 起動
> cd ~/pinpoint-master/quickstart/bin
> ./start-web.sh
※もし、タイムアウトで起動しない場合は、init-hbase.sh を実行すると、起動する場合がある。

<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/29321352-a491-6ce1-9e53-3c26253f3454.png" width=30%>
以降は、ホストOSのブラウザで確認する。

###5. pinpoint web でのステータス確認

####5.1 テスト用 Web AP 実行
http://192.168.33.10:28080/ で、テストAPメニューにアクセスし、適当なAPを実行する。

<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/c2ae8625-5b9a-e65d-4aa8-0b56decaf3e9.png" width=50%>

####5.2 pinpoint web ステータス確認

http://192.168.33.10:28081/ で、pinpoint webのコンソール画面にアクセスすると、5.1 のAP実行状況が確認できる。

※webコンソールのデモが、下記に動画が掲載されている。
https://naver.github.io/pinpoint/

#####TEST APP のコンソールトップ、サービスマップ
<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/e31abbda-39c8-625d-3bd1-6dc36af0249c.png" width=50%>

#####APサーバのリソース状況
<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/3a2a4bbd-3797-411c-b0ba-931c1c7968ba.png" width=50%>


#####AP実行のトレース
<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/a02e6598-d21d-d084-621d-78b5461624de.png" width=50%>

<img src="https://qiita-image-store.s3.amazonaws.com/0/294476/495655b4-99ad-dd3d-2fa5-20aa4fc54530.png" width=50%>


同種のツール、サービスとしては、Zipkin、jaeger、AWS X-Ray 等がある。

##参考情報
https://naver.github.io/pinpoint/
http://naver.github.io/pinpoint/1.8.0/quickstart.html