🌊

Python FastAPIアプリケーションにおけるAzure Application Insightsを利用した高度な監視機能の実装

2024/04/16に公開

現代のソフトウェア開発において、監視機能はアプリケーションの状態をモニタリングし、問題を積極的に解決するための基石です。
この記事では、Python FastAPIアプリケーションとAzure Application Insightsの統合プロセスを簡略化し、初心者を含む開発者が効果的に高度な監視ソリューションを実装できるようにするセットアップに焦点を当てます。

シームレスな統合のための前提条件

PythonアプリケーションにAzure Application Insightsを統合する前に、以下のものを準備しておく必要があります:

  • Azureのサブスクリプション。
  • Pythonアプリケーション用に作成されたApp Serviceなど。
  • Python 3.7以上。

Azure Application Insightsの設定

最初のステップは、Azure Application Insightsリソースを設定することです。このプロセスでは、統合に不可欠な接続文字列を提供します。この接続文字列を安全に保管してください。アプリケーションを設定するために必要になります。

必要なパッケージのインストール

pipを使用してazure-monitor-opentelemetry、pip install opentelemetry-instrumentation-fastapi パッケージをインストールし、プロジェクトの依存関係を効率的に管理するためにrequirements.txtファイルに追加します。

pip install azure-monitor-opentelemetry
pip install opentelemetry-instrumentation-fastapi

設定

設定管理は非常に重要です。Azure Application Insightsの接続文字列を環境変数に保存して、安全かつ柔軟にアクセスできるようにします。アプリケーションでこの設定を強制する方法は次のとおりです:

import os
import logging

from fastapi import FastAPI, HTTPException
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor

from dotenv import load_dotenv

# Load environment variable
load_dotenv()

# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("uvicorn")

app = FastAPI()

APPLICATIONINSIGHTS_CONNECTION_STRING = os.getenv(
    "APPLICATIONINSIGHTS_CONNECTION_STRING"
)

# Simple validation
assert (
    APPLICATIONINSIGHTS_CONNECTION_STRING
), "APPLICATIONINSIGHTS_CONNECTION_STRING is not set."


try:
    configure_azure_monitor(
        connection_string=APPLICATIONINSIGHTS_CONNECTION_STRING,
    )
    FastAPIInstrumentor.instrument_app(app)
except Exception as e:
    raise HTTPException(
        status_code=500,
        detail=f"Application Insights was not set up properly. {(str(e))}",
    ) from e


@app.get("/health_check")
async def health_check():
    """
    The `health_check` function in Python implements custom logic for performing a health check and
    returns a dictionary with a status message.
    :return: The `health_check` function is returning a dictionary with a key "status" and the value "I
    am ok!!!".
    """

    logger.info("Health check endpoint was called")
    return 1/0
    # return {"status": "I am ok!!!"}

このシンプルなエンドポイントは、アプリケーションが実行中でリクエストを処理できることを確認するためのヘルスチェックとして機能します。このようなエンドポイントを組み込むことは、アプリケーションの信頼性とパフォーマンスを維持するために重要です。

Git:

Codeはこちらになります。
Code

画面キャプチャ


まとめ

Python FastAPIアプリケーションとAzure Application Insightsの統合は、開発者にアプリケーションの監視と分析に関する強力なツールを提供します。この統合を利用することで、リアルタイムでのパフォーマンス測定、エラーレポート、ユーザー行動の分析が可能になります。例えば、ページロード時間の追跡、サーバー応答時間の分析、そしてユーザーのナビゲーションパターンの可視化など、具体的な洞察を得ることができます。

Azure Application Insightsの利用により、アプリケーションのどの部分が最もリソースを消費しているか、どのエンドポイントがエラーを頻繁に発生させるかなど、詳細な情報を収集することが可能になります。これらの情報は、パフォーマンスのボトルネックを特定し、最適化するための貴重なデータを提供します。さらに、アプリケーションがどのように使用されているかについての洞察は、ユーザーエクスペリエンスの向上に直接役立ちます。

このガイドでは、Azure Application InsightsとFastAPIを簡単に統合する方法を紹介しましたが、その実装はアプリケーションの信頼性と可用性を大幅に高めることができます。自動化された監視とアラート設定により、開発チームは問題を迅速に特定し、修正することができ、結果としてアプリケーションのダウンタイムを最小限に抑えることができます。

全体として、Azure Application Insightsを使用することで、アプリケーションのパフォーマンス、エラーハンドリング、ユーザー行動の分析を通じて、アプリケーションの観測性を大幅に強化することができます。この強化された観測性は、アプリケーションの堅牢性を向上させ、最終的にはユーザーエクスペリエンスを高めることに貢献します。

ヘッドウォータース

Discussion