はじめに
前回のブログ投稿で、Ansible を用いた AppDynamics Java / Machine Agent の自動インストール/インスツルメント方法を紹介しましたが、今回は 比較的新しいインストール方法である、Agent Installer(Zero Agent)について解説したいと思います。
Agent Installer(Zero Agent)対応アプリケーション実行環境
Agent Installer は以下のアプリケーション実行環境に対応します。
OS
・RHEL 7 / 8
・CentOS 7
・Ubuntu 18.04
・Fedora 31
・Debian 10
JVM(Java Virtual Machine)
・Open JDK 1.6+
・Oracle JDK 1.7+
・IBM JDK 1.6+
アプリケーション サーバ
・Apache Tomcat
・GlassFish
・JBoss WildFly
・Weblogic
・WebSphere
・AppDynamics コントローラは SaaS コントローラ 20.6+ である必要があります。
テスト環境
今回は以下のテスト環境を用いました。
- CentOS 7.9.2009
- AppDynamics SaaS Controller build 21.8.0-813
- アプリケーションサーバ: GlassFish 4.1
- OpenJDK 1.8.0.302
- Proxy サーバ: Squid 3.5.20
多くのお客様では HTTP proxy を経由して 各 Agent から AppDynamics コントローラへの接続を行っている場合が多いため、Agent Installer を用いて Java / Machine Agent をインストールするホストとは別のホスト上で Squid 3.5 を稼働させました。
事前準備
デフォルト設定では、AppDynamics コントローラUI の Home に Agent Installer タブが表示されません。⚙ – Administration – Roles で、新規もしくは既存 Role に Install Agents Permission を追加し、Agent Installer を利用するユーザにこのロールを割り当てます。
Install Agents 権限を付与した後、ブラウザの Reload ボタンをクリックしますと、 Home に次のように Agent Installer タブが表示されますので、これをクリックします。
1. SPECIFY APPLICATION TO DEPLOY TO
今回は新規にアプリケーションを監視しますので、1. SPECIFY APPLICATION TO DEPLOY TO で、+ New Application を選択、アプリケーション名を入力します。
2. DOWNLOAD AND RUN THE AGENT INSTALLER
インストーラ/エージェントのダウンロード
2. DOWNLOAD AND RUN THE AGENT INSTALLER では、Express Installation を選択します。
Copy and paste the command into your terminal or automated tools. の右端のアイコンをクリックしますと各エージェント/インストールスクリプトをダウンロードするためのコードスニペットがクリップボードにコピーされますので、GlassFish サーバ上でコマンドをペースト、実行します。
$ cd $(mktemp -d -t appd-zero-XXXXXXX) && curl https://download-files.appdynamics.com/download-file/zero-agent-bootstrap/21.7.0.287/appdynamics-zero-agent-bootstrap-21.7.0.287.sh -o zero-agent.sh && chmod +x zero-agent.sh && ./zero-agent.sh download sun-java -v 21.7.0.32930 -c fb6decc4c433ead62aafb4c7ea4c9ae0 && ./zero-agent.sh download ibm-java -v 21.7.0.32930 -c 604f9de7b90ba9e251dacaaba363470f && ./zero-agent.sh download machine -v 21.7.0.3160 -c 24cd76b6144c56c78063112f154b53bd && ./zero-agent.sh download zero -v 21.7.0.287 -c 7a463e3553b6e8357537c45b1c148f28
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12348 100 12348 0 0 53947 0 --:--:-- --:--:-- --:--:-- 54157
INFO: Downloading sun-java agent from https://download-files.appdynamics.com/download-file/sun-jvm/21.7.0.32930/AppServerAgent-21.7.0.32930.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.5M 100 21.5M 0 0 44.7M 0 --:--:-- --:--:-- --:--:-- 44.8M
INFO: Successfully downloaded AppServerAgent-21.7.0.32930.zip
INFO: Integrity check passed!
INFO: Downloading ibm-java agent from https://download-files.appdynamics.com/download-file/ibm-jvm/21.7.0.32930/AppServerAgent-ibm-21.7.0.32930.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.5M 100 21.5M 0 0 47.3M 0 --:--:-- --:--:-- --:--:-- 47.2M
INFO: Successfully downloaded AppServerAgent-ibm-21.7.0.32930.zip
INFO: Integrity check passed!
INFO: Downloading machine agent from https://download-files.appdynamics.com/download-file/machine-bundle/21.7.0.3160/machineagent-bundle-64bit-linux-21.7.0.3160.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 137M 100 137M 0 0 76.2M 0 0:00:01 0:00:01 --:--:-- 76.2M
INFO: Successfully downloaded machineagent-bundle-64bit-linux-21.7.0.3160.zip
INFO: Integrity check passed!
INFO: Downloading zero agent from https://download-files.appdynamics.com/download-file/zero-agent/21.7.0.287/appdynamics-zero-agent-21.7.0.287.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 25.3M 100 25.3M 0 0 52.9M 0 --:--:-- --:--:-- --:--:-- 52.8M
INFO: Successfully downloaded appdynamics-zero-agent-21.7.0.287.zip
INFO: Integrity check passed!
ダウンロードが正常に行われない場合は以下の環境変数(proxy 設定)を確認してください。
http_proxy=http://10.0.0.99:3128
https_proxy=http://10.0.0.99:3128
正常にダウンロードが行われた場合は /tmp 以下の一時ディレクトリに以下のファイルがダウンロードされます。
-rwxr-xr-x 1 goto appd 13K Aug 21 10:49 zero-agent.sh
-rw-r--r-- 1 goto appd 22M Aug 21 10:49 AppServerAgent-21.7.0.32930.zip
-rw-r--r-- 1 goto appd 22M Aug 21 10:49 AppServerAgent-ibm-21.7.0.32930.zip
-rw-r--r-- 1 goto appd 138M Aug 21 10:49 machineagent-bundle-64bit-linux-21.7.0.3160.zip
-rw-r--r-- 1 goto appd 26M Aug 21 10:49 appdynamics-zero-agent-21.7.0.287.zip
Zero Agent のインストール
さきほどのコードスニペットの下の Show Command をクリックしますと、Zero Agent をインストールするためのコードスニペットが表示されます。
インストールコマンドは通常以下のようなものになります。
sudo ./zero-agent.sh install --application 'GlassFish4' \
--account 'your-account-name' --access-key 'your-access-key' \
--service-url 'https://your-account-name.saas.appdynamics.com'
こちらも GlassFish サーバ上にコピー/ペースト、実行します。
$ sudo ./zero-agent.sh install --application 'GlassFish4' \
--account 'your-account-name' --access-key 'your-access-key' \
--service-url 'https://your-account-name.saas.appdynamics.com'
INFO: Extracting AppServerAgent-21.7.0.32930.zip...
INFO: Extracting AppServerAgent-ibm-21.7.0.32930.zip...
INFO: Extracting machineagent-bundle-64bit-linux-21.7.0.3160.zip...
INFO: Extracting appdynamics-zero-agent-21.7.0.287.zip...
INFO: Installing AppDynamics Zero Agent...
Staging path is "/tmp/appd-zero-2UFEmBh"
Installation path is "/opt/appdynamics/zeroagent"
No active installation found. Installation can proceed.
Installing Zero Agent
Directory "/opt/appdynamics/zeroagent" created
Directory "/opt/appdynamics/zeroagent/bin" created
Directory "/opt/appdynamics/zeroagent/configs" created
Directory "/opt/appdynamics/zeroagent/agents" created
Directory "/usr/local/lib" created
Directory "/usr/local/lib64" created
Directory "/opt/appdynamics/zeroagent/pids" created
Directory "/opt/appdynamics/zeroagent/logs" created
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/bin/zeroctl" -> "/opt/appdynamics/zeroagent/bin/zeroctl"
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/bin/zeroagent" -> "/opt/appdynamics/zeroagent/bin/zeroagent"
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/bin/zerowatchdog" -> "/opt/appdynamics/zeroagent/bin/zerowatchdog"
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/lib/libdecorator.so" -> "/usr/local/lib/libdecorator.so"
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/lib/libpreload.so" -> "/usr/local/lib/libpreload.so"
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/lib64/libdecorator.so" -> "/usr/local/lib64/libdecorator.so"
Copied "/tmp/appd-zero-2UFEmBh/zeroagent/lib64/libpreload.so" -> "/usr/local/lib64/libpreload.so"
Created symbolic link from "/usr/local/lib/zeroagent" to "/opt/appdynamics/zeroagent"
Created symbolic link from "/usr/local/lib64/zeroagent" to "/opt/appdynamics/zeroagent"
Applied permission "0777" to "/opt/appdynamics/zeroagent/pids"
Applied permission "0777" to "/opt/appdynamics/zeroagent/logs"
Applied permission "0755" to "/opt/appdynamics"
Configuring Zero Agent
Installing Java Agent
Directory "/opt/appdynamics/zeroagent/agents" created
Directory "/opt/appdynamics/zeroagent/agents/java" created
Copied "/tmp/appd-zero-2UFEmBh/javaagent" -> "/opt/appdynamics/zeroagent/agents/java/javaagent"
Skipped "/tmp/appd-zero-2UFEmBh/javaagent/ver21.7.0.32930" -> "/opt/appdynamics/zeroagent/agents/java/javaagent/ver21.7.0.32930"
Copied "/tmp/appd-zero-2UFEmBh/ibm-javaagent/ver21.7.0.32930/javaagent.jar" -> "/opt/appdynamics/zeroagent/agents/java/javaagent/ver21.7.0.32930/javaagent-ibm.jar"
Applied permission "0777" to "/opt/appdynamics/zeroagent/agents/java/javaagent/ver21.7.0.32930/conf"
Applied permission "0777" to "/opt/appdynamics/zeroagent/agents/java/javaagent/ver21.7.0.32930/logs"
Global preload library installed
Configuring Java Agent
Installing Machine Agent
Directory "/opt/appdynamics/zeroagent/agents" created
Directory "/opt/appdynamics/zeroagent/agents/machineagent" created
Copied "/tmp/appd-zero-2UFEmBh/machineagent" -> "/opt/appdynamics/zeroagent/agents/machineagent"
Configuring Machine Agent
Installing appdynamics-zero-agent as a systemd service
Creating appdynamics-zero-agent service file in systemd
Successfully created appdynamics-zero-agent service file in systemd
Enabling appdynamics-zero-agent as a systemd service
Reloading systemd daemon
Starting appdynamics-zero-agent service
Waiting for service to start...
Service successfully started
正常にインストールが完了した場合は上記のような実行結果となります。
Proxy 設定
この状態では、Java / Machine Agent から AppDynamics コントローラへ通信ができていない状態のため、proxy 設定を実施する必要があります。
sudo /opt/appdynamics/zeroagent/bin/zeroctl configure --proxy-url=http://proxy_host:3128
Proxy 設定は /opt/appdynamics/zeroagent/configs/zero-config.json に保存されますので、念のため確認を行います。
$ grep proxy /opt/appdynamics/zeroagent/configs/zero-config.json
"proxyConfig": {
"proxyHost": "proxy_host",
"proxyPort": 3128,
"proxySsl": false
Server Visibility 有効化
Zero Agent でインストールされる Machine Agent では、サーバの CPU、RAM、ディスク、ネットワーク、プロセス情報などを監視するための Server Visibility が有効になっていません。
/opt/appdynamics/zeroagent/agents/machineagent/conf/controller-info.xml を以下のように設定し、sim-enabled エレメントを true にします。
<?xml version="1.0" encoding="UTF-8"?>
<controller-info>
<controller-host>your-account-name.saas.appdynamics.com</controller-host>
<controller-port>443</controller-port>
<controller-ssl-enabled>true</controller-ssl-enabled>
<account-access-key>your-access-key</account-access-key>
<account-name>your-account-name</account-name>
<sim-enabled>true</sim-enabled>
<unique-host-id></unique-host-id>
</controller-info>
zeroctl コマンドを用い、Zero Agent を再起動します。
sudo /opt/appdynamics/zeroagent/bin/zeroctl stop
sudo /opt/appdynamics/zeroagent/bin/zeroctl start
GlassFish の再起動
Zero Agent による Java アプリケーションへのエージェントのインスツルメントには、GlassFish の再起動が必要となります。今回は ~sagoto/glassfish4 に GlassFish4 を展開していますので、以下のように asadmin コマンドにより再起動を行いました。
$ ./glassfish4/bin/asadmin stop-domain
Waiting for the domain to stop .
Command stop-domain executed successfully.
$ ./glassfish4/bin/asadmin start-domain
Waiting for domain1 to start ........................
Successfully started the domain : domain1
domain Location: /home/sagoto/glassfish4/glassfish/domains/domain1
Log File: /home/sagoto/glassfish4/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
Monitoring Settings の確認
Home – Monitoring Settings を確認しますと、正常に Zero Agent のインストール、GlassFish への Java Agent のインスツルメントが行われた場合、次のような表示となります。
今回は、~sagoto/glassfish4/glassfish/domains/domain1 でサンプルアプリケーションを稼働させていますが、Zero Agent により自動的に検知、インスツルメントできていることが確認できます。
トラフィック/負荷の生成
アプリケーションにトランザクションが発生していないと監視メトリック等が AppDynamics コントローラに送信されませんので、以下のようなシェルスクリプトを用いて 10 秒おきに GlassFish Hello サンプルアプリケーションにトラフィックを発生させます。
watch -n10 curl --noproxy localhost -s http://localhost:8080/hello/?username=AppDynamics
アプリケーション・フローマップ、Machine Agent ダッシュボードの確認
AppDynamics コントローラ上で アプリケーション・フローマップを確認します。
上図のようにアプリケーション・フローマップが表示されていれれば、正常に Java Agent がインスツルメントされていることが確認できます。
次に Servers ダッシュボードを確認します。
正常に各メトリックが取得できていることが確認できました。
まとめ
今回は Agent Installer(Zero Agent) を用いて GlassFish 4 アプリケーションに対して、AppDynamics Java / Machine Agent を自動インスツルメントしました。proxy 設定と、Server Visibility の有効化がやや煩雑と思われるかもしれませんが、対応している実行環境であれば、従来と比較し非常に簡単にエージェントのインストールを行うことが可能であることがおわかり頂けたかと存じます。