Azure App Service と Python のアプリケーション監視 (プレビュー)

重要

ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

コードを変更せずに、Azure App Services で Python Web アプリケーションを監視します。 このガイドでは、Azure Monitor Application Insights を有効にする方法と、大規模なデプロイを自動化するためのヒントについて説明します。

統合により、コード内の一般的な Python ライブラリがインストルメント化され、依存関係、ログ、メトリックを自動的に収集して関連付けることができます。 インストルメント化された後、次の Python ライブラリから呼び出しとメトリックを収集します。

インストルメンテーション サポートされているライブラリ名 サポートされているバージョン
OpenTelemetry Django インストルメンテーション django link
OpenTelemetry FastApi インストルメンテーション fastapi link
OpenTelemetry Flask インストルメンテーション flask link
OpenTelemetry Psycopg2 インストルメンテーション psycopg2 link
OpenTelemetry Requests インストルメンテーション requests link
OpenTelemetry UrlLib インストルメンテーション urllib すべて
OpenTelemetry UrlLib3 インストルメンテーション urllib3 link

Note

Django を使用している場合は、この記事の追加の「Django インストルメンテーション」セクションを参照してください。

ログ テレメトリは、ルート ロガーのレベルで収集されます。 Python のネイティブ ログ階層の詳細については、「Python のログ記録に関するドキュメント」を参照してください。

前提条件

  • Python バージョン 3.11 以降。
  • App Service はコードとしてデプロイする必要があります。 カスタム コンテナーはサポートされていません。

Application Insights を有効にする

Azure App Services で Python アプリケーションを監視する最も簡単な方法は、Azure portal を使用することです。

Azure portal で監視をアクティブ化すると、Application Insights を使用してアプリケーションが自動的にインストルメント化され、コードを変更する必要はありません。

Note

コードで OpenTelemetry の手動インストルメンテーション (Azure Monitor OpenTelemetry DistroAzure Monitor OpenTelemetry Exporter など) を使用していない場合にのみ、App Service で自動インストルメンテーションを使用する必要があります。 これは、重複したデータが送信されないようにするためです。 この詳細については、この記事の「トラブルシューティング」セクションを参照してください。

Azure portal を使用した自動インストルメンテーション

サポートされている自動インストルメンテーション シナリオの全一覧については、「サポートされている環境、言語、リソース プロバイダー」を参照してください。

コードを変更する必要なく、Azure App Service で Python アプリの監視をオンに切り替えます。

Application Insights for Python は、コードベースの Linux Azure App Service と統合されます。

統合はパブリック プレビュー段階です。 この統合により、GA 内にある Python SDK が追加されます。

  1. お使いのアプリ サービスの Azure コントロール パネルで [Application Insights] を選択し、 [有効化] を選択します。

    [有効化] が選択されている Application Insights タブのスクリーンショット。

  2. 新しいリソースを作成するか、このアプリケーションの既存の Application Insights リソースを選択します。

    Note

    [OK] を選択して新しいリソースを作成すると、監視の設定を適用するように求めるメッセージが表示されます。 [続行] を選択すると、新しい Application Insights リソースがアプリ サービスにリンクされ、アプリ サービスの再起動がトリガーされます。

    リソース ドロップダウンの変更のスクリーンショット。

  3. リソースを指定すると、すぐに使用できます。

    アプリケーションのインストルメント化のスクリーンショット。

構成

次のような OpenTelemetry 環境変数を使用して構成できます。

環境変数 説明
OTEL_SERVICE_NAMEOTEL_RESOURCE_ATTRIBUTES アプリケーションに関連付けられている OpenTelemetry リソース属性 を指定します。 OTEL_RESOURCE_ATTRIBUTES を使用して任意のリソース属性を設定することも、OTEL_SERVICE_NAME を使用して service.name のみを設定することもできます。
OTEL_LOGS_EXPORTER None に設定すると、ログ テレメトリの収集とエクスポートが無効になります。
OTEL_METRICS_EXPORTER None に設定すると、メトリック テレメトリの収集とエクスポートが無効になります。
OTEL_TRACES_EXPORTER None に設定すると、分散トレース テレメトリの収集とエクスポートが無効になります。
OTEL_BLRP_SCHEDULE_DELAY ログ記録のエクスポート間隔をミリ秒単位で指定します。 既定値は 5000 です。
OTEL_BSP_SCHEDULE_DELAY 分散トレースのエクスポート間隔をミリ秒単位で指定します。 既定値は 5000 です。
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS 無効にする OpenTelemetry インストルメンテーションを指定します。 無効にすると、インストルメンテーションは自動インストルメンテーションの一部として実行されません。 小文字のライブラリ名のカンマ区切りのリストを受け入れます。 たとえば、Psycopg2 および FastAPI インストルメンテーションを無効にするには、"psycopg2,fastapi" に設定します。 既定では空のリストになり、サポートされているすべてのインストルメンテーションが有効になります。

コミュニティ インストルメンテーション ライブラリを追加する

OpenTelemetry コミュニティからインストルメンテーション ライブラリを含めると、より多くのデータを自動的に収集できます。

注意事項

コミュニティ インストルメンテーション ライブラリの品質は、サポートおよび保証していません。 ディストリビューションについてのご提案は、フィードバック コミュニティで投稿するか賛成に投票してください。 一部は実験的な OpenTelemetry 仕様に基づいており、今後、破壊的変更が生じる可能性があることにご注意ください。

コミュニティ OpenTelemetry インストルメンテーション ライブラリを追加するには、アプリの requirements.txt ファイルを使用してインストールします。 OpenTelemetry の自動インストルメンテーションは自動的に選択され、インストールされているすべてのライブラリがインストルメント化されます。 コミュニティ ライブラリの一覧については、こちらを参照してください。

監視の自動化

Application Insights でのテレメトリ収集を有効にするのに必要なのは、次のアプリケーション設定を設定することだけです。

利用可能な Application Insights の設定が表示された App Service のアプリケーション設定のスクリーンショット。

アプリケーション設定の定義

アプリ設定の名前 定義 Value
APPLICATIONINSIGHTS_CONNECTION_STRING Application Insights リソースの接続文字列 例: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION メインの拡張機能で、実行時の監視を制御します。 ~3

Note

プロファイラーとスナップショット デバッガーは Python アプリケーションでは使用できません

Azure Resource Manager を使用した App Service のアプリケーション設定

Azure App Service のアプリケーション設定は、Azure Resource Manager テンプレートを使用して管理および構成できます。 この手法は、Resource Manager オートメーションで新しい App Service リソースをデプロイするとき、または既存のリソースの設定を変更するときに使用できます。

App Service リソースに使われるアプリケーション設定 JSON の基本構造を次に示します。

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

アプリケーション設定が Application Insights 用に構成されている Resource Manager テンプレートの例として、このテンプレートが役に立ちます。 具体的には、238 行目から始まるセクションを参照してください。

既定の Application Insights の設定で Resource Manager テンプレートを作成するには、Application Insights を有効にして新しい Web アプリを作成する場合のようにプロセスを開始します。

  1. 目的の Web アプリ情報を含む新しい App Service リソースを作成します。 [監視] タブで Application Insights を有効にします。

  2. [Review + create](レビュー + 作成) を選択します。 次に、[オートメーション用のテンプレートをダウンロードする] を選択します。

    App Service Web アプリの作成メニューを示すスクリーンショット。

    このオプションにより、必要な設定がすべて設定済みの、最新の Resource Manager テンプレートが生成されます。

    App Service Web アプリ テンプレートを示すスクリーンショット。

次の例で、すべての AppMonitoredSite をサイト名に置き換えてください。

Note

Windows を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION~2 に設定します。 Linux を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION~3 に設定します。

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

PowerShell を使用して有効にする

PowerShell を使用してアプリケーションの監視を有効にするために必要な操作は、基になるアプリケーション設定の変更のみです。 次の例では、リソース グループ AppMonitoredRGAppMonitoredSite という Web サイトのアプリケーション監視を有効にします。 これによって、012345678-abcd-ef01-2345-6789abcd インストルメンテーション キーに送信されるようにデータが構成されます。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Note

Windows を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION を ~2 に設定します。 Linux を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION を ~3 に設定します。

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Django インストルメンテーション

OpenTelemetry Django インストルメンテーションを使用するには、App Service 設定の DJANGO_SETTINGS_MODULE 環境変数を、アプリ フォルダーから設定モジュールを指すように設定する必要があります。 詳細については、「Django のドキュメント」を参照してください。

よく寄せられる質問

Application Insights の標準メトリックと Azure App Service メトリックの違い

Application Insights では、アプリケーションに対して行われた要求のテレメトリを収集します。 WebApps/WebServer でエラーが発生し、要求がユーザー アプリケーションに到達しなかった場合、それに関するテレメトリは Application Insights に含まれません。

Application Insights によって計算された serverresponsetime の期間は、Web Apps から見たサーバー応答時間とは必ずしも一致しません。 この動作は、Application Insights では、要求がユーザー アプリケーションに実際に到達した場合の期間のみがカウントされるためです。 WebServer で要求の送信が滞った場合やキューに入れられた場合、その待機時間は、Web Apps のメトリックに含まれますが Application Insights のメトリックには含まれません。

トラブルシューティング

ここでは、自動インストルメンテーションを使用して Azure App Services で Python アプリケーションを監視するためのトラブルシューティング ガイドを提供します。

テレメトリの重複

コードで OpenTelemetry の手動インストルメンテーション (Azure Monitor OpenTelemetry DistroAzure Monitor OpenTelemetry Exporter など) を使用していない場合にのみ、App Service で自動インストルメンテーションを使用する必要があります。 手動インストルメンテーションの上に自動インストルメンテーションを使用すると、テレメトリが重複し、コストが増加する可能性があります。 App Service OpenTelemetry の自動インストルメンテーションを使用するには、まずコードから OpenTelemetry の手動インストルメンテーションを削除します。

テレメトリの欠如

テレメトリが欠如している場合は、次の手順に従って、自動インストルメンテーションが正しく有効になっていることを確認します。

手順 1: App Service リソースの Application Insights ブレードを確認する

App Service リソースの [Application Insights] ブレードで自動侵入が有効になっていることを確認します。

[有効化] が選択されている Application Insights タブのスクリーンショット。

手順 2: アプリの設定が正しいことを確認する

ApplicationInsightsAgent_EXTENSION_VERSION アプリ設定が ~3 値に設定されていること、および APPLICATIONINSIGHTS_CONNECTION_STRING が適切な Application Insights リソースを指していることを確認します。

利用可能な Application Insights の設定が表示された App Service のアプリケーション設定のスクリーンショット。

手順 3: 自動インストルメンテーション診断と状態ログを確認する

/var/log/applicationinsights/ に移動して、status_*.json を開きます。

AgentInitializedSuccessfully が true に設定され、IKey に有効なキーが設定されていることを確認します。

JSON ファイルの例を次に示します。

    "AgentInitializedSuccessfully":true,
            
    "AppType":"python",
            
    "MachineName":"c89d3a6d0357",
            
    "PID":"47",
            
    "IKey":"00000000-0000-0000-0000-000000000000",
            
    "SdkVersion":"1.0.0"

同じフォルダー内の applicationinsights-extension.log ファイルには、その他の有用な診断結果が表示される場合があります。

Django アプリ

アプリで Django を使用していて、起動に失敗するか、正しくない設定を使用している場合は、DJANGO_SETTINGS_MODULE 環境変数を必ず設定してください。 詳細については、「Django インストルメンテーション」セクションを参照してください。


アプリケーション ホストとインジェスト サービスの間の接続をテストする

Application Insights SDK とエージェントからテレメトリが送信され、インジェスト エンドポイントへの REST 呼び出しとして取り込まれます。 Web サーバーまたはアプリケーション ホスト マシンからインジェスト サービス エンドポイントへの接続は、PowerShell の生の REST クライアントを使用するか、curl コマンドを使用してテストできます。 「Azure Monitor Application Insights でアプリケーション テレメトリが見つからない場合のトラブルシューティング」をご覧ください。

最新の更新プログラムとバグ修正については、リリース ノートを参照してください。 -->

次のステップ