1. はじめに
前回の投稿「 IBM CloudのVPCの仮想インスタンス(Ubuntu)をInstanaを使って可視化する」では、IBM CloudのVirtual Private Cloud(VPC)の仮想インスタンス(Ubuntu)にInstana Agentをインストールをインストールすることによって、 Instanaのダッシュボードで、インフラ視点で可視化できることを確認しました。
これからはアプリケーション視点で、Python(Django)の「簡単な投票 (poll) アプリケーション」を使って,
Instanaで可視化&モニタリングできることを確認します。
なお、このアプリケーションの構築手順は、「 IBM CloudのVPCでDjangoのアプリケーションを動かす 」にて解説してあります。
2. 今回の作業イメージ
今回は、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サーバ
3. 動作するアプリケーションのイメージ
このアプリは、Djangoの「はじめての Django アプリ作成」で作成する「簡単な投票 (poll) アプリケーション」で今日の天気を投票してもらうサンプルデータを作成して、実行しています。 実際にブラウザで投票すると、その投票結果は、PostgreSQLのデータベースに保存される仕組みになってます。
4. Python & Django のモニタリング設定
- Webサーバ作業
-
リモートサーバへのログイン
まずはリモートサーバにログインします。ssh -i [秘密鍵のファイル名] root@[WebサーバのIPアドレス]
-
作業用ユーザーにスイッチ
作業用ユーザーにスイッチします。su - [ユーザー名]
-
アプリディレクトリの確認
/appのフォルダにDjangoのプロジェクトのファイルが配置されているので、ディレクトリを確認します。$ ls -l /app total 24 -rw-rw-r-- 1 dai dai 1079 Oct 2 02:50 LICENSE -rw-rw-r-- 1 dai dai 1359 Oct 2 02:50 README.md -rwxrwxr-x 1 dai dai 538 Oct 2 02:50 manage.py drwxrwxr-x 2 dai dai 4096 Oct 2 02:50 mysite drwxrwxr-x 5 dai dai 4096 Oct 2 02:50 polls drwxrwxr-x 3 dai dai 4096 Oct 2 02:50 templates
-
アプリディレクトリへの移動
/appのフォルダで作業するために /appフォルダに移動します。$ cd /app
-
Instana Pythonモジュールのインストール
Instanaで Pythonのアプリケーションをトレースするために、Instana Pythonモジュールをpipでインストールします。$ sudo pip3 install instana
-
settings.pyの設定(Djangoの設定ファイル)
DjangoでInstanaでモニターするために、settings.pyにInstana Pythonモジュールをインポートするように設定します。- 変更前(13行目)
import os
- 変更後(13〜14行目)
import os import instana
これで設定は、終了で、次からは動作確認を行います。
5. 動作確認 ( Webサーバの起動 : Python & Djangoのモニタリング )
環境構築時には、Djangoのrunserver[テスト用簡易サーバ]を使ってアプリケーションを動作させていました。この投稿でもrunserverで動作確認を行います。 (GunicornやuWsgi等は、別投稿でやりたいと思います。)
-
Instana Agentのデバックモードの有効化
テストなので問題判別を早めるためにデバックモードを有効にします。方法は、環境変数を宣言します。$ export INSTANA_DEBUG=true
-
Djangoのrunserver[テスト用簡易サーバ]の起動
runserverを使って起動します。$ python3 manage.py runserver 0.0.0.0:8000
-
runserver[テスト用簡易サーバ]から出力されるログの確認
runserver[テスト用簡易サーバ]が起動を開始すると、 出力されるログには、 Instana関連のログとrunserverのログが出力されるようになります。■以下、出力されるログの内容
- Instana関連のログ (Pythonアプリケーションモニターできるように、必要なモジュールをインストルメントしている)
2022-10-04 14:25:38,721: 246994 INFO instana: Stan is on the scene. Starting Instana instrumentation version: 1.38.0 2022-10-04 14:25:38,721: 246994 DEBUG instana: Loading Host Collector 2022-10-04 14:25:38,722: 246994 DEBUG instana: Initializing host agent state machine 2022-10-04 14:25:38,726: 246994 DEBUG instana: Instrumenting asyncio 2022-10-04 14:25:38,732: 246994 DEBUG instana: Instrumenting gevent: gevent not detected or loaded. Nothing done. 2022-10-04 14:25:38,734: 246994 DEBUG instana: Instrumenting logging 2022-10-04 14:25:38,745: 246994 DEBUG instana: Instrumenting psycopg2 2022-10-04 14:25:38,745: 246994 DEBUG instana: Instrumenting urllib3 2022-10-04 14:25:38,746: 246994 DEBUG instana: Instrumenting django 2022-10-04 14:25:38,816: 246994 DEBUG instana: uwsgi hooks: decorators not available: likely not running under uWSGI
- runserver[テスト用簡易サーバ]の内容のログ
Django version 4.0.7, using settings 'mysite.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
- Instana関連のログ (Agent is ready. Getting to work.で Instanaでモニター開始されているのを確認できる。)
2022-10-04 14:25:40,117: 246998 DEBUG instana: Instana host agent found on localhost:42699 2022-10-04 14:25:40,117: 246998 DEBUG instana: Attempting to make an announcement to the agent on localhost:42699 2022-10-04 14:25:40,122: 246998 DEBUG instana: Starting Host Collector 2022-10-04 14:25:40,122: 246998 DEBUG instana: BaseCollector.start: launching collection thread 2022-10-04 14:25:40,122: 246998 INFO instana: Instana host agent available. We're in business. Announced PID: 246998 (true pid: 246998) 2022-10-04 14:25:40,122: 246998 DEBUG instana: Announced pid: 246998 (true pid: 246998). Waiting for Agent Ready... 2022-10-04 14:25:50,782: 246994 DEBUG instana: Agent is ready. Getting to work.
-
Webサーバが起動したので、ブラウザで WebサーバのフローティングIPアドレスを使って次のURLで 「 http://(フローティングIPアドレス):8000/polls」アクセスして画面を確認します。
問題がなければブラウザに以下の画像のように「 今日の天気は? 」とメッセージが表示されるはずです。下記、赤矢印に沿って画面遷移を続けてと投票を継続すると投票数が増えていくことを確認できます。
ブラウザアクセスをしている時のrunserver[テスト用簡易サーバ]が出力しているログの中に、
通常のアクセスログに加えて、DEBUG instana: Reporting 3 spans
が出力されていますが、 3つのスパン(Span)がInstana Agentに送信されているログです。
[04/Oct/2022 14:45:16] "GET /polls/ HTTP/1.1" 200 549
[04/Oct/2022 14:45:16] "GET /static/polls/style.css HTTP/1.1" 404 179
2022-10-04 14:45:17,123: 246998 DEBUG instana: Reporting 3 spans
[04/Oct/2022 14:45:21] "GET /polls/1/ HTTP/1.1" 200 945
2022-10-04 14:45:22,123: 246998 DEBUG instana: Reporting 3 spans
[04/Oct/2022 14:45:27] "POST /polls/1/vote/ HTTP/1.1" 302 0
[04/Oct/2022 14:45:27] "GET /polls/1/results/ HTTP/1.1" 200 568
2022-10-04 14:45:27,123: 246998 DEBUG instana: Reporting 7 spans
Instana Agentをデバックモードにすることで、runserver[テスト用簡易サーバ]のログからInstanaがPython & Djangoをモニタリングしている事がわかりました。
6. 最後に
今回の投稿では、IBM CloudのVirtual Private Cloud(VPC)の仮想インスタンス(Ubuntu)で動作するPython&Djangoのアプリケーションに Instana Pythonモジュールを組み込みことで、Instanaが、Pythonアプリケーションの動向を計測し、計測したデータを、Instana Agentに送信しているところまでを確認しました。
次の投稿 Python-DjangoアプリをInstanaで可視化・モニタリングする(2)【確認編】では、収集したデータがInstanaのダッシュボードで視覚化・モニタリングできる事を確認します。
この投稿は、下記、1〜4の流れで、IBM Cloudの Virtual Private Cloud(VPC)の仮想インスタンス作成、Python(Django)とPostgreSQLを使ったサンプルアプリの作成、インフラ、アプリの可視化・モニタリングの順番に構築設定を行った時の記録になります。 ぜひ、1〜4まで参考になれば幸いです。
-
Python(Django)アプリの環境構築
-
インフラの可視化・モニタリング設定・確認
-
(本投稿)Python(Django)アプリの可視化・モニタリング設定
-
Python(Django)アプリの可視化・モニタリング設定