Azure App Service と Node.js でのアプリケーションの監視

Azure App Service で実行されている Node.js の Web アプリケーションを監視するのに、コードを変更する必要はありません。 この記事では、Azure Monitor Application Insights の監視を有効にする手順を説明し、大規模なデプロイ プロセスを自動化する準備となるガイダンスを提供します。

Application Insights を有効にする

Azure App Service で実行されている Node.js アプリケーションのアプリケーション監視を有効にするための最も簡単な方法は、Azure portal を使用することです。 Azure portal でアプリケーション監視を有効にすると、Application Insights でアプリケーションが自動的にインストルメント化され、コードの変更は必要ありません。

Note

App Service 環境変数ブレードの APPLICATIONINSIGHTS_CONFIGURATION_CONTENT 環境変数を使用して、自動的にアタッチされたエージェントを構成できます。 この環境変数を使用して渡すことができる構成オプションの詳細については、Node.js の構成を参照してください。

Note

自動インストルメンテーションと手動の SDK ベースのインストルメンテーションの両方が検出された場合は、手動のインストルメンテーション設定のみが受け付けられます。 これは、重複したデータが送信されないようにするためです。 詳細については、この記事の「トラブルシューティング」セクションを参照してください。

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

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

1 回クリックするだけで、Azure App Service で実行されている Node.js アプリの監視を有効にすることができ、コードの変更は必要ありません。 Node.js 用の Application Insights は、Linux 上の Azure App Service (コードベースとカスタムの両方のコンテナー) および Windows 上の App Service (コードベースのアプリ) と統合されています。 統合はパブリック プレビュー段階です。 統合により、GA である Node.js SDK が追加されます。

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

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

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

    Note

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

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

  3. 使うリソースを指定すると、準備は完了です。

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

構成

JSON を使用して Node.js エージェントを構成できます。 APPLICATIONINSIGHTS_CONFIGURATION_CONTENT 環境変数を JSON 文字列に設定するか、APPLICATIONINSIGHTS_CONFIGURATION_FILE 環境変数を、JSON を含むファイル パスに設定します。

"samplingPercentage": 80,
"enableAutoCollectExternalLoggers": true,
"enableAutoCollectExceptions": true,
"enableAutoCollectHeartbeat": true,
"enableSendLiveMetrics": true,
...
    

完全な構成のセットを使用できます。必要なのは、有効な json ファイルを使用することだけです。

クライアント側の監視を有効にする

Node.js アプリケーションでクライアント側の監視を有効にするには、クライアント側の JavaScript SDK をアプリケーションに手動で追加する必要があります。

監視の自動化

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

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

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

アプリ設定の名前 定義
ApplicationInsightsAgent_EXTENSION_VERSION メインの拡張機能で、実行時の監視を制御します。 Windows では ~2、Linux では ~3
XDT_MicrosoftApplicationInsights_NodeJS Node.js エージェントを含めるかどうかを制御するフラグ。 0 または 1 (Windows にのみ適用)。

Note

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

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

トラブルシューティング

以下は、Azure App Service 上で実行されている Node.js ベースのアプリケーションの拡張機能およびエージェント ベースの監視について、手順を追って説明するトラブルシューティング ガイドです。

  1. ApplicationInsightsAgent_EXTENSION_VERSION アプリ設定が "2 以下" の値に設定されていることを確認します。

  2. https://yoursitename.scm.azurewebsites.net/ApplicationInsights を参照します。

    上記の結果ページのリンクのスクリーンショット。

    • Application Insights Extension StatusPre-Installed Site Extension, version 2.8.x.xxxx, is running. であることを確認します

      実行中ではない場合は、Application Insights の監視を有効にする手順を実行します。

    • D:\local\Temp\status.json に移動して、status.json を開きます。

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

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

        "AppType":"node.js",
    
        "MachineName":"c89d3a6d0357",
    
        "PID":"47",
    
        "AgentInitializedSuccessfully":true,
    
        "SDKPresent":false,
    
        "IKey":"00000000-0000-0000-0000-000000000000",
    
        "SdkVersion":"1.8.10"
    
    

    SDKPresent が true の場合、これは、SDK の一部の側面が既にアプリケーションに存在することが拡張機能で検出され、拡張機能が停止されることを示します。

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

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

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

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

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

リリース ノート

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

次のステップ