

# (オプション) サンプルアプリケーションで Application Signals を試す
<a name="CloudWatch-Application-Signals-Enable-EKS-sample"></a>

サンプルアプリケーションで CloudWatch Application Signals を試した後に、独自のアプリケーションを計測するには、このセクションの手順に従います。次の手順では、スクリプトを使用して Amazon EKS クラスターを作成して、サンプルアプリケーションをインストールします。その後、サンプルアプリケーションを計測し Application Signals と連携させます。

ここでは、Spring を使用する「Pet Clinic」アプリケーションを例に取ります。これは 4 つのマイクロサービスで構成され、いずれも Amazon EC2 上の Amazon EKS で動作し、Application Signals を有効にするスクリプトを利用してクラスターで Java、Python、または .NET 自動計測エージェントを使用可能にします。

**要件**
+ Application Signals でモニタリング可能なのは Java、Python、または .NET アプリケーションのみです。
+ 対象のインスタンスには AWS CLI がインストールされている必要があります。AWS CLI バージョン 2 をお勧めしますが、バージョン 1 でも問題ありません。AWS CLI のインストールについては、「[AWS CLI の最新バージョンを使用してインストールまたは更新を行う](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」で詳しく確認できます。
+ このセクションのスクリプトは Linux 環境と macOS 環境での実行を目的としています。Windows インスタンスの場合は、AWS Cloud9 環境を使用してこれらのスクリプトを実行すると良いでしょう。AWS Cloud9 の詳細については、「[AWS Cloud9 とは](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html)」をご参照ください。
+ サポート対象バージョンの `kubectl` をインストールします。Amazon EKS クラスターコントロールプレーンのマイナーバージョンの差が 1 以内のバージョンの `kubectl` を使用する必要があります。例えば、1.26 の `kubectl` クライアントは、Kubernetes 1.25、1.26、1.27 のクラスターで動作します。既存の Amazon EKS クラスターには、`kubectl` の AWS 認証情報の設定が必要となる場合があります。詳細については、「[Amazon EKS クラスターの `kubeconfig` ファイルを作成または更新する](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html)」を参照してください。
+ `eksctl` をインストールします。`eksctl` と AWS の通信では AWS CLI が使用されるため、eksctl にも AWS CLI と同じ AWS 認証情報が使用されます。詳細については、「[Amazon EMR on EKS のセットアップ](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)」で `eksctl` のインストールまたは更新を確認してください。
+ `jq` をインストールします。`jq` は、Application Signals を有効にするスクリプトの実行に必要となります。詳細については、「[Download jq](https://jqlang.github.io/jq/download/)」を参照してください。

## ステップ 1: スクリプトをダウンロードする
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-scripts"></a>

サンプルアプリケーションを使用して CloudWatch Application Signals を設定するためのスクリプトをダウンロードするには、zip 形式の GitHub プロジェクトファイルをローカルドライブにダウンロードして解凍するか、GitHub プロジェクトのクローンを作成します。

プロジェクトのクローンを作成するには、ターミナルウィンドウを開き、作業ディレクトリで次の Git コマンドを入力します。

```
git clone https://github.com/aws-observability/application-signals-demo.git
```

## ステップ 2: サンプルアプリケーションをビルドしてデプロイする
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-build"></a>

サンプルアプリケーションイメージをビルドしてプッシュするには、[こちらの手順に従います](https://github.com/aws-observability/application-signals-demo?tab=readme-ov-file#build-the-sample-application-images-and-push-to-ecr)。

### ステップ 3: Application Signals とサンプルアプリケーションをデプロイし、有効にする
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-deploy"></a>

次の手順を完了する前に、「[(オプション) サンプルアプリケーションで Application Signals を試す](#CloudWatch-Application-Signals-Enable-EKS-sample)」に記載の要件を満たしていることを確認してください。

**Application Signals とサンプルアプリケーションをデプロイし、有効にするには**

1. 次のコマンドを入力します。*new-cluster-name* は、新規クラスターの名前に置き換えます。*region-name* は、`us-west-1` などの AWS リージョン名に置き換えます。

   このコマンドによって、新規 Amazon EKS クラスターで稼働するサンプルアプリケーションがセットアップされ、Application Signals も有効になります。

   ```
   # this script sets up a new cluster, enables Application Signals, and deploys the
   # sample application
   cd application-signals-demo/scripts/eks/appsignals/one-step && ./setup.sh new-cluster-name region-name
   ```

   セットアップスクリプトの実行には約 30 分かかります。この間に、次の処理が行われます。
   + 指定したリージョンに Amazon EKS クラスターを新規作成する。
   + Application Signals に必要な IAM アクセス権限 (`arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess` と `arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy`) を作成する。
   + Application Signals を有効にします。このために、CloudWatch エージェントをインストールし、CloudWatch メトリクスと X-Ray トレースを考慮してサンプルアプリケーションの自動計測を設定します。
   + PetClinic Spring サンプルアプリケーションを同じ Amazon EKS クラスターにデプロイする。
   + `pc-add-vist`、`pc-create-owners`、`pc-visit-pet`、`pc-visit-vet`、`pc-clinic-traffic` という 5 つの CloudWatch Synthetics canary を作成します。これらの canary を 1 分間隔で実行して、サンプルアプリケーションの合成トラフィックを生成し、Synthetics canary の結果が Application Signals に表示されるようにします。
   + 次の 4 つの名前を使用して、PetClinic アプリケーションのサービスレベル目標 (SLO) を作成します。
     + **所有者検索の可用性**
     + **所有者検索のレイテンシー**
     + **所有者登録の可用性**
     + **所有者登録のレイテンシー**
   + 次のアクセス権限を Application Signals に付与するカスタム信頼ポリシーを使用して、必要な IAM ロールを作成します。
     + `cloudwatch:PutMetricData`
     + `cloudwatch:GetMetricData`
     + `xray:GetServiceGraph`
     + `logs:StartQuery`
     + `logs:GetQueryResults`

1. (オプション) PetClinic サンプルアプリケーションのソースコードを参照したい場合は、ルートフォルダを確認してください。

   ```
   - application-signals-demo
     - spring-petclinic-admin-server
     - spring-petclinic-api-gateway
     - spring-petclinic-config-server
     - spring-petclinic-customers-service
     - spring-petclinic-discovery-server
     - spring-petclinic-vets-service
     - spring-petclinic-visits-service
   ```

1. デプロイした PetClinic サンプルアプリケーションを表示するには、次のコマンドを実行して URL を検索します。

   ```
   kubectl get ingress
   ```

### ステップ 4: サンプルアプリケーションをモニタリングする
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-monitor"></a>

前のセクションのステップを実行し、Amazon EKS クラスターの作成とサンプルアプリケーションのデプロイが完了したら、Application Signals を使用してアプリケーションをモニタリングできます。

**注記**  
Application Signals コンソールで入力を行えるようになるには、サンプルアプリケーションへのトラフィックが発生していなければなりません。そのため、前のステップの途中で、そうしたトラフィックを生成する CloudWatch Synthetics canary を作成しました。

#### サービスの正常性をモニタリングする
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-monitor-service"></a>

これを有効にすると、CloudWatch Application Signals によってサービスのリストが自動的に検出され入力されます。追加の設定は必要ありません。

**検出されたサービスのリストを表示し、それらの正常性をモニタリングするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[サービス]** の順に選択します。

1. サービス、そのオペレーション、依存関係を表示するには、リストにある対象のサービス名を選択します。

   アプリケーションを最重視したこの統合ビューでは、ユーザーとサービスとの間でどのようなやり取りが生じているかを全体的に把握できます。これによって、パフォーマンスに異常が見られた場合に問題の優先順位付を行えます。**[サービス]** ビューの詳細については「[Application Signals を使用したアプリケーションの運用状態のモニタリング](Services.md)」を参照してください。

1. **[サービスオペレーション]** タブを選択すると、そのサービスのオペレーションに関する標準アプリケーションメトリクスが表示されます。オペレーションの例には、サービスが呼び出す API オペレーションなどがあります。

   そのサービスオペレーションの 1 つについてグラフを表示するには、対象のオペレーション名を選択します。

1. **[依存関係]** タブを選択すると、アプリケーションの依存関係に加え、各依存関係の重要なアプリケーションメトリクスが表示されます。依存関係の例には、アプリケーションが呼び出す AWS サービスやサードパーティサービスなどがあります。

1. サービスの詳細ページから相関トレースを表示するには、表の上にある 3 つのグラフのいずれかでデータポイントを選択します。これにより、その期間でフィルタリングされたトレースが新規ペインに表示されます。これらのトレースは、選択したグラフに基づいてソートおよびフィルタリングされています。例えば、**[レイテンシー]** グラフを選択した場合、トレースはサービスの応答時間でソートされます。

1. CloudWatch コンソールのナビゲーションペインで **[SLO]** を選択します。スクリプトを使用してサンプルアプリケーション用に作成した SLO が表示されます。SLO の詳細については、「[サービスレベル目標 (SLO)](CloudWatch-ServiceLevelObjectives.md)」を参照してください。

### ステップ 5: (オプション) クリーンアップする
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-cleanup"></a>

Application Signals のテストが終了したら、Amazon が提供するスクリプトを使用して、アカウントでサンプルアプリケーション用に作成したアーティファクトをクリーンアップし、削除できます。クリーンアップするには、次のコマンドを入力します。*new-cluster-name* をサンプルアプリケーション用に作成したクラスターの名前に、また、*region-name* を AWS リージョンの名前 (`us-west-1` など) に置き換えます。

```
cd application-signals-demo/scripts/eks/appsignals/one-step && ./cleanup.sh new-cluster-name region-name
```