1. はじめに
前回の投稿「Python(Django)アプリをInstanaで可視化・モニタリングする(1)【設定編】」では、Webサーバーの「 ①PythonとDjangoのモニタリングの設定 」を行いました。 今回の投稿では、「②Instanaで可視化された収集データを確認」を行います。
2つの仮想インスタンスのスペックは下記の通りです。
-
仮想インスタンス1(外部アクセスからのアクセス可能)
- 役割: Webサーバ
- OS: Ubuntu 20.04
- Webサーバ : Djangoのrunserver
- Python : 3.8.5
- Django : 4.0.7
- 役割: Webサーバ
-
仮想インスタンス2(外部アクセスからのアクセス不可)
- 役割: DBサーバ
- OS: Ubuntu 20.04
- PostgreSQL : 12
- 役割: DBサーバ
2. 動作するアプリケーションのイメージ
このアプリは、Djangoの「はじめての Django アプリ作成」で作成する「簡単な投票 (poll) アプリケーション」で今日の天気を投票してもらうサンプルデータを作成して、実行しています。 実際にブラウザで投票すると、その投票結果は、PostgreSQLのデータベースに保存される仕組みになってます。
3. Instanaのダッシュボードで可視化された収集データの確認 ( Python & Djangoのモニタリング )
インフラストラクチャー画面での確認
下記の画像はInstanaのダッシュボード画面です、「インフラストラクチャー」のメニューをクリックして、インフラストラクチャーの画面を表示すると、pollsというホスト名が、今回、runserver[テスト用簡易サーバ]起動したホストです。 下記画像の赤枠では、Pythonアプリケーション(2)で、mysiteというアプリケーションをモニターしていることがわかります。 次に詳細を見るために ダッシュボードを開く
ボタンを押します。
下記画像は、ホストpollsの詳細画面です。ホストとPythonとDjangoのアプリケーションの関連性を確認します。
赤文字①のスタック
をクリックして、赤文字②のインフラストラクチャー
をクリックします。
インフラの視点では、青枠の中を見るとrunserver[テスト用簡易サーバ]のプロセスと 2つのmysiteというPythonアプリケーションが、ホストpollsでモニターしてることがわかります。
次にアプリケーション視点で確認します。下記画像の赤文字①アプリケーション
をクリックします。アプリ視点では、青枠の中にmysiteというPythonの1つのサービスをモニターしていて、呼び出しが1,587件あること。そして、サービスのエンドポイントの一覧が表示されています。エンドポイントには実際に呼び出されているGET/POSTが計測されているので、間違いなくモニターしているのがわかります。 これまで、インフラストラクチャーの画面で確認していましたが、アプリケーション・ビューで確認するために、赤文字②アプリケーション
をクリックします。
アプリケーションの画面での確認
この画面では、1秒間隔で実測した呼び出し数、エラーのある呼び出し数、待ち時間等、全てのサービスの状況をサマリーしています。次に、サービスの依存関係を確認するために、赤文字①依存関係
をクリックします。
下記の画像の青枠の中で、Pythonのアプリケーションmysite
と PostgreSQLのサービスが線で繋がって依存関係があるのがわかります。
ちなみに、mysiteとPostgreSQLをつなぐ線上の点は、実際の通信を表しており、実際の画面では、点が右から左に移動してるのを確認することができます。さらに深掘りするために、赤文字①呼び出しの分析
をクリックします。
下記の画像ではアプリケーションの呼び出しの分析画面が表示されました。赤文字①の赤枠では、1.5k回の呼び出しがあったのが確認できます。①の赤枠のmysiteをクリックすると、その下の青枠部分に、実際の呼び出しの一覧が表示されます。
mysiteサービス
の GET /polls/1
の呼び出しで、待ち時間が 10ミリ秒
だったことがこの図からわかりますが、
さらに、この呼び出しを確認するために、赤文字②の赤枠のGET /polls/1
をクリックします。
下記の画像ではGET /polls/1
の呼び出しの詳細分析画面が表示されました。赤文字①のタイムラインでは、GET /polls/1
が全体で10ミリ秒かかっている中で、 オレンジ色のSELECT
が2回発行されていることを確認できます。 もし遅延等があった場合は、このタイムラインで、どのサービスが遅いのか視覚的にわかるようになってます。
赤文字②の呼び出しでは、実際のGET /polls/1
の呼び出しで関連のある呼び出しが、今回の場合は、PostgreSQLのサービスにSELECT
を発行しているのがわかります。 さらに赤文字②の赤枠内の、オレンジ色の箇所をクリックします。
オレンジ色の箇所をクリックすると、右側の赤文字③の赤枠で、 mysiteから、ホスト10.10.0.7のPostgreSQLに対して、実際に発行した、SQL文を確認する事ができました。
これで、Djangoの「簡単な投票 (poll) アプリケーション」を使って、Pythonアプリケーションの可視化ができること、そのアプリケーションの実際の呼び出しを詳細に確認できることがわかりました。
4. 最後に
今回の投稿では、IBM CloudのVirtual Private Cloud(VPC)の仮想インスタンス(Ubuntu)で動作するPython&Djangoのアプリケーションに Instana Pythonモジュールを組み込みことで、Instanaが、Pythonアプリケーションの動向を計測し、計測したデータを、InstanaのSaaSに送信し、Instanaのダッシュボードで視覚化・モニタリングできる事がわかりました。
今回は、正常時の動作確認でしたが、たとえば、DBサーバが遅くなったなど、問題が発生した場合は、この投稿の流れに沿って、Instanaのダッシュボードを使って原因分析する事ができます。
これまで、下記、1〜4の投稿で、IBM Cloudの Virtual Private Cloud(VPC)の仮想インスタンス作成、Python(Django)とPostgreSQLを使ったサンプルアプリの作成、インフラ、アプリの可視化・モニタリングの順番に構築設定を行いました。 ぜひ、1〜4まで参考になれば幸いです。
-
Python(Django)アプリの環境構築
-
インフラの可視化・モニタリング設定・確認
-
Python(Django)アプリの可視化・モニタリング設定
-
(本投稿)Python(Django)アプリの可視化・モニタリング設定