はじめに
今回は IaC(Infrastructure as Code) ツールとして広く利用されている Ansible を用い,シスコのオブザーバビリティ(可観測性)ソリューション,AppDynamics の Java / Machine Agent を自動的にインスツルメントしてみます。
実行環境
今回は以下の実行環境を用いました。
- CentOS 7.9.2009
- Ansible 2.9.23
- アプリケーションサーバ: Tomcat 7.0.76
- AppDynamics Java Agent 21.6.1.32843 (zip)
- AppDynamics Machine Agent 21.6.0.3155 (RPM)
最小構成の CentOS 7.9 から Ansible を用い自動的に AppDynamics エージェントをダウンロード,Tomcat 7 アプリケーションをインスツルメント,さらに Machine Agent(Server Visibility) を RPM パッケージからインスツルメントします。
事前準備
Ansible Playbook を実行する前に以下のコマンドを実行し,Ansible を実行するための環境を整えます。
sudo yum -y install git
git clone https://github.com/appdynamics-japan/ansible-appd-java-machine-agent.git
sudo yum -y install epel-release
sudo yum -y install ansible
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
Ansible Playbook の編集
playbook.yml.sample をコピーし,playbook.yml を利用している AppDynamics コントローラのアカウント情報にあわせ編集します。
なお,AppDynamics コントローラの Access Key は AppDynamics コントローラ UI 上で,画面右上 ⚙ アイコン – License – Account から確認できます。
cp playbook.yml.sample playbook.yml
vi playbook.yml
Ansible Playbook の実行
以下のコマンドにより,localhost に対して Ansible Playbook を実行します。
ansible-playbook -i hosts-inventory playbook.yml
すべてのタスクが正常に実行されれば,以下のようなメッセージが表示されます。私の実行環境では 2 分ほどですべてのタスクの実行が完了しました。
PLAY RECAP ****************************************************************************************
127.0.0.1 : ok=43 changed=20 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
トラフィックの生成
アプリケーションにトランザクションが発生していないと監視メトリック等が AppDynamics コントローラに送信されませんので,以下のようなシェルスクリプトを用いて 5 秒おきに Tomcat Sample アプリケーションにトラフィックを発生させます。
#!/bin/sh
# generate-load.sh
while true
do
curl -s http://localhost:8080/sample/hello
curl -s http://localhost:8080/sample/hello.jsp
date
sleep 5
done
アプリケーション・フローマップ, Machine Agent ダッシュボードの確認
AppDynamics コントローラ上で アプリケーションフローマップを確認します。
上図のようにアプリケーション・フローマップが表示されていれれば,正常に Java Agent がインスツルメントされていることが確認できます。
次に Machine Agent ダッシュボードを確認します。
正常に各メトリックが取得できていることが確認できました。
まとめ
今回は IaC ツール Ansible を用いて Tomcat 7 アプリケーションに対して,AppDynamics Java / Machine Agent を自動インスツルメントしました。エージェント・パッケージのダウンロードに時間がかからなければ(インターネット接続が十分高速であれば),Ansible Playbook の実行自体は数分で完了するかと存じます。
コンテナではなく,VM 上でアプリケーションを稼働させている場合に,AppDynamics エージェントのインスツルメントを自動で行う際に参考にして頂ければ幸いです(なお,今回用いた Ansible Playbook は私が個人的に作成したものです)。