Azure App Service と Java のアプリケーション監視

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

Note

Spring Boot ネイティブ イメージ アプリケーションでは、以下で説明する Application Insights Java エージェント ソリューションではなく、Spring Boot ネイティブ イメージ Java アプリケーションの Azure Monitor OpenTelemetry Distro/Application Insights プロジェクトを使用します。

Application Insights を有効にする

Azure App Service で実行されている Java アプリケーションのアプリケーション監視を有効にするには、Azure portal を使用することをお勧めします。 Azure portal でアプリケーション監視を有効にすると、Application Insights でアプリケーションが自動的にインストルメント化され、コードの変更は必要ありません。 追加の構成を適用し、特定のシナリオに基づいて、必要に応じて独自のカスタム テレメトリを追加できます。

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

1 回選択するだけで、Azure App Service で実行されている Java アプリの監視を有効にすることができ、コードの変更は必要ありません。 この統合により、Application Insights Java 3.x が追加され、テレメトリが自動収集されます。

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

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

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

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

    Note

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

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

  3. この最後の手順は省略可能です。 使用するリソースを指定したら、Java エージェントを構成できます。 Java エージェントを構成しない場合は、既定の構成が適用されます。

    完全な構成のセットを使用できます。必要なのは、有効な json ファイルを貼り付けることだけです。 プレビュー段階にある接続文字列とすべての構成を除外する - 現在プレビュー段階の項目は、一般提供されたときに追加することができます。

    Azure portal で構成を変更すると APPLICATIONINSIGHTS_CONFIGURATION_FILE 環境変数が自動的に設定され、App Service の設定パネルに表示されます。 この変数には、Azure portal で Java アプリの構成テキスト ボックスに貼り付けた完全な json の内容が含まれます。

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

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

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

監視の自動化

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

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

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

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

Note

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

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 上で実行されている Java ベースのアプリケーションのトラブルシューティングを行います。

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

  2. ログ ファイルを調べて、エージェントが正常に開始されたことを確認します。 https://yoursitename.scm.azurewebsites.net/ でルート ディレクトリへの SSH の変更の下を見ると、ログ ファイルは LogFiles/ApplicationInsights の下にあります。

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

  3. Java アプリのアプリケーション監視を有効にした後、ライブ メトリックを確認すると、エージェントが動作していることを検証できます。App Service にアプリをデプロイする前でも、環境からのいくつかの要求が表示されます。 テレメトリの完全なセットは、アプリがデプロイされて実行している場合にのみ利用可能であることに注意してください。

  4. エラーが表示されず、テレメトリがない場合は、APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL 環境変数を "debug" に設定します

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 でアプリケーション テレメトリが見つからない場合のトラブルシューティング」をご覧ください。

最新の Application Insights Java バージョンを手動でデプロイする

Application Insights Java バージョンは、App Services の更新プログラムの一部として自動的に更新されます。

Application Insights Java の最新バージョンで修正済みの問題が発生する場合は、手動で更新できます。

手動で更新するには、こちらの手順を実行します。

  1. Java エージェントの jar ファイルを App Service にアップロードします

    a. まず、こちらの手順に従って、Azure CLI の最新バージョンを入手します。

    b. 次に、こちらの手順に従って、Application Insights Java エージェントの最新バージョンを入手します。

    c. 次に、こちらのコマンドを使用して、Java エージェント jar ファイルを App Service にデプロイします。az webapp deploy --src-path applicationinsights-agent-{VERSION_NUMBER}.jar --target-path java/applicationinsights-agent-{VERSION_NUMBER}.jar --type static --resource-group {YOUR_RESOURCE_GROUP} --name {YOUR_APP_SVC_NAME} または、このガイドを使用して、Maven プラグインを介してエージェントをデプロイすることもできます。

  2. Azure portal の [Application Insights] タブを使用して Application Insights を無効にします。

  3. エージェント jar ファイルがアップロードされたら、App Service の構成に移動します。 Linux 用のスタートアップ コマンドを使用する必要がある場合は、jvm 引数を含めてください。

    スタートアップ コマンドのスクリーンショット。

    スタートアップ コマンドでは、JavaSE の JAVA_OPTS または Tomcat の CATALINA_OPTS は受け入れられません。

    スタートアップ コマンドを使用しない場合は、値 -javaagent:{PATH_TO_THE_AGENT_JAR}/applicationinsights-agent-{VERSION_NUMBER}.jar で新しい環境変数 (JavaSE の場合は JAVA_OPTS、Tomcat の場合は CATALINA_OPTS) を作成します。

  4. アプリを再起動して変更を適用します。

Note

JavaSE の JAVA_OPTS または Tomcat の CATALINA_OPTS 環境変数を設定する場合は、ポータルで Application Insights を無効にする必要があります。 または、ポータルで Application Insights を有効にしたい場合は、App Service の構成設定で JavaSE の JAVA_OPTS または Tomcat の CATALINA_OPTS 変数を設定していないことを確認してください。

リリース ノート

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

次のステップ