はじめに
Azure には Azure Functions というサービスがあります。
これは「サーバを考慮することなく、アプリケーションが実行可能な、イベント駆動型のサーバレスコンピューティングプラットフォーム」というサービスです。
要はAzureにおけるAWS Lambda(多分)。
またAWS Lambdaだと、アプリケーションの標準出力をCloudWatch Logsに転送し、集約管理します。
同じように Azure Functionsの場合はApplication Insights
(Azure Monitorというサービスの1機能)と連携し、アプリログを転送/集約管理するそうです。
ということで試しにやってみました、というのが今回の記事です。
構築の流れ
Azure Functions の外枠を作る
まずは Azure Portalからアプリケーションを実行するための外枠を作成します。
-
今回はPythonを選択
- ストレージアカウントとプランを選択
- 公式マニュアルによると「トリガーの管理や関数実行のログ記録などの操作に Azure Storage を使用しているため」、ストレージアカウントは必須らしい
- プランについては、いくつか種類がある模様(プランの概要)
今回は従量課金プラン
を選択。 - Pythonの場合、選択可能なOSはLinuxのみ
- 使用する言語によっては Windowsも選べるらしい。(オペレーティング システム/ランタイム)
関数アプリをデプロイする
Azure Functionsでの関数アプリのデプロイは、VSCodeの拡張機能を使用するそうです。
こちらは「Visual Studio Code と Python を使用して Azure に関数を作成する」に詳細手順があるので、ここでは省略します。
今回は次のようなhttpトリガーのサンプルコードをデプロイしてみました。
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
logging.critical('Test Critical Level')
logging.error('Test Error Level')
logging.warn('Test Warn Level')
logging.info('Test info Level')
logging.debug('Test Debug Level')
print('Test Message')
return func.HttpResponse(
"This HTTP triggered function executed successfully.",
status_code=200
)
関数アプリを実行してみる
関数アプリを実行するためのURLが画面右上から取得できるので、
こちらをブラウザで打鍵して、ログを出力させてみます。
Application Insights で確認する
最後にApplication Insightsでログが転送されていることを確認します。
- 関数アプリの最初の画面から Application Insightsの画面に移動
- テストメッセージが出力されることを確認!
- 関数アプリから出力したログは
traces
というテーブルに格納される模様- ログクエリは
KQL
という言語で記述するらしい。KQLに関するドキュメントはこちら
- ログクエリは
- ログレベルの一覧はこちら
- デフォルトだと
Debug
レベルは転送されない様子- この辺りは関数アプリの設定ファイル(hosts.json)でコントロールするようだ
- この辺りは関数アプリの設定ファイル(hosts.json)でコントロールするようだ
- 関数アプリから出力したログは
まとめ
ということでまとめです。
- Azure Functionsのアプリログを Application Insightsを転送するのは簡単にできます
- Azure Monitorのマニュアルでは「SDK or エージェントをインストールして」と記載されているが、Azure Functionsについては特に不要なようです。
おまけ
- 関数アプリの中にしれっと
print文
を混ぜていたのですが、そちらもちゃんとApplication Insightsに転送されていました。ログレベルはInformationになるようです。- ログレベルを気にしないのであれば、単純にprint文で良いかもしれない(監視で困るかな?)