はじめに
突然ですが、せっかくAPM製品のInstanaを導入してみたけど、アプリケーションの依存関係がうまく可視化されない、なんてことはないでしょうか?
監視対象サーバにAgentをインストールし、テクノロジーを監視するための設定もした。けれども、「インフラやミドルウェアの情報は問題なく取れているけど、アプリの情報は断片的にしか取得できていない」「期待する内容や構成が依存関係に表示されない」など、上手くいかないケースがまれにあるかと思います。
その場合は、環境変数でサービス名を定義してあげると上手くいくことがあります。Instanaにサービスの名前を教えて、特定しやすくするイメージです。
この記事では、その具体的な手順について、ご説明いたします。
環境
今回使用した環境の構成情報は以下となります。
- インフラストラクチャ
- IBM Cloud VSI (Classic)
- OS:RHEL8
- CPU:8コア
- メモリ:32GB
- ディスク:1TB
- アプリケーション
- Apache HTTP Server
- バージョン:2.4.6
- 導入方法:Apacheのソースファイルをダウンロードしコンパイルしてインストール
- ポート番号
- インスタンス1:81
- インスタンス2:82
- インスタンス3:83
マルチインスタンスのApache構築手順や設定方法は本記事では省略しますが、以下のサイトを参考にしています。
Instanaでの可視化
Apacheが1インスタンスの場合の見え方
上記の記事を参考に、まずはApacheを1インスタンス構築してみました。次にInstana Agentを導入し、Instanaのダッシュボード上でどのように見えるか確認します。
今回は、以下形式にてInstana Agentを導入しています。
- 導入方法:ワンライナー(curlコマンドでInstana Agentが格納されているリポジトリドメインにインターネット経由でアクセスし、パッケージをダウンロードおよびサーバへインストール)
- エージェントタイプ:動的(dynamic)
- エージェントのRuntime:Azul Zulu 11 / 対話式
ホストレベルで以下画像のように表示されます。ホストの各種構成情報やリソース状況の他、Apacheインスタンスが検知されていることが確認できます。
ちなみに、Instanaでは親プロセスを監視するので、今回はpid 54164のhttpdプロセスがInstanaのダッシュボード上に表示されています。
(以降、設定変更に伴うApacheの再起動により、Instanaダッシュボード上のpidが変更されて表示されておりますが、その点ご承知おき下さい)
[root@itz-550006dtk6-b17y conf]# ps -aufx | grep httpd
root 54732 0.0 0.0 222016 1264 pts/0 S+ 20:29 0:00 \_ grep --color=auto httpd
root 54167 0.0 0.0 80184 4296 ? Ss 20:17 0:00 /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 54168 0.0 0.0 2091880 11388 ? Sl 20:17 0:00 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 54169 0.0 0.0 2091880 11512 ? Sl 20:17 0:00 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 54170 0.0 0.0 2091880 11412 ? Sl 20:17 0:00 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
[root@itz-550006dtk6-b17y conf]#
Apacheをモニタリングする場合、追加で以下の設定を行うことで、より詳細なメトリクスやトレース情報を取得することができます。
基本的には、メトリクス取得にはApache側のhttpd.confの設定変更、トレース取得にはInstana側のconfiguration.yamlの設定変更が必要となります。
メトリクスは以下のように可視化されます。httpd.confの編集に伴い、Apacheをリブートしたため、pidが変わっていますが、Apacheの各種メトリクスが期待通りに表示されています。
ここまで、サーバレベル、ミドルウェアレベルでどのような情報が可視化されるかを簡単に見てきました。
続いては、アプリケーションレベルではどのように可視化されるか見ていきたいと思います。
コマンドプロンプトで、curlコマンドなどでApacheにリクエストを送ると、Instanaがトレースを行い、サマリータブではゴールデンシグナルの情報が中心に表示されています。
隣の依存関係タブを押下すると、Apacheのサービスが1つ起動し、トレースされていることが分かります。
(今回はアプリケーション・パースペクティブ(≒絞り込み結果を保存する機能)を作成し、特定IPのホスト上で稼働するアプリケーションがまとまって表示されるように事前に設定しています)
Apacheが複数インスタンスある場合の見え方
Apacheインスタンスが増えるとどのように見えてくるのでしょうか。
今回は既存インスタンスに加え、2つのApacheインスタンスを追加し、3インスタンスの状態でどのように可視化されるかを確認してみます。
期待値としては、3つ全てが依存関係図に表示されることです。
繰り返しとなりますが、前述の手順にて、Apacheを2インスタンス分構築します。
マルチインスタンス稼働に必要な設定とInstanaでのモニタリングに必要な設定をそれぞれ行い、起動してみました。
root 146907 0.0 0.0 222016 1084 pts/0 S+ 18:56 0:00 \_ grep --color=auto httpd
root 55553 0.0 0.0 82280 4328 ? Ss 1月16 0:01 /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 55554 0.0 0.0 2191588 21176 ? Sl 1月16 0:29 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 55555 0.0 0.0 2191588 21348 ? Sl 1月16 0:34 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 55556 0.0 0.0 2191588 21280 ? Sl 1月16 0:31 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
apache 137026 0.0 0.0 2191588 21180 ? Sl 14:58 0:05 \_ /opt/httpd1/bin/httpd -f /opt/httpd1/conf/httpd.conf -k start
root 146524 0.0 0.0 80184 4112 ? Ss 18:53 0:00 /opt/httpd2/bin/httpd -f /opt/httpd2/conf/httpd.conf -k start
apache 146525 0.0 0.0 2091880 11292 ? Sl 18:53 0:00 \_ /opt/httpd2/bin/httpd -f /opt/httpd2/conf/httpd.conf -k start
apache 146526 0.0 0.0 2091880 11452 ? Sl 18:53 0:00 \_ /opt/httpd2/bin/httpd -f /opt/httpd2/conf/httpd.conf -k start
apache 146527 0.0 0.0 2091880 11292 ? Sl 18:53 0:00 \_ /opt/httpd2/bin/httpd -f /opt/httpd2/conf/httpd.conf -k start
root 146670 0.0 0.0 80184 4112 ? Ss 18:53 0:00 /opt/httpd3/bin/httpd -f /opt/httpd3/conf/httpd.conf -k start
apache 146671 0.0 0.0 2091880 11292 ? Sl 18:53 0:00 \_ /opt/httpd3/bin/httpd -f /opt/httpd3/conf/httpd.conf -k start
apache 146672 0.0 0.0 2091880 11292 ? Sl 18:53 0:00 \_ /opt/httpd3/bin/httpd -f /opt/httpd3/conf/httpd.conf -k start
apache 146673 0.0 0.0 2091880 11320 ? Sl 18:53 0:00 \_ /opt/httpd3/bin/httpd -f /opt/httpd3/conf/httpd.conf -k start
[root@itz-550006dtk6-b17y /]#
Instanaのダッシュボード上でも、きちんと3つのインスタンスが検知されていることが分かります。
また、追加した2つのApacheインスタンスのメトリクスも問題なく取得できています。
次に、トレースが取れているかを確認したいと思います。curlコマンドでアクセスし、HTTPリクエストを発生させます。今回は、各インスタンスにて1回、合計3回のリクエストを流しました。しかし、1インスタンス分のデータしか取れていません。
環境変数でサービス名を定義する
うまく依存関係が可視化されない場合は、Apacheのサービスファイルに環境変数を設定し、Instanaに対してサービス名を明示してあげると上手く表示されるようになります。
例えばインスタンス1では、以下のように[Service]のセクションに一文追加します。InstanaのUI上でunspecifiedと表示されていたサービス名も併せて変更されます。この手順をインスタンス2-3でも実施します。
Environment="INSTANA_SERVICE_NAME=Apache1"
その後、デーモンをリロードし、念の為環境変数が反映されているかを確認します。
以下の出力が返ってきたので、問題なさそうです。
Environment=INSTANA_SERVICE_NAME=Apache1
[root@itz-550006dtk6-b17y system]#
各インスタンスを起動した状態で、再びCurlコマンドでApacheにアクセスします。一旦Apacheインスタンス1だけ立ち上げて、各種設定が上手くいっているか確認します。リクエストを3回送ってみましたが、いずれも検知されています。
また、依存関係タブに移動すると、きちんと環境変数で指定したサービス名で表示されていることが分かります。
この調子で残りのApacheインスタンス2-3も同じようにサービスファイル内で環境変数を設定していきます。
Environment=INSTANA_SERVICE_NAME=Apache2
[root@itz-550006dtk6-b17y system]#
[root@itz-550006dtk6-b17y system]# systemctl show httpd3 | grep Environment
Environment=INSTANA_SERVICE_NAME=Apache3
[root@itz-550006dtk6-b17y system]#
また、Instanaのダッシュボードに戻ります。各Apacheインスタンスに5回づつリクエストを投げてみましたが、全て検知されています。
依存関係タブに移動すると、それぞれのApacheインスタンスが設定した環境変数のサービス名で表示されています。
通常は、依存関係図の名の通り、アプリケーション間で連携があれば、そのつながりが可視化されます。しかし、今回はいずれも独立したインスタンスであり、それぞれのApacheはお互いに通信しません。そのため、以下の見え方は期待通りの結果となります。
作業時のポイントは、以下2点です。
- InstanaでApacheが検知されてから、5分程度時間を置く(初回はTracerやMetric Sensorのアタッチに少し時間がかかるため)
- Apacheにアクセスしてから、ダッシュボードを確認する(初回はアクセスが無いと、依存関係図にサービスとして表示されないため)
今回は、Apacheを例にご紹介しましたが、その他のテクノロジーで同様の事象が起こった際にも有効な手段になり得るかと思います。Instanaでお困りの方のヒントになりましたら幸いです。
本記事はこれで以上となります。
最後までお読みいただきまして、ありがとうございました。