Python(Django)アプリをInstanaで可視化・モニタリングする(2)【確認編】

# 1. はじめに
前回の投稿「[Python(Django)アプリをInstanaで可視化・モニタリングする(1)【設定編】](https://qiita.com/daihiraoka/items/2e3f66a61e61afa60324
)」では、Webサーバーの「 ①PythonとDjangoのモニタリングの設定 」を行いました。 今回の投稿では、「②Instanaで可視化された収集データを確認」を行います。
![構成イメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/d11bd6e1-52a7-e1fb-6712-c873ee6fec08.png)

２つの仮想インスタンスのスペックは下記の通りです。

- 仮想インスタンス1(外部アクセスからのアクセス可能)
    - 役割: Webサーバ
        - OS: Ubuntu 20.04 
        - Webサーバ : Djangoのrunserver
        - Python : 3.8.5
        - Django : 4.0.7

- 仮想インスタンス2(外部アクセスからのアクセス不可)
    - 役割: DBサーバ 
        - OS: Ubuntu 20.04 
        - PostgreSQL : 12

# 2. 動作するアプリケーションのイメージ
このアプリは、Djangoの「[はじめての Django アプリ作成]("https://docs.Djangoproject.com/ja/4.1/intro/tutorial01/")」で作成する「簡単な投票 (poll) アプリケーション」で今日の天気を投票してもらうサンプルデータを作成して、実行しています。 実際にブラウザで投票すると、その投票結果は、PostgreSQLのデータベースに保存される仕組みになってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/3c250bfa-09fd-97bb-e2f6-dbdd9bf7e268.png)

# 3. Instanaのダッシュボードで可視化された収集データの確認 ( Python & Djangoのモニタリング )

## インフラストラクチャー画面での確認

下記の画像はInstanaのダッシュボード画面です、「インフラストラクチャー」のメニューをクリックして、インフラストラクチャーの画面を表示すると、pollsというホスト名が、今回、runserver[テスト用簡易サーバ]起動したホストです。　下記画像の赤枠では、Pythonアプリケーション(2)で、mysiteというアプリケーションをモニターしていることがわかります。　次に詳細を見るために `ダッシュボードを開く`ボタンを押します。　
![Instana-django-image-001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/a447f79d-1b5e-3d03-4fa5-f3db3df2ccf3.png)

下記画像は、ホストpollsの詳細画面です。ホストとPythonとDjangoのアプリケーションの関連性を確認します。
赤文字①の`スタック`をクリックして、赤文字②の`インフラストラクチャー`をクリックします。
インフラの視点では、青枠の中を見るとrunserver[テスト用簡易サーバ]のプロセスと ２つのmysiteというPythonアプリケーションが、ホストpollsでモニターしてることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/f20370bc-30c3-9638-c5fa-7bab2f3ef20a.png)

次にアプリケーション視点で確認します。下記画像の赤文字①`アプリケーション`をクリックします。アプリ視点では、青枠の中にmysiteというPythonの１つのサービスをモニターしていて、呼び出しが1,587件あること。そして、サービスのエンドポイントの一覧が表示されています。エンドポイントには実際に呼び出されているGET/POSTが計測されているので、間違いなくモニターしているのがわかります。　これまで、インフラストラクチャーの画面で確認していましたが、アプリケーション・ビューで確認するために、赤文字②`アプリケーション`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/33b168ea-e100-6374-0e36-a13abf1703fd.png)

## アプリケーションの画面での確認

この画面では、1秒間隔で実測した呼び出し数、エラーのある呼び出し数、待ち時間等、全てのサービスの状況をサマリーしています。次に、サービスの依存関係を確認するために、赤文字①`依存関係`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/76563d93-1c92-c7c1-5153-e29aadd3fa6c.png)


下記の画像の青枠の中で、Pythonのアプリケーション`mysite`と PostgreSQLのサービスが線で繋がって依存関係があるのがわかります。
ちなみに、mysiteとPostgreSQLをつなぐ線上の点は、実際の通信を表しており、実際の画面では、点が右から左に移動してるのを確認することができます。さらに深掘りするために、赤文字①`呼び出しの分析`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/4c746c0e-ab42-1ed5-460d-3a082738ec9c.png)

下記の画像ではアプリケーションの呼び出しの分析画面が表示されました。赤文字①の赤枠では、1.5k回の呼び出しがあったのが確認できます。①の赤枠のmysiteをクリックすると、その下の青枠部分に、実際の呼び出しの一覧が表示されます。
`mysiteサービス` の `GET /polls/1` の呼び出しで、待ち時間が `10ミリ秒`だったことがこの図からわかりますが、
さらに、この呼び出しを確認するために、赤文字②の赤枠の`GET /polls/1`をクリックします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/ac9e1948-7c7f-18bf-60f9-276955cb56a2.png)

下記の画像では`GET /polls/1`の呼び出しの詳細分析画面が表示されました。赤文字①のタイムラインでは、`GET /polls/1`が全体で１０ミリ秒かかっている中で、　オレンジ色の`SELECT`が２回発行されていることを確認できます。　もし遅延等があった場合は、このタイムラインで、どのサービスが遅いのか視覚的にわかるようになってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/afd96195-83a0-cd9a-9426-7ab5ce0021fe.png)
赤文字②の呼び出しでは、実際の`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のダッシュボードを使って原因分析する事ができます。

これまで、下記、１〜４の投稿で、IBM Cloudの Virtual Private Cloud(VPC)の仮想インスタンス作成、Python(Django)とPostgreSQLを使ったサンプルアプリの作成、インフラ、アプリの可視化・モニタリングの順番に構築設定を行いました。　ぜひ、１〜４まで参考になれば幸いです。

1. Python(Django)アプリの環境構築
    - [IBM Cloud VPCの仮想インスタンスでPython(Django)アプリ作成](https://qiita.com/daihiraoka/items/bb0ea1d15f342493d850)

1. インフラの可視化・モニタリング設定・確認
    - [IBM CloudのVPCの仮想インスタンス(Ubuntu)をInstanaを使って可視化する](https://qiita.com/daihiraoka/items/c6fd7cfa9e4a59b3038a)

1. Python(Django)アプリの可視化・モニタリング設定
    - [Python(Django)アプリをInstanaで可視化・モニタリングする(1)【設定編】](https://qiita.com/daihiraoka/items/2e3f66a61e61afa60324)

1. 　**(本投稿)Python(Django)アプリの可視化・モニタリング設定**
    - 「[Python(Django)アプリをInstanaで可視化・モニタリングする(2)【確認編】](https://qiita.com/daihiraoka/items/a49b7492a2da68c78a92)」