船井総研デジタルのよもぎたです。
Azure Application InsightsにPythonプログラムからログを送信する方法を調べたので、共有いたします。
Application Insightsについてはこちらのドキュメントを、使用するOpenCensus Python SDKについてはこちらのドキュメントを参考にしました。
大まかな流れ
- Application Insightsを作成して接続文字列を確認します。
- OpenCensus Python SDKを導入します。
- ログを送信するプログラムを作成して実行します。
- Application Insightsで送信されたログを確認します。
OpenCensusパッケージは廃止が発表されています。Azureではサポート終了の1年前にはアナウンスがあるそうです。後継となるOpenTelemetryパッケージは、2023年6月現在Azureではパブリックプレビュー段階です。いずれOpenTelemetryに移行していく必要があります。
具体的な流れ(作業手順)
Application Insightsの作成
ここは割愛させていただきます。PortalでもIaCでもAzureCLIでも、お好みの方法で作成してください。Functionsなどを作成したときに一緒に作っていることもあるかと思います。
接続文字列の確認
Azure Portalから確認するのが一番簡単かと思います。ログ出力先のApplication Insightsを開き、左側のメニューの「概要」を選択すると、右側に接続文字列が表示されます。
OpenCensus Python SDKの導入
次のコマンドでSDKをインストールできます。必要に応じてvenvなどで仮想環境を作って実行してください。Functionsに組み込む場合は、requirements.txtへの追記もお忘れなく。
pip install opencensus-ext-azure
この記事作成時のopencensus-ext-azureパッケージのVersionは1.1.9でした。
pip list | Select-String opencensus-ext-azure
opencensus-ext-azure 1.1.9
opencensus-ext-azureパッケージのPyPIのページはこちらです
PythonプログラムからApplication Insightsにログを送信する
概要
Pythonのloggingパッケージを使います。まず、loggerオブジェクトのインスタンスを取得します。次にそのインスタンスのaddHandler関数でAzureLogHandlerをハンドラーとして追加します。そうすることでwarning関数などでApplication Insightsにログを送信できるようになります。
実際のコード
たとえば、Application InsightsにWarningレベルで Hello Application Insights. と出力するPythonプログラムは次のようになります。
import logging
from opencensus.ext.azure.log_exporter import AzureLogHandler
logger = logging.getLogger(__name__)
logger.addHandler(AzureLogHandler(connection_string="Replace with your connection string"))
logger.warning("Hello Application Insights.")
送信されたログを確認する
Potalから確認するのがお手軽です。ログの検索には、Kusto照会言語(KQL)を使います。
PortalでApplication Insightsを開き、左側のメニューの「監視」セクションの「ログ」を選択します。右側でクエリを実行できるようになります。
上記のプログラムで送信したログはtracesテーブルに記録されているので、次のようなKQLで確認することができます。
traces
| order by timestamp desc
| take 10
クエリを入力したら、青い「実行」ボタンをクリックします。ログの量やクエリの複雑さによっては待たされるでしょうが、この位のテストであれば、すぐに結果が返ってくるはずです。結果は、クエリの下のエリアに表示されます。
まとめ
簡単ですが、PythonプログラムからApplication Insightsにログを送信する手順をご紹介いたしました。Pythonプログラムにログ出力を組み込んでいくはじめの一歩にはなるかと思います。
最後までお読みいただきありがとうございました。引き続きよろしくお願いいたします。