LoginSignup
3
1

More than 1 year has passed since last update.

Azure Functionsで関数を作成して、ログをApplication Insightsに転送してみた

Last updated at Posted at 2022-03-25

はじめに

Azure には Azure Functions というサービスがあります。
これは「サーバを考慮することなく、アプリケーションが実行可能な、イベント駆動型のサーバレスコンピューティングプラットフォーム」というサービスです。
要はAzureにおけるAWS Lambda(多分)。

またAWS Lambdaだと、アプリケーションの標準出力をCloudWatch Logsに転送し、集約管理します。
同じように Azure Functionsの場合はApplication Insights(Azure Monitorというサービスの1機能)と連携し、アプリログを転送/集約管理するそうです。

ということで試しにやってみました、というのが今回の記事です。

構築の流れ

Azure Functions の外枠を作る

まずは Azure Portalからアプリケーションを実行するための外枠を作成します。

  • リソース一覧のコンピューティングカテゴリから関数アプリを選択
    20220323_142104_01.JPG

  • 関数アプリを作成
    20220323_142128_01.JPG

  • 今回はPythonを選択

    • Azure Functionsでサポートしている言語の一覧はこちら
    • 関数アプリ名の命名ルールはこちら

20220323_142913_01.JPG

  • ストレージアカウントとプランを選択
    • 公式マニュアルによると「トリガーの管理や関数実行のログ記録などの操作に Azure Storage を使用しているため」、ストレージアカウントは必須らしい
    • プランについては、いくつか種類がある模様(プランの概要
      今回は従量課金プランを選択。
    • Pythonの場合、選択可能なOSはLinuxのみ

20220323_142927_01.JPG

  • Application Insightsを有効にする
    20220323_143003_01.JPG

  • 作成
    20220323_143031_01.JPG

  • 完成!
    20220323_143138_01.JPG

  • 関数アプリはまだない
    20220323_143158_01.JPG

関数アプリをデプロイする

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が画面右上から取得できるので、
こちらをブラウザで打鍵して、ログを出力させてみます。

  • 関数のURLを取得
    20220324_165225_01.JPG

  • ブラウザで取得したURLに接続して、関数アプリを実行
    20220324_165352_01.JPG

Application Insights で確認する

最後にApplication Insightsでログが転送されていることを確認します。

  • 関数アプリの最初の画面から Application Insightsの画面に移動
20220324_165732_01.JPG

20220324_165914_01.JPG

  • テストメッセージが出力されることを確認!
    • 関数アプリから出力したログはtracesというテーブルに格納される模様
      • ログクエリはKQLという言語で記述するらしい。KQLに関するドキュメントはこちら
    • ログレベルの一覧はこちら
    • デフォルトだとDebugレベルは転送されない様子
      • この辺りは関数アプリの設定ファイル(hosts.json)でコントロールするようだ
        20220324_171406_01.JPG

まとめ

ということでまとめです。

  • Azure Functionsのアプリログを Application Insightsを転送するのは簡単にできます
    • Azure Monitorのマニュアルでは「SDK or エージェントをインストールして」と記載されているが、Azure Functionsについては特に不要なようです。

おまけ

  • 関数アプリの中にしれっとprint文を混ぜていたのですが、そちらもちゃんとApplication Insightsに転送されていました。ログレベルはInformationになるようです。
    • ログレベルを気にしないのであれば、単純にprint文で良いかもしれない(監視で困るかな?)
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1