Elastic APM Java エージェントで Spring Boot アプリを監視する方法

Note

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象: ✔️ Basic または Standard ❌ Enterprise

この記事では、Elastic APM Agent を使用して、Azure Spring Apps で実行している Spring Boot アプリケーションを監視する方法を説明します。

Elastic Observability Solution を使用すると、統一された監視を実現して次のことができます。

  • Elastic APM Java エージェントと Azure Spring Apps の永続ストレージを使用してアプリを監視します。
  • 診断設定を使用して、Azure Spring Apps のログを Elastic に配布します。 詳しくは、「診断設定を使用して Elastic (ELK) でログを分析する」をご覧ください。

次のビデオでは、Elastic を使用した Spring Boot アプリケーションの統一監視が紹介されています。


前提条件

Spring Petclinic アプリケーションをデプロイする

この記事では、Spring Petclinic サンプルを使用して、必要な手順について説明します。 次の手順のようにして、サンプル アプリケーションをデプロイします。

  1. Azure Spring Apps と MySQL を使用して Spring Boot アプリをデプロイする」の手順に従って、「Spring Boot アプリケーションをデプロイして環境変数を設定する」セクションまで進みます。

  2. Azure CLI 用 Azure Spring Apps 拡張機能の次のコマンドを使用して、Azure Spring Apps で実行するアプリケーションを作成します。

    az spring app create \
       --resource-group <your-resource-group-name> \
       --service <your-Azure-Spring-Apps-instance-name> \
       --name <your-app-name> \
       --is-public true
    

Azure Spring Apps 用にカスタム永続ストレージを有効にする

カスタム永続ストレージを有効にするには、次の手順のようにします。

  1. Azure Spring Apps で独自の永続ストレージを有効にする方法」の手順のようにします。

  2. 次の Azure CLI コマンドを使って、Azure Spring Apps アプリ用の永続ストレージを追加します。

    az spring app append-persistent-storage \
       --resource-group <your-resource-group-name> \
       --service <your-Azure-Spring-Apps-instance-name> \
       --name <your-app-name> \
       --persistent-storage-type AzureFileVolume \
       --share-name <your-Azure-file-share-name> \
       --mount-path <unique-mount-path> \
       --storage-name <your-mounted-storage-name>
    

Elastic APM Java エージェントをアクティブにする

次に進む前に、Elastic APM サーバーの接続性情報を用意する必要があります。これは、Azure に Elastic がデプロイされていることを前提としています。 詳しくは、「Elastic を Microsoft Azure にデプロイして管理する方法」をご覧ください。 この情報を取得するには、次の手順のようにします。

  1. Azure portal で Elastic のデプロイの [概要] ページに移動し、[Manage Elastic Cloud Deployment]\(Elastic Cloud のデプロイの管理\) を選びます。

    Azure portal の [Elasticsearch (Elastic Cloud)] ページのスクリーンショット。

  2. Elastic Cloud Console のデプロイの下で、[APM と Fleet] セクションを選択し、Elastic APM Server のエンドポイントとシークレット トークンを取得します。

    [エンドポイントのコピー] と [APM サーバー シークレット トークン] が強調表示された、[Elastic APM と Fleet] ページのスクリーンショット。

  3. Maven Central から Elastic APM Java エージェントをダウンロードします。

    jar のダウンロードが強調表示された、Maven Central のスクリーンショット。

  4. 前に有効にしたカスタム永続ストレージに、Elastic APM Agent をアップロードします。 Azure ファイル共有に移動し、[アップロード] を選んでエージェントの JAR ファイルを追加します。

    [ファイル共有] ページの [ファイルのアップロード] ウィンドウを示す、Azure portal のスクリーンショット。

  5. Elastic APM のエンドポイントとシークレット トークンを取得した後、アプリケーションをデプロイするときに次のコマンドを使って Elastic APM Java エージェントをアクティブにします。 プレースホルダー <agent-location> では、Elastic APM Java エージェントのマウントされたストレージの場所を参照します。

    az spring app deploy \
        --name <your-app-name> \
        --artifact-path <unique-path-to-your-app-jar-on-custom-storage> \
        --jvm-options='-javaagent:<elastic-agent-location>' \
        --env ELASTIC_APM_SERVICE_NAME=<your-app-name> \
              ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package-name>' \
              ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>' \
              ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
    

プロビジョニングを自動化する

Terraform、Bicep、または Azure Resource Manager テンプレート (ARM テンプレート) を使用して、プロビジョニング自動化パイプラインを実行することもできます。 このパイプラインでは、作成およびデプロイする新しいアプリケーションをインストルメント化して監視するための完全なハンズオン エクスペリエンスが提供されます。

Terraform を使用してプロビジョニングを自動化する

Terraform テンプレートで環境変数を構成するには、次のコードをテンプレートに追加し、<...> プレースホルダーを実際の値に置き換えます。 詳細については、Azure Spring Apps のアクティブなデプロイの管理に関するページを参照してください。

resource "azurerm_spring_cloud_java_deployment" "example" {
  ...
  jvm_options = "-javaagent:<elastic-agent-location>"
  ...
    environment_variables = {
      "ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
      "ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
      "ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
      "ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
  }
}

Bicep ファイルを使用してプロビジョニングを自動化する

Bicep ファイルで環境変数を構成するには、次のコードをファイルに追加し、<...> プレースホルダーを実際の値に置き換えます。 詳細については、Microsoft.AppPlatform Spring/apps/deployments を参照してください。

deploymentSettings: {
  environmentVariables: {
    ELASTIC_APM_SERVICE_NAME='<your-app-name>',
    ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package>',
    ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>',
    ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
  },
  jvmOptions: '-javaagent:<elastic-agent-location>',
  ...
}

ARM テンプレートを使用してプロビジョニングを自動化する

ARM テンプレートで環境変数を構成するには、次のコードをテンプレートに追加し、<...> プレースホルダーを実際の値に置き換えます。 詳細については、Microsoft.AppPlatform Spring/apps/deployments を参照してください。

"deploymentSettings": {
  "environmentVariables": {
    "ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
    "ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
    "ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
    "ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
  },
  "jvmOptions": "-javaagent:<elastic-agent-location>",
  ...
}

Elastic APM Java エージェントをアップグレードする

アップグレードを計画するには、Azure での Elastic Cloud のバージョンのアップグレードと APM の破壊的変更に関する説明をご覧ください。 APM サーバーをアップグレードしたら、Elastic APM Java エージェント JAR ファイルをカスタムの永続的ストレージにアップロードします。 次に、アップグレードされた Elastic APM Java エージェント JAR を指す更新された JVM オプションを使用して、アプリを再起動します。

Elastic APM でアプリケーションとメトリックを監視する

アプリケーションとメトリックを監視するには、次の手順のようにします。

  1. Azure portal で Elastic のデプロイの [概要] ページに移動し、Kibana のリンクを選びます。

    デプロイ URL の Kibana リンクが強調表示された Elasticsearch ページを示す、Azure portal のスクリーンショット。

  2. Kibana が開いた後、検索バーで APM を検索して、APM を選択します。

    APM 検索結果を示す、Elastic/Kibana のスクリーンショット。

Kibana APM は、アプリケーション監視ワークフローをサポートするためのキュレーションされたアプリケーションです。 ここでは、要求と応答時間、スループット、継続時間に最も影響を与えているサービス内のトランザクションなど、高レベルの詳細を見ることができます。

APM サービスの [概要] ページを示す、Elastic/Kibana のスクリーンショット。

特定のトランザクションにドリルダウンして、分散トレースなどのトランザクション固有の詳細を把握できます。

APM サービスの [トランザクション] ページを示す、Elastic/Kibana のスクリーンショット。

Elastic APM Java エージェントによって、トラブルシューティングのために Kibana アプリで使用できる JVM メトリックも Azure Spring Apps アプリからキャプチャされます。

APM サービスの [JVM] ページを示す、Elastic/Kibana のスクリーンショット。

Elastic ソリューションに組み込まれている AI エンジンを使用すると、Azure Spring Apps サービスで異常検出を有効にして、Teams の通知、JIRA の問題の作成、Webhook ベースの API 呼び出しなど、適切なアクションを選ぶこともできます。

[ルールの作成] ウィンドウが表示されアクションが強調表示されている [APM サービス] ページを示す、Elastic/Kibana のスクリーンショット。

次のステップ