これまで Instanaで End User Monitoringを実施する場合、Webアプリケーション側に小さなJavaScriptを埋込む必要があり、業務チームにお願いしないといけないので、ちょっとだけ敷居が高い状況でした。フロントにApache HTTPサーバーがある場合、HTTPサーバーがこの埋込み作業を代替してくれる機能 Webサイト自動インスツルメンテーション が機能追加されました
以下のような典型的なWeb3層の構成で稼働しているシステムも、いまでも多くあるのはでないでしょうか。
[ IBM HTTP Server ] --- [ WebSphereAS / Liberty ] --- [ Db2 / Oracle ]
このような構成のお客様は今回の機能が使えます。
せっかくなので、IHSの分散トレーシングの設定含めて、一気に試してみたいと思います。
1. IBM HTTP Server監視の設定(トレーシング、メトリック)
1.1 IBM HTTP Server での メトリックの有効化
IBM HTTP Server で メトリックを有効化する方法は簡単です。
httpd.confにおいて server_statusを有効化してください。InstanaとしてはローカルからアクセスできればOKです。
LoadModule status_module modules/mod_status.so
<IfModule mod_status.c>
ExtendedStatus On
</IfModule>
<IfModule mod_status.c>
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1
Require all denied
# To allow access from a specific IP:
# Require ip 192.168.1
</Location>
</IfModule>
1.2 IBM HTTP Server での トレーシングの有効化(自動)
トレーシングの有効化も簡単です。Instanaエージェントの構成ファイル configuration.yamlにおいて、以下をコメントアウトするだけです。
# Apache Httpd
com.instana.plugin.httpd:
tracing:
enabled: true
autoRestart: true #自動再起動を許可(任意)
1.3 [ オプション ] IBM HTTP Server での トレーシングの有効化(手動)
外部接続が制限されている環境においては、以下のように手動で実施します。
a. トレーシング・モジュールの取得
製品ドキュメント に従い、環境に応じた 2つのモジュールをダウンロードします。
mod_dem_x86_64-1.0.14.so
tracelibrary_x86_64-1.0.14.so
b. トレーシング・モジュールの配置
今回の RHELの環境では、IHSが /opt/IBM/HTTPServer に導入されていますので、この下の modulesディレクトリに配置し、他と同様 755のアクセス権を設定します。
# pwd
/opt/IBM/HTTPServer/modules
# cp -p /tmp/mod_dem_x86_64-1.0.14.so .
# cp -p /tmp/tracelibrary_x86_64-1.0.14.so .
# chmod 755 mod_dem_x86_64-1.0.14.so
# chmod 755 tracelibrary_x86_64-1.0.14.so
# ls -ltr
(中略)
-rwxr-xr-x 1 root root 51736 Dec 14 01:49 mod_dem_x86_64-1.0.16.so
-rwxr-xr-x 1 root root 9344304 Dec 14 01:49 tracelibrary_x86_64-1.0.16.so
c. トレーシング・モジュールの有効化
httpd.confの最後に、以下の一行を追加します
LoadModule dem_module /opt/IBM/HTTPServer/modules/mod_dem_x86_64-1.0.14.so
2. Instanaでの メトリックと分散トレーシング稼働確認
Instana で稼働確認を行います。 サンプルアプリとして、Libertyで稼働する ModResort というアプリケーションを利用します。
Libertyで稼働していますが、フロントエンドは JavaScriptで選択に応じて表示が切り替わります。
2-1. Instanaでのトレーシングの稼働確認
実際にアクセスしてみると、IHSと Libertyのトレーシングが行われているのが分かります。
(Apacheの 分散トレーシングを設定していない場合、IHSは依存関係ビューに表れません)
IBM HTTP Server側の解析画面です。単発リクエストしか飛ばしていないのでシンプルですが、Apache httpdに届いた要求が確認できます。
Liberty側の解析画面です。IHSからフォワードされLibertyに届いた要求が確認できます。
要求の解析画面を開くと、IHSから Libertyに対してフォワードされた処理のシーケンスが確認できます。
これで、バックエンド側は Instanaで監視できるようになりました。
続いて、このアプリケーションに対して、エンドユーザー・モニタリングも設定してみましょう。
3. IBM HTTP Server での 自動 End User Monitoring の設定
3-1. End User Monitoring 監視対象の定義
まず、End User Monitoring の定義に必要な情報を確認します。
End User Monitoringの画面(Webサイトおよびモバイル・アプリケーション)にいおいて、Webサイトの追加を選択し、監視定義名(今回は Resorts)を設定します。
つぎのページで 以下のように End User Monitoringに必要なすべての情報が生成されます。
これまでは、これを Webページの < head > に組込んでいました。このなかで記載されている 小さなJavaScriptモジュールが、ブラウザのAPIなどを叩きながら 必要な情報をInstanaに送信します。
今回は、そのアプリケーション改修を行わず、Instnaエージェントの設定だけで、このモジュール組込みを実現します。ここにある内容は、Instanaエージェント側で設定が必要となりますので、 メモを取っておいてください。
3-2. Insana エージェントの構成ファイル更新
さきほど確認した内容を、Instanaエージェントの構成ファイルの com.instana.plugin.eum に反映します。構成ファイルには、コメントによる注釈が大量に入っていますが、必要な定義は以下のとおりです。なお、システムに入ってくる要求すべてを対象としたい場合も selector の記載が必要となります。
#EUM
com.instana.plugin.eum:
instrumentation:
websites:
- name: Resorts
key: rxxxxxxxxxxxxxxxQg
enalebd: true
reporingUrl: https://eum-<region>-saas.instana.io
selector:
matchExpressions:
- key: 'url/hostname'
operator: 'Equals'
values:
- 'myresort-site.com'
configuration.yaml へ変更を保存したら、特に Instana Agent を再起動する必要はありません。自動的に変更が反映されます。
4. Instanaでの End User Monitoringの結果確認
Instana で稼働確認を行います。先ほどと同じ ModResort というサンプル・アプリケーションに対し、実際に要求を投げます。
4-1. End User Monitoringの結果
アプリケーションに手を入れずに End User Monitoringのデータが取得できていることがわかります。Webアプリケーションの初期ロード(onLoad)時間や、様々なリソースの取得時間、キャッチされていないJavaScriptエラーなどを拾うことが可能です。
ブラウザ側での個々の画像やCSSの取得タイミングや、ボタン操作のタイミングでの処理(今回の場合 最後の GET /resorts/weather?selectedCity=Cork など) が把握できます。
ユーザーが利用しているブラウザやOSの情報も分かりますので、問題判別に役立つかもしれませんね。
まとめ
アプリケーションに手をいれずに、基盤の設定だけで エンド・ユーザーのブラウザー側の挙動が把握できるようになるのは非常に便利です。とくにIHS(apahce) - APサーバーという構成で使えるこの機能は、多くのお客様環境で活かせる機能だと考えています。