Azure App Service と Python のアプリケーション監視 (プレビュー)
重要
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
コードを変更せずに、Azure App Services で Python Web アプリケーションを監視します。 このガイドでは、Azure Monitor Application Insights を有効にする方法と、大規模なデプロイを自動化するためのヒントについて説明します。
統合により、コード内の一般的な Python ライブラリがインストルメント化され、依存関係、ログ、メトリックを自動的に収集して関連付けることができます。 インストルメント化された後、次の Python ライブラリから呼び出しとメトリックを収集します。
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 Distro や Azure Monitor OpenTelemetry Exporter など) を使用していない場合にのみ、App Service で自動インストルメンテーションを使用する必要があります。 これは、重複したデータが送信されないようにするためです。 この詳細については、この記事の「トラブルシューティング」セクションを参照してください。
Azure portal を使用した自動インストルメンテーション
サポートされている自動インストルメンテーション シナリオの全一覧については、「サポートされている環境、言語、リソース プロバイダー」を参照してください。
コードを変更する必要なく、Azure App Service で Python アプリの監視をオンに切り替えます。
Application Insights for Python は、コードベースの Linux Azure App Service と統合されます。
統合はパブリック プレビュー段階です。 この統合により、GA 内にある Python SDK が追加されます。
お使いのアプリ サービスの Azure コントロール パネルで [Application Insights] を選択し、 [有効化] を選択します。
新しいリソースを作成するか、このアプリケーションの既存の Application Insights リソースを選択します。
Note
[OK] を選択して新しいリソースを作成すると、監視の設定を適用するように求めるメッセージが表示されます。 [続行] を選択すると、新しい Application Insights リソースがアプリ サービスにリンクされ、アプリ サービスの再起動がトリガーされます。
リソースを指定すると、すぐに使用できます。
構成
次のような OpenTelemetry 環境変数を使用して構成できます。
環境変数 | 説明 |
---|---|
OTEL_SERVICE_NAME 、OTEL_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_TRACES_SAMPLER_ARG |
サンプリングする分散トレース テレメトリの比率を指定します。 指定可能な値は、0 ~ 1 です。 既定値は 1.0 のため、テレメトリはサンプリングされません。 |
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS |
無効にする OpenTelemetry インストルメンテーションを指定します。 無効にすると、インストルメンテーションは自動インストルメンテーションの一部として実行されません。 小文字のライブラリ名のカンマ区切りのリストを受け入れます。 たとえば、Psycopg2 および FastAPI インストルメンテーションを無効にするには、"psycopg2,fastapi" に設定します。 既定では空のリストになり、サポートされているすべてのインストルメンテーションが有効になります。 |
コミュニティ インストルメンテーション ライブラリを追加する
OpenTelemetry コミュニティからインストルメンテーション ライブラリを含めると、より多くのデータを自動的に収集できます。
注意事項
コミュニティ インストルメンテーション ライブラリの品質は、サポートおよび保証していません。 ディストリビューションについてのご提案は、フィードバック コミュニティで投稿するか賛成に投票してください。 一部は実験的な OpenTelemetry 仕様に基づいており、今後、破壊的変更が生じる可能性があることにご注意ください。
コミュニティ OpenTelemetry インストルメンテーション ライブラリを追加するには、アプリの requirements.txt
ファイルを使用してインストールします。 OpenTelemetry の自動インストルメンテーションは自動的に選択され、インストールされているすべてのライブラリがインストルメント化されます。 コミュニティ ライブラリの一覧については、こちらを参照してください。
監視の自動化
Application Insights でのテレメトリ収集を有効にするのに必要なのは、次のアプリケーション設定を設定することだけです。
アプリケーション設定の定義
アプリ設定の名前 | 定義 | 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 のリソースと、新しく作成された App Service リソースへのリンクの作成を自動化します。
既定の Application Insights の設定で Resource Manager テンプレートを作成するには、Application Insights を有効にして新しい Web アプリを作成する場合のようにプロセスを開始します。
目的の Web アプリ情報を含む新しい App Service リソースを作成します。 [監視] タブで Application Insights を有効にします。
[Review + create](レビュー + 作成) を選択します。 次に、[オートメーション用のテンプレートをダウンロードする] を選択します。
このオプションにより、必要な設定がすべて設定済みの、最新の Resource Manager テンプレートが生成されます。
次の例で、すべての 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 を使用してアプリケーションの監視を有効にするために必要な操作は、基になるアプリケーション設定の変更のみです。 次の例では、リソース グループ AppMonitoredRG
で AppMonitoredSite
という 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 Distro や Azure Monitor OpenTelemetry Exporter など) を使用していない場合にのみ、App Service で自動インストルメンテーションを使用する必要があります。 手動インストルメンテーションの上に自動インストルメンテーションを使用すると、テレメトリが重複し、コストが増加する可能性があります。 App Service OpenTelemetry の自動インストルメンテーションを使用するには、まずコードから OpenTelemetry の手動インストルメンテーションを削除します。
テレメトリの欠如
テレメトリが欠如している場合は、次の手順に従って、自動インストルメンテーションが正しく有効になっていることを確認します。
手順 1: App Service リソースの Application Insights ブレードを確認する
App Service リソースの [Application Insights] ブレードで自動侵入が有効になっていることを確認します。
手順 2: アプリの設定が正しいことを確認する
ApplicationInsightsAgent_EXTENSION_VERSION
アプリ設定が ~3
値に設定されていること、および APPLICATIONINSIGHTS_CONNECTION_STRING
が適切な Application Insights リソースを指していることを確認します。
手順 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 でアプリケーション テレメトリが見つからない場合のトラブルシューティング」をご覧ください。
最新の更新プログラムとバグ修正については、リリース ノートを参照してください。 -->
次のステップ
- Azure Diagnostics が Application Insights に送信されるように設定する
- サービスの正常性メトリックを監視して、サービスの可用性と応答性を確認する
- 操作イベントが発生したり、メトリックがしきい値を超えたりするたびに、アラート通知を受け取る
- 可用性の概要