

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# オブザーバビリティソリューション
<a name="AMG_solutions"></a>

Amazon Managed Grafana を使用してシステムまたはアプリケーションをモニタリングできます。 AWS は、さまざまな種類のコンピューティングシステムのベースモニタリング設定を作成するのに役立つソリューションを提供します。これらのソリューションは、Amazon Managed Service for Prometheus と Amazon Managed Grafana を使用して、アプリケーションまたはサービスに関するインサイトを提供する Amazon EKS ソリューションをモニタリングします。

**Amazon EKS インフラストラクチャ**、Amazon EKS で実行されている **Java 仮想マシン (JVM) アプリケーション**、Amazon EKS の JVM で実行されている **Apache Kafka アプリケーション**をモニタリングするためのソリューションがあります。

**Topics**
+ [Amazon EKS のモニタリング](solution-eks.md)
+ [JVM アプリケーションのモニタリング](solution-jvm.md)
+ [Kafka アプリケーションのモニタリング](solution-kafka.md)

# Amazon Managed Grafana で Amazon EKS インフラストラクチャをモニタリングするためのソリューション
<a name="solution-eks"></a>

Amazon Elastic Kubernetes Service インフラストラクチャのモニタリングは、Amazon Managed Grafana を使用する最も一般的なシナリオの 1 つです。このページではこのシナリオのソリューションを提供するテンプレートについて説明します。ソリューションは [[AWS Cloud Development Kit (AWS CDK)]](https://docs.aws.amazon.com/cdk/v2/guide/home.html) または [[Terraform]](https://www.terraform.io/) を使用してインストールできます。

このソリューションは以下を設定します。
+ Amazon Managed Service for Prometheus ワークスペースで Amazon EKS クラスターからのメトリクスを保存し、メトリクスをスクレイピングしてそのワークスペースにプッシュするマネージドコレクターを作成します。詳細については、[AWS 「マネージドコレクターによるメトリクスの取り込み](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector.html)」を参照してください。
+ CloudWatch エージェントを使用して、Amazon EKS クラスターからログを収集します。ログは CloudWatch に格納され、Amazon Managed Grafana によってクエリされます。詳細については、「[Amazon EKS のログ記録](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/kubernetes-eks-logging.html)」を参照してください。
+ Amazon Managed Grafana ワークスペースでこれらのログとメトリクスをプルして、クラスターのモニタリングに役立つダッシュボードとアラートを作成します。

このソリューションを適用すると、以下のようなダッシュボードとアラートが作成されます。
+ Amazon EKS クラスターの全体的な健全性を評価します。
+ Amazon EKS コントロールプレーンの健全性とパフォーマンスを表示します。
+ Amazon EKS データプレーンの健全性とパフォーマンスを表示します。
+ Kubernetes 名前空間全体の Amazon EKS ワークロードのインサイトを表示します。
+ CPU、メモリ、ディスク、ネットワーク使用量などの、名前空間全体のリソース使用量を表示します。

## このソリューションについて
<a name="solution-eks-about"></a>

このソリューションは、Amazon EKS クラスターのためにメトリクスを提供するように Amazon Managed Grafana ワークスペースを設定します。メトリクスはダッシュボードとアラートを生成するために使用されます。

このメトリクスは、Kubernetes コントロールとデータプレーンのヘルスとパフォーマンスに関するインサイトを提供するため、Amazon EKS クラスターをより効果的に運用するのに役立ちます。Amazon EKS クラスターに関して、リソース使用状況の詳細なモニタリングなど、ノードレベルからポッド、Kubernetes レベルまで把握できます。

このソリューションには予測機能と修正機能の両方が用意されています。
+ **予測**機能には以下が含まれます。
  + スケジューリングの決定を推進してリソース効率を管理します。例えば、Amazon EKS クラスターの内部ユーザーにパフォーマンスと信頼性の SLA を提供するには、過去の使用状況の追跡に基づいて、ワークロードに十分な CPU リソースとメモリリソースを割り当てることができます。
  + 使用状況の予測: ノード、[[Amazon EBS でサポートされる永続的ボリューム]](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)、[[Application Load Balancer]](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) などの Amazon EKS クラスターリソースの現在の使用状況に基づいて、同様の需要を持つ新製品やプロジェクトなどを事前に計画できます。
  + 潜在的な問題の早期検出: 例えば、Kubernetes 名前空間レベルでリソース消費の傾向を分析することで、ワークロードの使用状況の季節性を理解できます。
+ **修正**機能には以下が含まれます。
  + インフラストラクチャと Kubernetes ワークロードレベルでの問題の平均検出時間 (MTTD) が短縮されます。例えば、トラブルシューティングダッシュボードを見ると、何が問題だったかに関する仮説をすぐにテストして排除できます。
  + スタック内のどこで問題が発生しているか判断します。例えば、Amazon EKS コントロールプレーンは によって完全に管理 AWS されており、API サーバーが過負荷になったり、接続が影響を受けたりすると、Kubernetes デプロイの更新などの特定のオペレーションが失敗する可能性があります。

次の図はソリューションのダッシュボードフォルダのサンプルを示しています。

![\[このソリューションを使用して構築した Grafana ダッシュボードフォルダの例を示すイメージ。\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/images/eks-solution-dashboard-folder.png)


ダッシュボードを選択して詳細を表示できます。例えば、ワークロードのコンピューティングリソースの表示を選択すると、次のイメージに示すようなダッシュボードが表示されます。

![\[このソリューションを使用して構築した、CPU 使用率を示す Grafana ダッシュボードの例を示す画像。\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/images/eks-solution-dashboard-resource-usage.png)


メトリクスは 1 分間のスクレイプ間隔でスクレイプされます。ダッシュボードには、特定のメトリクスに基づいて、1 分、5 分、またはそれ以上に集約されたメトリクスが表示されます。

ログはダッシュボードにも表示されるため、ログをクエリおよび分析して、問題の根本原因を見つけることができます。次の画像は、ログダッシュボードの例を示しています。

![\[このソリューションを使用して構築した、ログを含む Grafana ダッシュボードの例を示すイメージ。\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/images/eks-solution-dashboard-logs.png)


このソリューションで追跡されるメトリクスのリストについては、「[追跡されるメトリクスのリスト](#solution-eks-metrics)」を参照してください。

ソリューションによって作成されたアラートのリストについては、「[作成済みアラートのリスト](#solution-eks-alerts)」を参照してください。

## コスト
<a name="solution-eks-costs"></a>

このソリューションは、ワークスペース内にリソースを作成して使用します。作成したリソースの標準使用量に対して課金されますが、これには以下が含まれます。
+ ユーザーによる Amazon Managed Grafana ワークスペースアクセス。料金に関する詳細については、「[Amazon Managed Grafana の料金](https://aws.amazon.com/grafana/pricing/)」を参照してください。
+ Amazon Managed Service for Prometheus エージェントレスコレクターの使用、メトリクス分析 (クエリサンプル処理) などの、Amazon Managed Service for Prometheus メトリクスの取り込みとストレージ。このソリューションで使用されるメトリクス数は、Amazon EKS クラスターの設定と使用状況によって異なります。

  CloudWatch を使用して、Amazon Managed Service for Prometheus で取り込みメトリクスとストレージメトリクスを表示できます。詳細については、*Amazon Managed Service for Prometheus ユーザーガイド*の [[CloudWatch メトリクス]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) を参照してください。

  [Amazon Managed Service for Prometheus の料金](https://aws.amazon.com/prometheus/pricing/)ページでは、料金計算ツールを使用してコストを見積もることができます。メトリクス数は、クラスター内のノード数と、アプリケーションが生成するメトリクスによって異なります。
+ CloudWatch Logs の取り込み、ストレージ、分析。デフォルトでは、ログ保持は有効期限が切れないように設定されています。これは CloudWatch 内で調整できます。料金の詳細については、「「[Amazon CloudWatch 料金表](https://aws.amazon.com/cloudwatch/pricing/)」を参照してください。
+ ネットワークコスト。クロスアベイラビリティーゾーン、リージョン、またはその他のトラフィックに対して標準 AWS ネットワーク料金が発生する場合があります。

各製品の料金ページから利用できる料金計算ツールは、ソリューションの潜在的コストを理解するのに役立ちます。以下の情報は、Amazon EKS クラスターと同じアベイラビリティーゾーンで実行されているソリューションの、基本コストを取得するのに役立ちます。


| 製品 | 計算メトリクス | 値 | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | アクティブなシリーズ | 8000 (ベース) 15,000 (ノードあたり) | 
|  | 平均収集間隔 | 60 (秒) | 
| Amazon Managed Service for Prometheus (マネージドコレクター) | コレクター数 | 1 | 
|  | サンプル数 | 15 (ベース) 150 (ノードあたり) | 
|  | ルールの数 | 161 | 
|  | 平均ルール抽出間隔 | 60 (秒) | 
| Amazon Managed Grafana | アクティブなエディタ/管理者の数 | 1 (またはユーザーに基づき、さらに多く) | 
| CloudWatch (Logs) | 標準 Logs: データインジェスト | 24.5 GB (ベース) 0.5 GB (ノードあたり) | 
|  | ログストレージ/アーカイブ (標準 Logs と Vended Logs) | ログを保存する: 1 か月の保持を前提 | 
|  | スキャンされた予想ログデータ | Grafana からの各ログインサイトクエリは、指定期間のグループからのすべてのログコンテンツをスキャンします。 | 

これらの数値は、追加ソフトウェアなしで EKS を実行するソリューションのベース番号です。これにより基本コストの見積もりが得られます。また、ネットワーク使用コストも削減されます。これは、Amazon Managed Grafana ワークスペース、Amazon Managed Service for Prometheus ワークスペース、Amazon EKS クラスターが同じアベイラビリティーゾーン、 AWS リージョンおよび VPN にあるかどうかによって異なります。

**注記**  
このテーブルの項目に `(base)` 値とリソースあたりの値 (例: `(per node)`) が含まれている場合は、ベース値にリソースあたりの値を加えて、そのリソースの数を乗じる必要があります。例えば、**[平均アクティブ時系列]** の場合、`8000 + the number of nodes in your cluster * 15,000` の数値を入力します。ノードが 2 つある場合は、`38,000` と入力し、これは `8000 + ( 2 * 15,000 )` です。

## 前提条件
<a name="solution-eks-prerequisites"></a>

このソリューションを使用する前に、次のことを行う必要があります。

1. モニタリングする **[Amazon Elastic Kubernetes Service クラスターを作成する]**、またはそのクラスターがあるいる必要があります。そのクラスターには少なくとも 1 つのノードが必要です。クラスターには、プライベートアクセスを含めるように設定された API サーバーエンドポイントアクセスが必要です (パブリックアクセスを許可することもできます)。

   [認証モード](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam)に API アクセスを含める必要があります (`API` または `API_AND_CONFIG_MAP` に設定)。これによりソリューションデプロイでアクセスエントリを使用できます。

   クラスターには、以下をインストールする必要があります (コンソール経由でクラスターを作成する場合はデフォルトで true ですが、 AWS API または を使用してクラスターを作成する場合は追加する必要があります AWS CLI)。 AWS CNI、CoreDNS、Kube-proxy AddOns。

   *クラスター名を保存して後で指定します*。これは Amazon EKS コンソールのクラスター詳細にあります。
**注記**  
Amazon EKS クラスターの作成方法の詳細については、「[Amazon EKS の使用方法](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)」を参照してください。

1. Amazon EKS クラスター AWS アカウント と同じ に Amazon **Managed Service for Prometheus ワークスペースを作成**する必要があります。詳細については、*[Amazon Managed Service for Prometheus ユーザーガイド]* の [[ワークスペースの作成]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) を参照してください。

   *Amazon Managed Service for Prometheus ワークスペース ARN を保存して後で指定します。*

1. **Grafana バージョン 9 以降の Amazon Managed Grafana ワークスペースは、Amazon EKS クラスターと同じ に作成**する必要があります。 AWS リージョン 新しいワークスペースの作成の詳細については、「[Amazon Managed Grafana ワークスペースを作成する](AMG-create-workspace.md)」を参照してください。

   ワークスペースロールには、Amazon Managed Service for Prometheus および Amazon CloudWatch API にアクセスするためのアクセス許可が必要です。この許可を付与する最も簡単な方法は、[[サービス管理のアクセス許可]](AMG-manage-permissions.md)を使用して、Amazon Managed Service for Prometheus と CloudWatch を選択することです。[AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess) ポリシーと [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess) ポリシーをワークスペース IAM ロールに手動で追加することもできます。

   *Amazon Managed Grafana ワークスペース ID とエンドポイントを保存して後で指定します。*ID は `g-123example` の形式になります。ID とエンドポイントは Amazon Managed Grafana コンソールにあります。エンドポイントはワークスペースの URL で、ID が含まれます。例えば、`https://g-123example.grafana-workspace.<region>.amazonaws.com/`。

1. Terraform でソリューションをデプロイするには、アカウントからアクセスできる **[Amazon S3 バケット]** を作成する必要があります。これはデプロイの Terraform 状態ファイルを保存するために使用されます。

   *Amazon S3 バケット ID を保存して後で指定します。*

1. Amazon Managed Service for Prometheus のアラートルールを表示するには、Amazon Managed Grafana ワークスペースの [[Grafana アラート]](v10-alerting-use-grafana-alerts.md)を有効にする必要があります。

   さらに、Amazon Managed Grafana には Prometheus リソースに対する次のアクセス許可が必要です。これらのアクセス許可は、[AWS データソースの Amazon Managed Grafana アクセス許可とポリシー](AMG-manage-permissions.md) で説明されているサービス管理ポリシーとカスタマー管理ポリシーのいずれかに追加する必要があります。
   + `aps:ListRules`
   + `aps:ListAlertManagerSilences`
   + `aps:ListAlertManagerAlerts`
   + `aps:GetAlertManagerStatus`
   + `aps:ListAlertManagerAlertGroups`
   + `aps:PutAlertManagerSilences`
   + `aps:DeleteAlertManagerSilence`

**注記**  
ソリューションのセットアップが必ず必要なわけではありませんが、作成されたダッシュボードにアクセスするには、Amazon Managed Grafana ワークスペースでユーザー認証を設定する必要があります。詳細については、「[Amazon Managed Grafana ワークスペースでユーザーを認証する](authentication-in-AMG.md)」を参照してください。

## このソリューションの使用
<a name="solution-eks-use"></a>

このソリューションは、Amazon EKS クラスターからのメトリクスのレポートとモニタリングをサポートするように AWS インフラストラクチャを設定します。[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) または [Terraform](https://www.terraform.io/) を使用してインストールできます。

------
#### [ Using AWS CDK ]

このソリューションを提供する 1 つの方法は、 AWS CDK アプリケーションとして提供されることです。使用するリソースに関する情報を提供すると、ソリューションはスクレイパー、ログ、ダッシュボードを作成します。

**注記**  
ここでのステップでは、 AWS CLI、、および [Node.js](https://nodeja.org/) AWS CDKと [NPM](https://docs.npmjs.com/) の両方がインストールされている環境があることを前提としています。`make` と `brew` を使用して、ビルドやその他の一般的なアクションを簡素化します。

**このソリューションを使用して で Amazon EKS クラスターをモニタリングするには AWS CDK**

1. [前提条件](#solution-eks-prerequisites)のすべてのステップを完了済みであることを確認してください。

1. Amazon S3 からソリューションのファイルすべてをダウンロードします。ファイルは `s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac` にあり、次の Amazon S3 コマンドを使用してダウンロードできます。コマンドライン環境のフォルダから、このコマンドを実行します。

   ```
   aws s3 sync s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac/ .
   ```

   これらのファイルを修正する必要はありません。

1. コマンドライン環境で (ソリューションファイルをダウンロードしたフォルダから)、次のコマンドを実行します。

   必要な環境変数を設定します。*REGION*、*AMG\$1ENDPOINT*、*EKS\$1CLUSTER*、*AMP\$1ARN* を AWS リージョン、Amazon Managed Grafana ワークスペースエンドポイント ( の形式`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`)、Amazon EKS クラスター名、Amazon Managed Service for Prometheus ワークスペース ARN に置き換えます。

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Grafana HTTP API を呼び出すには、ADMIN アクセス許可を持つサービスアカウントトークンを作成する必要があります。詳細については、「[サービスアカウントを使用した Grafana HTTP API の認証](service-accounts.md)」を参照してください。トークンを作成するには、次のコマンド AWS CLI で を使用できます。*GRAFANA\$1ID* を ご使用の Grafana ワークスペースの ID に置き換える必要があります (`g-123example` 形式)。このキーは 7,200 秒または 2 時間後に期限が切れます。必要に応じて、時間 (`seconds-to-live`) を変更できます。デプロイにかかる時間は 1 時間未満です。

   ```
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
     
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   次のコマンドを使用して API キーを に追加 AWS CDK することで、 API キー AWS Systems Manager を で使用できるようにします。*AWS\$1REGION* を、ソリューションを実行するリージョンに置き換えます (`us-east-1` 形式)。

   ```
   aws ssm put-parameter --name "/observability-aws-solution-eks-infra/grafana-api-key" \
       --type "SecureString" \
       --value $AMG_API_KEY \
       --region AWS_REGION \
       --overwrite
   ```

1. 次の `make` コマンドを実行して、プロジェクトの他の依存関係をインストールします。

   ```
   make deps
   ```

1. 最後に、 AWS CDK プロジェクトを実行します。

   ```
   make build && make pattern aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME deploy
   ```

1. (オプション) スタックの作成が完了したら、他の各前提条件 (個別の Amazon Managed Grafana ワークスペースと Amazon Managed Service for Prometheus ワークスペースを含む) を満たす限り、同じ環境を使用して、同じリージョン内の他の Amazon EKS クラスターにスタックのインスタンスをさらに作成できます。新しいパラメータで `export` コマンドを再定義する必要があります。

スタックの作成が完了すると、Amazon Managed Grafana ワークスペースにデータが入力されて、ダッシュボードに Amazon EKS クラスターのメトリクスが表示されます。スクレイパーがメトリクスの収集を開始するため、メトリクスが表示されるまでに数分かかります。

------
#### [ Using Terraform ]

このソリューションを提供する方法の 1 つは、Terraform ソリューションを使用することです。使用するリソースに関する情報を提供すると、ソリューションはスクレイパー、ログ、ダッシュボードを作成します。

**このソリューションを使用して Terraform で Amazon EKS クラスターをモニタリングする方法**

1. [前提条件](#solution-eks-prerequisites)のすべてのステップを完了済みであることを確認してください。

1. Amazon S3 からソリューションのファイルすべてをダウンロードします。ファイルは `s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/` にあり、次の Amazon S3 コマンドを使用してダウンロードできます。コマンドライン環境内のフォルダからこのコマンドを実行して、デプロイするフォルダにディレクトリを変更します。

   ```
   aws s3 sync s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/ .
   cd eks-monitoring
   ```

   これらのファイルを修正する必要はありません。

1. コマンドライン環境で (ソリューションファイルをダウンロードしたフォルダから)、次のコマンドを実行します。

   必要な環境変数を設定します。*REGION*、*AMG\$1ENDPOINT*、*EKS\$1CLUSTER*、*AMP\$1ARN*、および *S3\$1ID* を、新しいリソースをデプロイ AWS リージョン する ( など`us-east-1`)、Amazon Managed Grafana ワークスペースエンドポイント ( の形式`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`)、Amazon EKS クラスター名、Amazon Managed Service for Prometheus ワークスペース ARN、および Amazon S3 バケット ID に置き換えます。

   ```
   export TF_VAR_aws_region=REGION
   export TF_VAR_amg_endpoint=AMG_ENDPOINT
   export TF_VAR_eks_cluster_name=EKS_CLUSTER
   export TF_VAR_amp_ws_arn=AMP_ARN
   export TF_VAR_s3_bucket_id=S3_ID
   ```

1. Grafana HTTP API を呼び出すには、ADMIN アクセス許可を持つサービスアカウントトークンを作成する必要があります。詳細については、「[サービスアカウントを使用した Grafana HTTP API の認証](service-accounts.md)」を参照してください。トークンを作成するには、次のコマンド AWS CLI で を使用できます。*GRAFANA\$1ID* を ご使用の Grafana ワークスペースの ID に置き換える必要があります (`g-123example` 形式)。このキーは 7,200 秒または 2 時間後に期限が切れます。必要に応じて、時間 (`seconds-to-live`) を変更できます。デプロイにかかる時間は 1 時間未満です。

   ```
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
     
   # creates a new token for running Terraform
   export TF_VAR_grafana_api_key=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```
**注記**  
上記の最初のステップでは、すでにサービスアカウントをお持ちの場合はワークスペースのサービスアカウントを作成する必要はありません。この場合、*\$1GRAFANA\$1SA\$1ID* をご使用のサービスアカウントの ID に置き換えます。

1. 次の `terraform` コマンドを実行して、ソリューションで Terraform を初期化します。

   ```
   terraform init -reconfigure \
   -backend-config="bucket=${TF_VAR_s3_bucket_id}" \
   -backend-config="region=${TF_VAR_aws_region}" \
   -backend-config="key=state/${TF_VAR_eks_cluster_name}/terraform.tfstate"
   ```

1. 最後に、Terraform プロジェクトをデプロイします。

   ```
   terraform apply
   ```

ソリューションの作成が完了すると、Amazon Managed Grafana ワークスペースにデータが入力されて、ダッシュボードに Amazon EKS クラスターのメトリクスが表示されます。スクレイパーがメトリクスの収集を開始するため、メトリクスが表示されるまでに数分かかります。

------

## 追跡されるメトリクスのリスト
<a name="solution-eks-metrics"></a>

このソリューションは Amazon EKS クラスターからメトリクスを収集するスクレイパーを作成します。これらのメトリクスは Amazon Managed Service for Prometheus に格納され、Amazon Managed Grafana ダッシュボードに表示されます。デフォルトでは、スクレイパーはクラスターが公開するすべての [Prometheus 互換メトリクス](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-compatible-metrics.html)を収集します。より多くのメトリクスを生成するクラスターにソフトウェアをインストールすると、収集されるメトリクスが増加します。必要に応じて、[メトリクスをフィルタリングする設定でスクレイパーを更新](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration)して、メトリクス数を減らすことができます。

このソリューションでは、追加ソフトウェアをインストールしないベース Amazon EKS クラスター設定で、次のメトリクスを追跡します。


| メトリクス | 説明/目的 | 
| --- | --- | 
|  `aggregator_unavailable_apiservice`  |  APIService 名で分類された、使用不可としてマークされた APIServices のゲージ。  | 
|  `apiserver_admission_webhook_admission_duration_seconds_bucket`  |  名前で識別され、各オペレーションと API リソースとタイプ (検証または承認) ごとに分割された、秒単位のアドミッションウェブフックのレイテンシーヒストグラム。  | 
|  `apiserver_current_inflight_requests`  |  過去 1 秒のリクエストタイプごとの、現在使用されているこの apiserver の保留リクエスト制限の最大数。  | 
|  `apiserver_envelope_encryption_dek_cache_fill_percent`  |  キャッシュされた DEK が現在占めているキャッシュスロットのパーセント。  | 
|  `apiserver_flowcontrol_current_executing_requests`  |  API Priority and Fairness サブシステムの初期 (WATCH の場合) または任意の (WATCH 以外の場合) 実行ステージのリクエスト数。  | 
|  `apiserver_flowcontrol_rejected_requests_total`  |  拒否された API Priority and Fairness サブシステムの初期 (WATCH の場合) または任意の (WATCH 以外の場合) 実行ステージのリクエスト数。  | 
|  `apiserver_flowcontrol_request_concurrency_limit`  |  各優先度レベルに設定されている、実行シートの公称数。  | 
|  `apiserver_flowcontrol_request_execution_seconds_bucket`  |  API Priority and Fairness サブシステムにおけるリクエスト実行の初期ステージ (WATCH の場合) または任意の (WATCH 以外の場合) ステージの持続期間の、バケット化ヒストグラム。  | 
|  `apiserver_flowcontrol_request_queue_length_after_enqueue_count`  |  API Priority and Fairness サブシステムにおけるリクエスト実行の初期ステージ (WATCH の場合) または任意の (WATCH 以外の場合) ステージのカウント。  | 
|  `apiserver_request`  |  API サーバーリクエストを示します。  | 
|  `apiserver_requested_deprecated_apis`  |  API グループ、バージョン、リソース、サブリソース、removed\$1release 別に分類された、リクエストされた非推奨 API のゲージ。  | 
|  `apiserver_request_duration_seconds`  |  verb、dry run 値、グループ、バージョン、リソース、サブリソース、スコープ、コンポーネントごとの、秒単位の応答遅延分布。  | 
|  `apiserver_request_duration_seconds_bucket`  |  verb、dry run 値、グループ、バージョン、リソース、サブリソース、スコープ、コンポーネントごとの、秒単位の応答遅延分布のバケット化ヒストグラム。  | 
|  `apiserver_request_slo_duration_seconds`  |  verb、dry run 値、グループ、バージョン、リソース、サブリソース、スコープ、コンポーネントごとの、サービスレベル目標 (SLO) の秒単位の応答遅延分布。  | 
|  `apiserver_request_terminations_total`  |  apiserver が自己防衛で終了したリクエスト数。  | 
|  `apiserver_request_total`  |  verb、dry run 値、グループ、バージョン、リソース、スコープ、コンポーネント、HTTP レスポンスコードごとに分割された apiserver リクエストのカウンター。  | 
|  `container_cpu_usage_seconds_total`  |  cpu 累積消費時間。  | 
|  `container_fs_reads_bytes_total`  |  読み取られたバイトの累積カウント。  | 
|  `container_fs_reads_total`  |  完了した読み取りの累積カウント。  | 
|  `container_fs_writes_bytes_total`  |  書き込まれたバイトの累積カウント。  | 
|  `container_fs_writes_total`  |  完了した書き込みの累積カウント。  | 
|  `container_memory_cache`  |  ページキャッシュメモリの合計。  | 
|  `container_memory_rss`  |  RSS のサイズ。  | 
|  `container_memory_swap`  |  コンテナスワップの使用状況。  | 
|  `container_memory_working_set_bytes`  |  現在のワーキングセット。  | 
|  `container_network_receive_bytes_total`  |  受信したバイトの累積カウント。  | 
|  `container_network_receive_packets_dropped_total`  |  受信中にドロップされたパケットの累積カウント。  | 
|  `container_network_receive_packets_total`  |  受信したパケットの累積カウント。  | 
|  `container_network_transmit_bytes_total`  |  送信されたバイトの累積カウント。  | 
|  `container_network_transmit_packets_dropped_total`  |  送信中にドロップされたパケットの累積カウント。  | 
|  `container_network_transmit_packets_total`  |  送信されたパケットの累積カウント。  | 
|  `etcd_request_duration_seconds_bucket`  |  オペレーションとオブジェクトタイプごとの、秒単位の etcd リクエストのレイテンシーのバケット化ヒストグラム。  | 
|  `go_goroutines`  |  現在存在する goroutine 数。  | 
|  `go_threads`  |  作成された OS スレッド数。  | 
|  `kubelet_cgroup_manager_duration_seconds_bucket`  |  cgroup マネージャーオペレーションの、秒単位の持続期間のバケット化ヒストグラム。メソッドにより分類。  | 
|  `kubelet_cgroup_manager_duration_seconds_count`  |  cgroup マネージャーオペレーションの秒単位の持続期間。メソッドにより分類。  | 
|  `kubelet_node_config_error`  |  ノードで設定関連のエラーが発生した場合はこのメトリクスが真 (1) となり、それ以外の場合は偽 (0) となります。  | 
|  `kubelet_node_name`  |  ノードの名前。カウントは常に 1 です。  | 
|  `kubelet_pleg_relist_duration_seconds_bucket`  |  PLEG でポッドを再び一覧表示するための、秒単位の持続時間のバケット化ヒストグラム。  | 
|  `kubelet_pleg_relist_duration_seconds_count`  |  PLEG でポッドを再び一覧表示するための、秒単位の持続時間のカウント。  | 
|  `kubelet_pleg_relist_interval_seconds_bucket`  |  PLEG で再び一覧表示するまでの間隔の、バケット化ヒストグラム。  | 
|  `kubelet_pod_start_duration_seconds_count`  |  kubelet がポッドを初めて確認したときからポッドの実行が開始されるまでの、秒単位の持続時間カウント。  | 
|  `kubelet_pod_worker_duration_seconds_bucket`  |  1 つのポッドを同期するための、秒単位の持続時間のバケット化ヒストグラム。作成、更新、同期のオペレーションタイプにより分類。  | 
|  `kubelet_pod_worker_duration_seconds_count`  |  1 つのポッドを同期する、秒単位の持続時間カウント。作成、更新、同期のオペレーションタイプにより分類。  | 
|  `kubelet_running_containers`  |  現在実行中のコンテナ数。  | 
|  `kubelet_running_pods`  |  実行中のポッドサンドボックスを持つポッド数。  | 
|  `kubelet_runtime_operations_duration_seconds_bucket`  |  ランタイムオペレーションの、秒単位の持続時間のバケット化ヒストグラム。オペレーションタイプにより分類。  | 
|  `kubelet_runtime_operations_errors_total`  |  オペレーションタイプごとのランタイムオペレーションエラーの累積数。  | 
|  `kubelet_runtime_operations_total`  |  オペレーションタイプごとのランタイムオペレーションの累積数。  | 
|  `kube_node_status_allocatable`  |  ポッドに割り当て可能なリソースの量 (システムデーモン用に一部を予約後)。  | 
|  `kube_node_status_capacity`  |  ノードで使用できるリソースの合計量。  | 
|  `kube_pod_container_resource_limits (CPU)`  |  コンテナがリクエストした制限リソース数。  | 
|  `kube_pod_container_resource_limits (Memory)`  |  コンテナがリクエストした制限リソース数。  | 
|  `kube_pod_container_resource_requests (CPU)`  |  コンテナがリクエストしたリクエストリソース数。  | 
|  `kube_pod_container_resource_requests (Memory)`  |  コンテナがリクエストしたリクエストリソース数。  | 
|  `kube_pod_owner`  |  ポッドの所有者に関する情報。  | 
|  `kube_resourcequota`  |  Kubernetes のリソースクォータでは、名前空間内の CPU、メモリ、ストレージなどのリソースに使用制限を適用します。  | 
|  `node_cpu`  |  コアあたりの使用量と合計使用量を含む、ノードの CPU 使用量メトリクス。  | 
|  `node_cpu_seconds_total`  |  各モードで消費された CPU の秒数。  | 
|  `node_disk_io_time_seconds`  |  ノードがディスクで I/O オペレーションを実行した累積合計時間。  | 
|  `node_disk_io_time_seconds_total`  |  ノードがディスクで I/O オペレーションを実行した合計時間。  | 
|  `node_disk_read_bytes_total`  |  ノードがディスクから読み込んだ合計バイト数。  | 
|  `node_disk_written_bytes_total`  |  ノードがディスクに書き込んだ合計バイト数。  | 
|  `node_filesystem_avail_bytes`  |  Kubernetes クラスター内のノードのファイルシステムで使用可能なスペースのバイト量。  | 
|  `node_filesystem_size_bytes`  |  ノード上のファイルシステムの合計サイズ。  | 
|  `node_load1`  |  ノードの CPU 使用率の 1 分間の負荷平均。  | 
|  `node_load15`  |  ノードの CPU 使用率の 15 分間の負荷平均。  | 
|  `node_load5`  |  ノードの CPU 使用率の 5 分間の負荷平均。  | 
|  `node_memory_Buffers_bytes`  |  ノードのオペレーティングシステムがバッファキャッシュに使用したメモリ量。  | 
|  `node_memory_Cached_bytes,`  |  ノードのオペレーティングシステムがディスクキャッシュに使用したメモリ量。  | 
|  `node_memory_MemAvailable_bytes`  |  アプリケーションとキャッシュで使用できるメモリ量。  | 
|  `node_memory_MemFree_bytes`  |  ノードで使用可能な空きメモリ量。  | 
|  `node_memory_MemTotal_bytes`  |  ノードで使用可能な物理メモリ合計量。  | 
|  `node_network_receive_bytes_total`  |  ノードによって、ネットワーク経由で受信されている合計バイト数。  | 
|  `node_network_transmit_bytes_total`  |  ノードによって、ネットワーク経由で送信されている合計バイト数。  | 
|  `process_cpu_seconds_total`  |  ユーザー合計数および秒単位のシステム CPU 消費時間合計。  | 
|  `process_resident_memory_bytes`  |  バイト単位の常駐メモリサイズ。  | 
|  `rest_client_requests_total`  |  ステータスコード、メソッド、ホストでパーティション分割された、HTTP リクエスト数。  | 
|  `rest_client_request_duration_seconds_bucket`  |  秒単位のリクエストレイテンシーのバケット化ヒストグラム。verb とホストで分類。  | 
|  `storage_operation_duration_seconds_bucket`  |  ストレージオペレーションの持続期間のバケット化ヒストグラム。  | 
|  `storage_operation_duration_seconds_count`  |  ストレージオペレーションの持続期間カウント。  | 
|  `storage_operation_errors_total`  |  ストレージオペレーション中の累積エラー数。  | 
|  `up`  |  モニタリング対象のターゲット (ノードなど) が稼働しているかどうかを示すメトリクス。  | 
|  `volume_manager_total_volumes`  |  ボリュームマネージャーにより管理されるボリューム合計数。  | 
|  `workqueue_adds_total`  |  workqueue が処理する合計追加数。  | 
|  `workqueue_depth`  |  現在の workqueue の深さ。  | 
|  `workqueue_queue_duration_seconds_bucket`  |  リクエストされるまでに項目が workqueue に留まる時間を秒単位で示す、バケット化ヒストグラム。  | 
|  `workqueue_work_duration_seconds_bucket`  |  workqueue の項目の処理にかかる時間を秒単位で示す、バケット化ヒストグラム。  | 

## 作成済みアラートのリスト
<a name="solution-eks-alerts"></a>

次の表はこのソリューションが作成するアラートの一覧です。Amazon Managed Service for Prometheus ではアラートがルールとして作成され、Amazon Managed Grafana ワークスペースに表示されます。

Amazon Managed Service for Prometheus ワークスペースで[[ルール設定ファイルの編集]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-rules-edit.html)を実行すると、ルールを追加または削除してルールを変更できます。

これらの 2 つのアラートは、一般的なアラートとは少し異なる処理される特別なアラートです。問題を警告する代わりに、システムのモニタリングに使用する情報を提供します。説明にはこれらのアラートの使用方法に関する詳細が含まれています。


| アラート | 説明および使用状況 | 
| --- | --- | 
| `Watchdog` | これはアラートパイプライン全体が機能することを保証するためのアラートです。このアラートは常に発せられるため、常にアラートマネージャーで発し、常に受信者に対して発する必要があります。これを通知メカニズムと統合して、このアラートが発してい*ない*ときに通知を送信できます。例えば、PagerDuty では **DeadMansSnitch** 統合を使用できます。 | 
| `InfoInhibitor` | これは情報アラートを抑制するために使用するアラートです。それ自体では、情報レベルのアラートはノイズが非常に多い場合がありますが、他のアラートと組み合わせると現実的になります。このアラートは `severity=info` アラートがあるたびに発生し、重要度が `warning` または `critical` のアラートが同じ名前空間で発生し始めると、発生が停止します。このアラートは null レシーバーにルーティングされ、`severity=info` でアラートを抑制するように設定する必要があります。 | 

次のアラートはシステムに関する情報または警告を提供します。


| アラート | 緊急度 | 説明 | 
| --- | --- | --- | 
|  `NodeNetworkInterfaceFlapping`  | warning |  ネットワークインターフェイスが頻繁にステータスを変更しています。  | 
|  `NodeFilesystemSpaceFillingUp`  | warning |  ファイルシステムのスペースが今後 24 時間以内に不足すると予測されます。  | 
|  `NodeFilesystemSpaceFillingUp`  | critical |  ファイルシステムのスペースが今後 4 時間以内に不足すると予測されます。  | 
|  `NodeFilesystemAlmostOutOfSpace`  | warning |  ファイルシステムの残りのスペースが 5% 未満です。  | 
|  `NodeFilesystemAlmostOutOfSpace`  | critical |  ファイルシステムの残りのスペースが 3% 未満です。  | 
|  `NodeFilesystemFilesFillingUp`  | warning |  ファイルシステムの inode が今後 24 時間以内に不足すると予測されます。  | 
|  `NodeFilesystemFilesFillingUp`  | critical |  ファイルシステムの inode が今後 4 時間以内に不足すると予測されます。  | 
|  `NodeFilesystemAlmostOutOfFiles`  | warning |  ファイルシステムの残りの inode が 5% 未満です。  | 
|  `NodeFilesystemAlmostOutOfFiles`  | critical |  ファイルシステムの残りの inode が 3% 未満です。  | 
|  `NodeNetworkReceiveErrs`  | warning |  ネットワークインターフェイスが多くの受信エラーを報告しています。  | 
|  `NodeNetworkTransmitErrs`  | warning |  ネットワークインターフェイスが多くの送信エラーを報告しています。  | 
|  `NodeHighNumberConntrackEntriesUsed`  | warning |  conntrack エントリ数が制限に近づいています。  | 
|  `NodeTextFileCollectorScrapeError`  | warning |  Node Exporter のテキストファイルコレクターがスクレイピングに失敗しました。  | 
|  `NodeClockSkewDetected`  | warning |  クロックスキューが検出されました。  | 
|  `NodeClockNotSynchronizzing`  | warning |  クロックが同期していません。  | 
|  `NodeRAIDDegraded`  | critical |  RAID アレイが劣化  | 
|  `NodeRAIDDiskFailure`  | warning |  RAID アレイが失敗したデバイス  | 
|  `NodeFileDescriptorLimit`  | warning |  カーネルはまもなくファイル記述子制限を使い果たすと予測されます。  | 
|  `NodeFileDescriptorLimit`  | critical |  カーネルはまもなくファイル記述子制限を使い果たすと予測されます。  | 
|  `KubeNodeNotReady`  | warning |  ノードの準備ができていません。  | 
|  `KubeNodeUnreachable`  | warning |  ノードに到達できません。  | 
|  `KubeletTooManyPods`  | info |  Kubelet は最大能力で実行されています。  | 
|  `KubeNodeReadinessFlapping`  | warning |  ノードの準備状況ステータスがフラッピングしています。  | 
|  `KubeletPlegDurationHigh`  | warning |  Kubelet ポッドライフサイクルイベントジェネレータの再リストに時間がかかりすぎています。  | 
|  `KubeletPodStartUpLatencyHigh`  | warning |  Kubelet ポッドスタートアップレイテンシーが高すぎます。  | 
|  `KubeletClientCertificateExpiration`  | warning |  Kubelet クライアント証明書の有効期限が近づいています。  | 
|  `KubeletClientCertificateExpiration`  | critical |  Kubelet クライアント証明書の有効期限が近づいています。  | 
|  `KubeletServerCertificateExpiration`  | warning |  Kubelet サーバー証明書の有効期限が近づいています。  | 
|  `KubeletServerCertificateExpiration`  | critical |  Kubelet サーバー証明書の有効期限が近づいています。  | 
|  `KubeletClientCertificateRenewalErrors`  | warning |  Kubelet はクライアント証明書の更新に失敗しました。  | 
|  `KubeletServerCertificateRenewalErrors`  | warning |  Kubelet はサーバー証明書の更新に失敗しました。  | 
|  `KubeletDown`  | critical |  Prometheus のターゲット検出からターゲットが消えました。  | 
|  `KubeVersionMismatch`  | warning |  異なるセマンティックバージョンの Kubernetes コンポーネントが実行中です。  | 
|  `KubeClientErrors`  | warning |  Kubernetes API サーバークライアントでエラーが発生しています。  | 
|  `KubeClientCertificateExpiration`  | warning |  クライアント証明書の有効期限が近づいています。  | 
|  `KubeClientCertificateExpiration`  | critical |  クライアント証明書の有効期限が近づいています。  | 
|  `KubeAggregatedAPIErrors`  | warning |  Kubernetes 集計 API でエラーが報告されました。  | 
|  `KubeAggregatedAPIDown`  | warning |  Kubernetes 集計 API がダウンしています。  | 
|  `KubeAPIDown`  | critical |  Prometheus のターゲット検出からターゲットが消えました。  | 
|  `KubeAPITerminatedRequests`  | warning |  kubernetes apiserver が受信リクエストの \$1\$1 \$1value \$1 humanizePercentage \$1\$1 を終了しました。  | 
|  `KubePersistentVolumeFillingUp`  | critical |  永続ボリュームがいっぱいです。  | 
|  `KubePersistentVolumeFillingUp`  | warning |  永続ボリュームがいっぱいです。  | 
|  `KubePersistentVolumeInodesFillingUp`  | critical |  永続ボリュームの Inode がいっぱいです。  | 
|  `KubePersistentVolumeInodesFillingUp`  | warning |  永続ボリュームの Inode がいっぱいです。  | 
|  `KubePersistentVolumeErrors`  | critical |  永続ボリュームのプロビジョニングに問題があります。  | 
|  `KubeCPUOvercommit`  | warning |  クラスターが CPU リソースリクエストをオーバーコミットしました。  | 
|  `KubeMemoryOvercommit`  | warning |  クラスターがメモリリソースリクエストをオーバーコミットしました。  | 
|  `KubeCPUQuotaOvercommit`  | warning |  クラスターが CPU リソースリクエストをオーバーコミットしました。  | 
|  `KubeMemoryQuotaOvercommit`  | warning |  クラスターがメモリリソースリクエストをオーバーコミットしました。  | 
|  `KubeQuotaAlmostFull`  | info |  名前空間のクォータがいっぱいになります。  | 
|  `KubeQuotaFullyUsed`  | info |  名前空間のクォータが完全に使用されています。  | 
|  `KubeQuotaExceeded`  | warning |  名前空間のクォータが制限を超えました。  | 
|  `CPUThrottlingHigh`  | info |  プロセスが昇格 CPU スロットリングを発見しました。  | 
|  `KubePodCrashLooping`  | warning |  ポッドがクラッシュループです。  | 
|  `KubePodNotReady`  | warning |  ポッドが 15 分以上準備状態になっていません。  | 
|  `KubeDeploymentGenerationMismatch`  | warning |  ロールバックの可能性に起因するデプロイ生成不一致  | 
|  `KubeDeploymentReplicasMismatch`  | warning |  デプロイが予想レプリカ数と一致しません。  | 
|  `KubeStatefulSetReplicasMismatch`  | warning |  StatefulSet が予想レプリカ数と一致していません。  | 
|  `KubeStatefulSetGenerationMismatch`  | warning |  ロールバックの可能性に起因する StatefulSet 生成不一致  | 
|  `KubeStatefulSetUpdateNotRolledOut`  | warning |  StatefulSet 更新がロールアウトしません。  | 
|  `KubeDaemonSetRolloutStuck`  | warning |  DaemonSet のロールアウトがスタックしています。  | 
|  `KubeContainerWaiting`  | warning |  ポッドコンテナが 1 時間以上待機  | 
|  `KubeDaemonSetNotScheduled`  | warning |  DaemonSet ポッドがスケジュールされていません。  | 
|  `KubeDaemonSetMisScheduled`  | warning |  DaemonSet ポッドのスケジュールが間違っています。  | 
|  `KubeJobNotCompleted`  | warning |  ジョブが時間内に完了しませんでした  | 
|  `KubeJobFailed`  | warning |  ジョブの完了に失敗しました。  | 
|  `KubeHpaReplicasMismatch`  | warning |  HPA が希望レプリカ数と一致しません。  | 
|  `KubeHpaMaxedOut`  | warning |  HPA が最大レプリカで実行されています  | 
|  `KubeStateMetricsListErrors`  | critical |  kube-state-metrics でリストオペレーションのエラーが発生しています。  | 
|  `KubeStateMetricsWatchErrors`  | critical |  kube-state-metrics で監視オペレーションのエラーが発生しています。  | 
|  `KubeStateMetricsShardingMismatch`  | critical |  kube-state-metrics のシャード設定が間違っています。  | 
|  `KubeStateMetricsShardsMissing`  | critical |  kube-state-metrics のシャードがありません。  | 
|  `KubeAPIErrorBudgetBurn`  | critical |  API サーバーで過剰なエラーバジェットを消費しています。  | 
|  `KubeAPIErrorBudgetBurn`  | critical |  API サーバーで過剰なエラーバジェットを消費しています。  | 
|  `KubeAPIErrorBudgetBurn`  | warning |  API サーバーで過剰なエラーバジェットを消費しています。  | 
|  `KubeAPIErrorBudgetBurn`  | warning |  API サーバーで過剰なエラーバジェットを消費しています。  | 
|  `TargetDown`  | warning |  1 つ以上のターゲットがダウンしています。  | 
|  `etcdInsufficientMembers`  | critical |  Etcd クラスターのメンバーが不十分です。  | 
|  `etcdHighNumberOfLeaderChanges`  | warning |  Etcd クラスターでリーダーの変更数が多い。  | 
|  `etcdNoLeader`  | critical |  Etcd クラスターにリーダーがありません。  | 
|  `etcdHighNumberOfFailedGRPCRequests`  | warning |  Etcd クラスターで gRPC リクエストの失敗数が多い。  | 
|  `etcdGRPCRequestsSlow`  | critical |  Etcd クラスターで gRPC リクエストが遅い。  | 
|  `etcdMemberCommunicationSlow`  | warning |  Etcd クラスターメンバーの通信が遅い。  | 
|  `etcdHighNumberOfFailedProposals`  | warning |  Etcd クラスターのプロポーザルの失敗数が多い。  | 
|  `etcdHighFsyncDurations`  | warning |  Etcd クラスターの同期期間が長い。  | 
|  `etcdHighCommitDurations`  | warning |  Etcd クラスターが予想コミット期間より長い。  | 
|  `etcdHighNumberOfFailedHTTPRequests`  | warning |  Etcd クラスターが HTTP リクエストに失敗しました。  | 
|  `etcdHighNumberOfFailedHTTPRequests`  | critical |  Etcd クラスターで HTTP リクエストの失敗数が多い。  | 
|  `etcdHTTPRequestsSlow`  | warning |  Etcd クラスターで HTTP リクエストが遅い。  | 
|  `HostClockNotSynchronizing`  | warning |  ホストクロックが同期していません。  | 
|  `HostOomKillDetected`  | warning |  ホスト OOM 強制終了が検出されました。  | 

## トラブルシューティング
<a name="solution-eks-troubleshooting"></a>

プロジェクトのセットアップが失敗する原因がいくつかあります。必ず以下の内容を確認してください。
+ ソリューションのインストール前にすべての [[前提条件]](#solution-eks-prerequisites) を完了する必要があります。
+ ソリューションの作成やメトリクスへのアクセスを試みる前に、クラスターに少なくとも 1 つのノードを含める必要があります。
+ Amazon EKS クラスターには、`AWS CNI`、`CoreDNS`、`kube-proxy` アドオンをインストールする必要があります。インストールしないとソリューションが正しく動作しません。これらは、コンソールを介してクラスターを作成するときにデフォルトでインストールされます。クラスターが AWS SDK を介して作成された場合は、インストールが必要になる場合があります。
+ Amazon EKS ポッドのインストールがタイムアウトしました。これは、使用可能なノード容量が十分でないときに発生する場合があります。これらの問題には、次のような複数の原因があります。
  + Amazon EKS クラスターが Amazon EC2 ではなく Fargate で初期化されました。このプロジェクトでは Amazon EC2 が必須です。
  + ノードが[汚染され](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html)ているため使用できません。

    `kubectl describe node NODENAME | grep Taints` を使用するとテイントを確認できます。次に `kubectl taint node NODENAME TAINT_NAME-` でテイントを削除します。テイント名の後に必ず `-` を含めてください。
  + ノードが容量制限に達しました。この場合は新しいノードを作成、または容量を増やすことができます。
+ Grafana にダッシュボードが表示されません: 間違った Grafana ワークスペース ID を使用しています。

  以下のコマンドを実行して Grafana に関する情報を取得してください。

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  正しいワークスペース URL の結果を確認できます。予想しているものでない場合は、正しいワークスペース ID で再デプロイします。

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ Grafana にダッシュボードが表示されません: 期限切れの API キーを使用しています。

  この場合の検索では、grafana 演算子を取得して、ログにエラーがないことを確認する必要があります。次のコマンドを使用して Grafana 演算子の名前を取得します。

  ```
  kubectl get pods -n grafana-operator
  ```

  次のような演算子名が返されます。

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  次のコマンドで演算子名を使用します。

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  次のようなエラーメッセージは、API キーの有効期限が切れたことを示しています。

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  この場合は、新しい API キーを作成してソリューションを再度デプロイします。問題が解決しない場合は、再びデプロイする前に次のコマンドを使用して強制的に同期できます。

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ *CDK インストール* — SSM パラメータが欠けています。次のようなエラーが表示される場合は、`cdk bootstrap` を実行して再試行してください。

  ```
  Deployment failed: Error: aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```
+ OIDC プロバイダーが既に存在する場合はデプロイが失敗する可能性があります。次のようなエラーが表示されます (この場合は、CDK インストール)。

  ```
  | CREATE_FAILED | Custom::AWSCDKOpenIdConnectProvider | OIDCProvider/Resource/Default
  Received response status [FAILED] from custom resource. Message returned: 
  EntityAlreadyExistsException: Provider with url https://oidc.eks.REGION.amazonaws.com/id/PROVIDER ID already exists.
  ```

  この場合は、IAM ポータルに移動して OIDC プロバイダーを削除し、再試行してください。
+ *[Terraform のインストール]* — `cluster-secretstore-sm failed to create kubernetes rest client for update of resource` と `failed to create kubernetes rest client for update of resource` を含むエラーメッセージが表示されます。

  このエラーは通常、External Secrets Operator が Kubernetes クラスターに未インストールまたは有効化されていないことを示します。これはソリューションのデプロイ時にインストールされますが、ソリューションが必要なときに準備できていない場合があります。

  以下のコマンドを使用すると、KFP SDK がインストールされたことを確認できます。

  ```
  kubectl get deployments -n external-secrets
  ```

  インストールされている場合、オペレーターを完全に使用できるようになるまでに時間がかかることがあります。次のコマンドを実行すると、必要なカスタムリソース定義 (CRD) のステータスを確認できます。

  ```
  kubectl get crds|grep external-secrets
  ```

  このコマンドは、`clustersecretstores.external-secrets.io` や `externalsecrets.external-secrets.io` など、外部シークレット演算子に関連する CRD を一覧表示するはずです。リストにない場合は、数分待ってからもう一度確認してください。

  CRD が登録されたら、`terraform apply` を再度実行してソリューションをデプロイできます。

# Amazon Managed Grafana で JVM アプリケーションをモニタリングするためのソリューション
<a name="solution-jvm"></a>

Java 仮想マシン (JVM) で構築されたアプリケーションには、特殊なモニタリングニーズがあります。このページでは、Amazon EKS クラスターで実行されている JVM ベースのアプリケーションをモニタリングするためのソリューションを提供するテンプレートについて説明します。このソリューションは、[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) を使用してインストールできます。

**注記**  
このソリューションは、JVM アプリケーションのモニタリングを提供します。JVM アプリケーションが特に Apache Kafka アプリケーションの場合は、代わりに、JVM と Kafka の両方のモニタリングを含む [Kafka モニタリングソリューション](solution-kafka.md)を使用することもできます。

このソリューションは以下を設定します。
+ Amazon EKS クラスターからの Java 仮想マシン (JVM) メトリクスを保存する Amazon Managed Service for Prometheus ワークスペース。
+ CloudWatch エージェントと CloudWatch エージェントアドオンを使用して特定の JVM メトリクスを収集します。メトリクスは、Amazon Managed Service for Prometheus ワークスペースに送信するように設定されています。
+ これらのメトリクスをプルしてクラスターのモニタリングに役立つダッシュボードを作成する Amazon Managed Grafana ワークスペース。

**注記**  
このソリューションは、Amazon EKS で実行されているアプリケーションの JVM メトリクスを提供しますが、Amazon EKS メトリクスは含みません。さらに、[Amazon EKS をモニタリングするためのオブザーバビリティソリューション](solution-eks.md)を使用して、Amazon EKS クラスターのメトリクスとアラートを確認することもできます。

## このソリューションについて
<a name="solution-jvm-about"></a>

このソリューションは、Java 仮想マシン (JVM) アプリケーションのメトリクスを提供するように Amazon Managed Grafana ワークスペースを設定します。メトリクスは、アプリケーションの健全性とパフォーマンスに関するインサイトを提供することで、アプリケーションの運用をより効果的にするのに役立つダッシュボードを生成するために使用されます。

次の図は、このソリューションによって作成されたダッシュボードのサンプルを示しています。

![\[このソリューションを使用して構築した Grafana ダッシュボードフォルダの例を示すイメージ。\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/images/jvm-solution-overview.png)


メトリクスは 1 分間のスクレイプ間隔でスクレイプされます。ダッシュボードには、特定のメトリクスに基づいて、1 分、5 分、またはそれ以上に集約されたメトリクスが表示されます。

このソリューションで追跡されるメトリクスのリストについては、「[追跡されるメトリクスのリスト](#solution-jvm-metrics)」を参照してください。

## コスト
<a name="solution-jvm-costs"></a>

このソリューションは、ワークスペース内にリソースを作成して使用します。作成したリソースの標準使用量に対して課金されますが、これには以下が含まれます。
+ ユーザーによる Amazon Managed Grafana ワークスペースアクセス。料金に関する詳細については、「[Amazon Managed Grafana の料金](https://aws.amazon.com/grafana/pricing/)」を参照してください。
+ Amazon Managed Service for Prometheus メトリクスの取り込みと保存、およびメトリクス分析 (クエリサンプル処理)。このソリューションで使用されるメトリクス数は、アプリケーションの設定と使用状況によって異なります。

  CloudWatch を使用して、Amazon Managed Service for Prometheus で取り込みメトリクスとストレージメトリクスを表示できます。詳細については、*Amazon Managed Service for Prometheus ユーザーガイド*の [[CloudWatch メトリクス]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) を参照してください。

  [Amazon Managed Service for Prometheus の料金](https://aws.amazon.com/prometheus/pricing/)ページでは、料金計算ツールを使用してコストを見積もることができます。メトリクス数は、クラスター内のノード数と、アプリケーションが生成するメトリクスによって異なります。
+ ネットワークコスト。クロスアベイラビリティーゾーン、リージョン、またはその他のトラフィックに対して標準 AWS ネットワーク料金が発生する場合があります。

各製品の料金ページから利用できる料金計算ツールは、ソリューションの潜在的コストを理解するのに役立ちます。以下の情報は、Amazon EKS クラスターと同じアベイラビリティーゾーンで実行されているソリューションの、基本コストを取得するのに役立ちます。


| 製品 | 計算メトリクス | 値 | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | アクティブなシリーズ | 50 (アプリケーションポッドあたり) | 
|  | 平均収集間隔 | 60 (秒) | 
| Amazon Managed Grafana | アクティブなエディタ/管理者の数 | 1 (またはユーザーに基づき、さらに多く) | 

これらの数は、Amazon EKS で実行されている JVM アプリケーションのベースの数です。これにより基本コストの見積もりが得られます。アプリケーションにポッドを追加すると、次に示すようにコストが増加します。これらのコストは、Amazon Managed Grafana ワークスペース、Amazon Managed Service for Prometheus ワークスペース、Amazon EKS クラスターが同じアベイラビリティーゾーン、 AWS リージョンおよび VPN にあるかどうかによって異なります。

## 前提条件
<a name="solution-jvm-prerequisites"></a>

このソリューションを使用する前に、次のことを行う必要があります。

1. モニタリングする **[Amazon Elastic Kubernetes Service クラスターを作成する]**、またはそのクラスターがあるいる必要があります。そのクラスターには少なくとも 1 つのノードが必要です。クラスターには、プライベートアクセスを含めるように設定された API サーバーエンドポイントアクセスが必要です (パブリックアクセスを許可することもできます)。

   [認証モード](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam)に API アクセスを含める必要があります (`API` または `API_AND_CONFIG_MAP` に設定)。これによりソリューションデプロイでアクセスエントリを使用できます。

   クラスターに以下をインストールする必要があります (コンソール経由でクラスターを作成する場合はデフォルトでtrueですが、 AWS API または を使用してクラスターを作成する場合は追加する必要があります AWS CLI)。Amazon EKS Pod Identity Agent、 AWS CNI、CoreDNS、Kube-proxy、Amazon EBS CSI Driver AddOns (Amazon EBS CSI Driver AddOn は、ソリューションに技術的には必要ありませんが、一部の JVM アプリケーションに必要です）。

   *クラスター名を保存して後で指定します*。これは Amazon EKS コンソールのクラスター詳細にあります。
**注記**  
Amazon EKS クラスターの作成方法の詳細については、「[Amazon EKS の使用方法](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)」を参照してください。

1. Amazon EKS クラスターの Java 仮想マシンでアプリケーションを実行している必要があります。

1. Amazon EKS クラスター AWS アカウント と同じ に Amazon **Managed Service for Prometheus ワークスペースを作成**する必要があります。詳細については、*[Amazon Managed Service for Prometheus ユーザーガイド]* の [[ワークスペースの作成]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) を参照してください。

   *Amazon Managed Service for Prometheus ワークスペース ARN を保存して後で指定します。*

1. **Grafana バージョン 9 以降の Amazon Managed Grafana ワークスペースは、Amazon EKS クラスターと同じ に作成**する必要があります。 AWS リージョン 新しいワークスペースの作成の詳細については、「[Amazon Managed Grafana ワークスペースを作成する](AMG-create-workspace.md)」を参照してください。

   ワークスペースロールには、Amazon Managed Service for Prometheus および Amazon CloudWatch API にアクセスするためのアクセス許可が必要です。この許可を付与する最も簡単な方法は、[[サービス管理のアクセス許可]](AMG-manage-permissions.md)を使用して、Amazon Managed Service for Prometheus と CloudWatch を選択することです。[AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess) ポリシーと [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess) ポリシーをワークスペース IAM ロールに手動で追加することもできます。

   *Amazon Managed Grafana ワークスペース ID とエンドポイントを保存して後で指定します。*ID は `g-123example` の形式になります。ID とエンドポイントは Amazon Managed Grafana コンソールにあります。エンドポイントはワークスペースの URL で、ID が含まれます。例えば、`https://g-123example.grafana-workspace.<region>.amazonaws.com/`。

**注記**  
ソリューションのセットアップが必ず必要なわけではありませんが、作成されたダッシュボードにアクセスするには、Amazon Managed Grafana ワークスペースでユーザー認証を設定する必要があります。詳細については、「[Amazon Managed Grafana ワークスペースでユーザーを認証する](authentication-in-AMG.md)」を参照してください。

## このソリューションの使用
<a name="solution-jvm-use"></a>

このソリューションは、Amazon EKS クラスターで実行されている Java 仮想マシン (JVM) アプリケーションからのメトリクスのレポートとモニタリングをサポートする AWS ようにインフラストラクチャを設定します。[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) を使用してインストールできます。

**注記**  
ここでのステップでは、 AWS CLI、、および [Node.js](https://nodeja.org/) AWS CDKと [NPM](https://docs.npmjs.com/) の両方がインストールされている環境があることを前提としています。`make` と `brew` を使用して、ビルドやその他の一般的なアクションを簡素化します。

**このソリューションを使用して で Amazon EKS クラスターをモニタリングするには AWS CDK**

1. [前提条件](#solution-jvm-prerequisites)のすべてのステップを完了済みであることを確認してください。

1. Amazon S3 からソリューションのファイルすべてをダウンロードします。ファイルは `s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac` にあり、次の Amazon S3 コマンドを使用してダウンロードできます。コマンドライン環境のフォルダから、このコマンドを実行します。

   ```
   aws s3 sync s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   これらのファイルを修正する必要はありません。

1. コマンドライン環境で (ソリューションファイルをダウンロードしたフォルダから)、次のコマンドを実行します。

   必要な環境変数を設定します。*REGION*、*AMG\$1ENDPOINT*、*EKS\$1CLUSTER*、*AMP\$1ARN* を、 、Amazon Managed Grafana ワークスペースエンドポイント ( の形式`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`) AWS リージョン、Amazon EKS クラスター名、Amazon Managed Service for Prometheus ワークスペース ARN に置き換えます。

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. ソリューションで使用できる注釈を作成します。名前空間、デプロイ、ステートフルセット、デーモンセット、またはポッドに直接注釈を付けることができます。JSM ソリューションには 2 つの注釈が必要です。`kubectl` を使用して、次のコマンドでリソースに注釈を付けます。

   ```
   kubectl annotate <resource-type> <resource-value> instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   ```

   *<resource-type>* と *<resource-value>* をシステムに適した値に置き換えます。例えば、`foo` デプロイに注釈を付けるには、最初のコマンドは次のようになります。

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Grafana HTTP API を呼び出すには、ADMIN アクセス許可を持つサービスアカウントトークンを作成します。詳細については、「[サービスアカウントを使用した Grafana HTTP API の認証](service-accounts.md)」を参照してください。トークンを作成するには、次のコマンド AWS CLI で を使用できます。*GRAFANA\$1ID* を ご使用の Grafana ワークスペースの ID に置き換える必要があります (`g-123example` 形式)。このキーは 7,200 秒または 2 時間後に期限が切れます。必要に応じて、時間 (`seconds-to-live`) を変更できます。デプロイにかかる時間は 1 時間未満です。

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   次のコマンドを使用して API キーを に追加 AWS CDK することで、 API キー AWS Systems Manager を で使用できるようにします。*AWS\$1REGION* を、ソリューションを実行するリージョンに置き換えます (`us-east-1` 形式)。

   ```
   aws ssm put-parameter --name "/observability-aws-solution-jvm-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region AWS_REGION \
     --overwrite
   ```

1. 次の `make` コマンドを実行して、プロジェクトの他の依存関係をインストールします。

   ```
   make deps
   ```

1. 最後に、 AWS CDK プロジェクトを実行します。

   ```
   make build && make pattern aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME deploy
   ```

1. (オプション) スタックの作成が完了したら、他の各前提条件 (個別の Amazon Managed Grafana ワークスペースと Amazon Managed Service for Prometheus ワークスペースを含む) を満たす限り、同じ環境を使用して、同じリージョン内の Amazon EKS クラスターで実行されている他の JVM アプリケーションにスタックのインスタンスをさらに作成できます。新しいパラメータで `export` コマンドを再定義する必要があります。

スタックの作成が完了すると、Amazon Managed Grafana ワークスペースにデータが入力されて、ダッシュボードにアプリケーションと Amazon EKS クラスターのメトリクスが表示されます。メトリクス収集のため、メトリクスが表示されるまでに数分かかります。

## 追跡されるメトリクスのリスト
<a name="solution-jvm-metrics"></a>

このソリューションは、JVM ベースのアプリケーションからメトリクスを収集します。これらのメトリクスは Amazon Managed Service for Prometheus に格納され、Amazon Managed Grafana ダッシュボードに表示されます。

このソリューションでは、次のメトリクスを追跡します。
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.elapsed
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count

## トラブルシューティング
<a name="solution-jvm-troubleshooting"></a>

プロジェクトのセットアップが失敗する原因がいくつかあります。必ず以下の内容を確認してください。
+ ソリューションのインストール前にすべての [[前提条件]](#solution-jvm-prerequisites) を完了する必要があります。
+ ソリューションの作成やメトリクスへのアクセスを試みる前に、クラスターに少なくとも 1 つのノードを含める必要があります。
+ Amazon EKS クラスターには、`AWS CNI`、`CoreDNS`、`kube-proxy` アドオンをインストールする必要があります。インストールしないとソリューションが正しく動作しません。これらは、コンソールを介してクラスターを作成するときにデフォルトでインストールされます。クラスターが AWS SDK を介して作成された場合は、インストールが必要になる場合があります。
+ Amazon EKS ポッドのインストールがタイムアウトしました。これは、使用可能なノード容量が十分でないときに発生する場合があります。これらの問題には、次のような複数の原因があります。
  + Amazon EKS クラスターが Amazon EC2 ではなく Fargate で初期化されました。このプロジェクトでは Amazon EC2 が必須です。
  + ノードが[汚染され](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html)ているため使用できません。

    `kubectl describe node NODENAME | grep Taints` を使用するとテイントを確認できます。次に `kubectl taint node NODENAME TAINT_NAME-` でテイントを削除します。テイント名の後に必ず `-` を含めてください。
  + ノードが容量制限に達しました。この場合は新しいノードを作成、または容量を増やすことができます。
+ Grafana にダッシュボードが表示されません: 間違った Grafana ワークスペース ID を使用しています。

  以下のコマンドを実行して Grafana に関する情報を取得してください。

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  正しいワークスペース URL の結果を確認できます。予想しているものでない場合は、正しいワークスペース ID で再デプロイします。

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ Grafana にダッシュボードが表示されません: 期限切れの API キーを使用しています。

  この場合の検索では、grafana 演算子を取得して、ログにエラーがないことを確認する必要があります。次のコマンドを使用して Grafana 演算子の名前を取得します。

  ```
  kubectl get pods -n grafana-operator
  ```

  次のような演算子名が返されます。

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  次のコマンドで演算子名を使用します。

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  次のようなエラーメッセージは、API キーの有効期限が切れたことを示しています。

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  この場合は、新しい API キーを作成してソリューションを再度デプロイします。問題が解決しない場合は、再びデプロイする前に次のコマンドを使用して強制的に同期できます。

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ SSM パラメータがありません。次のようなエラーが表示される場合は、`cdk bootstrap` を実行して再試行してください。

  ```
  Deployment failed: Error: aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```

# Amazon Managed Grafana で Kafka アプリケーションをモニタリングするためのソリューション
<a name="solution-kafka"></a>

[Apache Kafka](https://kafka.apache.org) 上に構築されたアプリケーションには、特殊なモニタリングニーズがあります。このページでは、Amazon EKS クラスターの Java 仮想マシンで実行されている Kafka アプリケーションをモニタリングするためのソリューションを提供するテンプレートについて説明します。このソリューションは、[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) を使用してインストールできます。

**注記**  
このソリューションは、Amazon Managed Streaming for Apache Kafka アプリケーションのモニタリングをサポートしていません。Amazon MSK アプリケーションのモニタリングの詳細については、「*Amazon Managed Streaming for Apache Kafka デベロッパーガイド*」の「[Amazon MSK クラスターをモニタリングする](https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html)」を参照してください。

このソリューションは以下を設定します。
+ Amazon EKS クラスターからの Kafka および Java 仮想マシン (JVM) メトリクスを保存する Amazon Managed Service for Prometheus ワークスペース。
+ CloudWatch エージェントと CloudWatch エージェントアドオンを使用して、特定の Kafka メトリクスおよび JVM メトリクスを収集します。メトリクスは、Amazon Managed Service for Prometheus ワークスペースに送信するように設定されています。
+ これらのメトリクスをプルしてクラスターのモニタリングに役立つダッシュボードを作成する Amazon Managed Grafana ワークスペース。

**注記**  
このソリューションは、Amazon EKS で実行されているアプリケーションの JVM メトリクスと Kafka メトリクスを提供しますが、Amazon EKS メトリクスは含みません。[Amazon EKS をモニタリングするためのオブザーバビリティソリューション](solution-eks.md)を使用してし、Amazon EKS クラスターのメトリクスとアラートを確認できます。

## このソリューションについて
<a name="solution-kafka-about"></a>

このソリューションは、Apache Kafka アプリケーションのためにメトリクスを提供するように Amazon Managed Grafana ワークスペースを設定します。メトリクスは、Kafka アプリケーションのパフォーマンスとワークロードに関するインサイトを提供することで、アプリケーションの運用をより効果的にするのに役立つダッシュボードを生成するために使用されます。

次の図は、このソリューションによって作成されたダッシュボードのサンプルを示しています。

![\[このソリューションを使用して構築した Grafana ダッシュボードフォルダの例を示すイメージ。\]](http://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/images/kafka-solution-cluster-overview.png)


メトリクスは 1 分間のスクレイプ間隔でスクレイプされます。ダッシュボードには、特定のメトリクスに基づいて、1 分、5 分、またはそれ以上に集約されたメトリクスが表示されます。

このソリューションで追跡されるメトリクスのリストについては、「[追跡されるメトリクスのリスト](#solution-kafka-metrics)」を参照してください。

## コスト
<a name="solution-kafka-costs"></a>

このソリューションは、ワークスペース内にリソースを作成して使用します。作成したリソースの標準使用量に対して課金されますが、これには以下が含まれます。
+ ユーザーによる Amazon Managed Grafana ワークスペースアクセス。料金に関する詳細については、「[Amazon Managed Grafana の料金](https://aws.amazon.com/grafana/pricing/)」を参照してください。
+ Amazon Managed Service for Prometheus メトリクスの取り込みと保存、およびメトリクス分析 (クエリサンプル処理)。このソリューションで使用されるメトリクス数は、アプリケーションの設定と使用状況によって異なります。

  CloudWatch を使用して、Amazon Managed Service for Prometheus で取り込みメトリクスとストレージメトリクスを表示できます。詳細については、*Amazon Managed Service for Prometheus ユーザーガイド*の [[CloudWatch メトリクス]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) を参照してください。

  [Amazon Managed Service for Prometheus の料金](https://aws.amazon.com/prometheus/pricing/)ページでは、料金計算ツールを使用してコストを見積もることができます。メトリクス数は、クラスター内のノード数と、アプリケーションが生成するメトリクスによって異なります。
+ ネットワークコスト。クロスアベイラビリティーゾーン、リージョン、またはその他のトラフィックに対して標準 AWS ネットワーク料金が発生する場合があります。

各製品の料金ページから利用できる料金計算ツールは、ソリューションの潜在的コストを理解するのに役立ちます。以下の情報は、Amazon EKS クラスターと同じアベイラビリティーゾーンで実行されているソリューションの、基本コストを取得するのに役立ちます。


| 製品 | 計算メトリクス | 値 | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | アクティブなシリーズ | 95 (Kafka ポッドあたり) | 
|  | 平均収集間隔 | 60 (秒) | 
| Amazon Managed Grafana | アクティブなエディタ/管理者の数 | 1 (またはユーザーに基づき、さらに多く) | 

これらの数は、Amazon EKS で Kafka を実行するソリューションのベースの数です。これにより基本コストの見積もりが得られます。Kafka ポッドをアプリケーションに追加すると、次に示すようにコストが増加します。これらのコストは、Amazon Managed Grafana ワークスペース、Amazon Managed Service for Prometheus ワークスペース、Amazon EKS クラスターが同じアベイラビリティーゾーン、 AWS リージョンおよび VPN にあるかどうかによって異なります。

## 前提条件
<a name="solution-kafka-prerequisites"></a>

このソリューションを使用する前に、次のことを行う必要があります。

1. モニタリングする **[Amazon Elastic Kubernetes Service クラスターを作成する]**、またはそのクラスターがあるいる必要があります。そのクラスターには少なくとも 1 つのノードが必要です。クラスターには、プライベートアクセスを含めるように設定された API サーバーエンドポイントアクセスが必要です (パブリックアクセスを許可することもできます)。

   [認証モード](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam)に API アクセスを含める必要があります (`API` または `API_AND_CONFIG_MAP` に設定)。これによりソリューションデプロイでアクセスエントリを使用できます。

   クラスターに以下をインストールする必要があります (コンソール経由でクラスターを作成する場合はデフォルトでtrueですが、 AWS API または を使用してクラスターを作成する場合は追加する必要があります AWS CLI)。Amazon EKS Pod Identity Agent、 AWS CNI、CoreDNS、Kube-proxy、Amazon EBS CSI Driver AddOns (Amazon EBS CSI Driver AddOn は、ソリューションに技術的には必要ありませんが、ほとんどの Kafka アプリケーションに必要です）。

   *クラスター名を保存して後で指定します*。これは Amazon EKS コンソールのクラスター詳細にあります。
**注記**  
Amazon EKS クラスターの作成方法の詳細については、「[Amazon EKS の使用方法](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)」を参照してください。

1. Amazon EKS クラスターの Java 仮想マシンで Apache Kafka アプリケーションを実行している必要があります。

1. Amazon EKS クラスター AWS アカウント と同じ に Amazon **Managed Service for Prometheus ワークスペースを作成**する必要があります。詳細については、*[Amazon Managed Service for Prometheus ユーザーガイド]* の [[ワークスペースの作成]](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) を参照してください。

   *Amazon Managed Service for Prometheus ワークスペース ARN を保存して後で指定します。*

1. **Grafana バージョン 9 以降の Amazon Managed Grafana ワークスペースは、Amazon EKS クラスターと同じ に作成**する必要があります。 AWS リージョン 新しいワークスペースの作成の詳細については、「[Amazon Managed Grafana ワークスペースを作成する](AMG-create-workspace.md)」を参照してください。

   ワークスペースロールには、Amazon Managed Service for Prometheus および Amazon CloudWatch API にアクセスするためのアクセス許可が必要です。この許可を付与する最も簡単な方法は、[[サービス管理のアクセス許可]](AMG-manage-permissions.md)を使用して、Amazon Managed Service for Prometheus と CloudWatch を選択することです。[AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess) ポリシーと [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess) ポリシーをワークスペース IAM ロールに手動で追加することもできます。

   *Amazon Managed Grafana ワークスペース ID とエンドポイントを保存して後で指定します。*ID は `g-123example` の形式になります。ID とエンドポイントは Amazon Managed Grafana コンソールにあります。エンドポイントはワークスペースの URL で、ID が含まれます。例えば、`https://g-123example.grafana-workspace.<region>.amazonaws.com/`。

**注記**  
ソリューションのセットアップが必ず必要なわけではありませんが、作成されたダッシュボードにアクセスするには、Amazon Managed Grafana ワークスペースでユーザー認証を設定する必要があります。詳細については、「[Amazon Managed Grafana ワークスペースでユーザーを認証する](authentication-in-AMG.md)」を参照してください。

## このソリューションの使用
<a name="solution-kafka-use"></a>

このソリューションは、Amazon EKS クラスターで実行されている Kafka アプリケーションからのメトリクスのレポートとモニタリングをサポートするように AWS インフラストラクチャを設定します。[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) を使用してインストールできます。

**注記**  
ここでのステップでは、 AWS CLI、、および [Node.js](https://nodejs.org/) AWS CDKと [NPM](https://docs.npmjs.com/) の両方がインストールされている環境があることを前提としています。`make` と `brew` を使用して、ビルドやその他の一般的なアクションを簡素化します。

**このソリューションを使用して で Amazon EKS クラスターをモニタリングするには AWS CDK**

1. [前提条件](#solution-kafka-prerequisites)のすべてのステップを完了済みであることを確認してください。

1. Amazon S3 からソリューションのファイルすべてをダウンロードします。ファイルは `s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac` にあり、次の Amazon S3 コマンドを使用してダウンロードできます。コマンドライン環境のフォルダから、このコマンドを実行します。

   ```
   aws s3 sync s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   これらのファイルを修正する必要はありません。

1. コマンドライン環境で (ソリューションファイルをダウンロードしたフォルダから)、次のコマンドを実行します。

   必要な環境変数を設定します。*REGION*、*AMG\$1ENDPOINT*、*EKS\$1CLUSTER*、*AMP\$1ARN* を、 、Amazon Managed Grafana ワークスペースエンドポイント ( の形式`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`) AWS リージョン、Amazon EKS クラスター名、Amazon Managed Service for Prometheus ワークスペース ARN に置き換えます。

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. デプロイで使用できる注釈を作成する必要があります。名前空間、デプロイ、ステートフルセット、デーモンセット、またはポッドに直接注釈を付けることができます。Kafka ソリューションには 5 つの注釈が必要です。`kubectl` を使用して、次のコマンドでリソースに注釈を付けます。

   ```
   kubectl annotate <resource-type> <resource-value> instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka-producer=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka-consumer=true
   ```

   *<resource-type>* と *<resource-value>* をシステムに適した値に置き換えます。例えば、`foo` デプロイに注釈を付けるには、最初のコマンドは次のようになります。

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Grafana HTTP API を呼び出すには、ADMIN アクセス許可を持つサービスアカウントトークンを作成します。詳細については、「[サービスアカウントを使用した Grafana HTTP API の認証](service-accounts.md)」を参照してください。トークンを作成するには、次のコマンド AWS CLI で を使用できます。*GRAFANA\$1ID* を ご使用の Grafana ワークスペースの ID に置き換える必要があります (`g-123example` 形式)。このキーは 7,200 秒または 2 時間後に期限が切れます。必要に応じて、時間 (`seconds-to-live`) を変更できます。デプロイにかかる時間は 1 時間未満です。

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   次のコマンドを使用して API キーを に追加 AWS CDK することで、 API キー AWS Systems Manager を で使用できるようにします。*AWS\$1REGION* を、ソリューションを実行するリージョンに置き換えます (`us-east-1` 形式)。

   ```
   aws ssm put-parameter --name "/observability-aws-solution-kafka-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region AWS_REGION \
     --overwrite
   ```

1. 次の `make` コマンドを実行して、プロジェクトの他の依存関係をインストールします。

   ```
   make deps
   ```

1. 最後に、 AWS CDK プロジェクトを実行します。

   ```
   make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
   ```

1. (オプション) スタックの作成が完了したら、他の各前提条件 (個別の Amazon Managed Grafana ワークスペースと Amazon Managed Service for Prometheus ワークスペースを含む) を満たす限り、同じ環境を使用して、同じリージョン内の Amazon EKS クラスターで実行されている他の Kafka アプリケーションにスタックのインスタンスをさらに作成できます。新しいパラメータで `export` コマンドを再定義する必要があります。

スタックの作成が完了すると、Amazon Managed Grafana ワークスペースにデータが入力されて、ダッシュボードにアプリケーションと Amazon EKS クラスターのメトリクスが表示されます。メトリクス収集のため、メトリクスが表示されるまでに数分かかります。

## 追跡されるメトリクスのリスト
<a name="solution-kafka-metrics"></a>

このソリューションは、JVM ベースの Kafka アプリケーションからメトリクスを収集します。これらのメトリクスは Amazon Managed Service for Prometheus に格納され、Amazon Managed Grafana ダッシュボードに表示されます。

このソリューションでは、次のメトリクスを追跡します。
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.elapsed
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count
+ kafka.message.count
+ kafka.request.count
+ kafka.request.failed
+ kafka.request.time.total
+ kafka.request.time.50p
+ kafka.request.time.99p
+ kafka.request.time.avg
+ kafka.network.io
+ kafka.purgatory.size
+ kafka.partition.count
+ kafka.partition.offline
+ kafka.partition.under\$1replicated
+ kafka.isr.operation.count
+ kafka.max.lag
+ kafka.controller.active.count
+ kafka.leader.election.rate
+ kafka.unclean.election.rate
+ kafka.request.queue
+ kafka.logs.flush.time.count
+ kafka.logs.flush.time.median
+ kafka.logs.flush.time.99p
+ kafka.consumer.fetch-rate
+ kafka.consumer.records-lag-max
+ kafka.consumer.total.bytes-consumed-rate
+ kafka.consumer.total.fetch-size-avg
+ kafka.consumer.total.records-consumed-rate
+ kafka.consumer.bytes-consumed-rate
+ kafka.consumer.fetch-size-avg
+ kafka.consumer.records-consumed-rate
+ kafka.producer.io-wait-time-ns-avg
+ kafka.producer.outgoing-byte-rate
+ kafka.producer.request-latency-avg
+ kafka.producer.request-rate
+ kafka.producer.response-rate
+ kafka.producer.byte-rate
+ kafka.producer.compression-rate
+ kafka.producer.record-error-rate
+ kafka.producer.record-retry-rate
+ kafka.producer.record-send-rate

## トラブルシューティング
<a name="solution-kafka-troubleshooting"></a>

プロジェクトのセットアップが失敗する原因がいくつかあります。必ず以下の内容を確認してください。
+ ソリューションのインストール前にすべての [[前提条件]](#solution-kafka-prerequisites) を完了する必要があります。
+ ソリューションの作成やメトリクスへのアクセスを試みる前に、クラスターに少なくとも 1 つのノードを含める必要があります。
+ Amazon EKS クラスターには、`AWS CNI`、`CoreDNS`、`kube-proxy` アドオンをインストールする必要があります。インストールしないとソリューションが正しく動作しません。これらは、コンソールを介してクラスターを作成するときにデフォルトでインストールされます。クラスターが AWS SDK を介して作成された場合は、インストールが必要になる場合があります。
+ Amazon EKS ポッドのインストールがタイムアウトしました。これは、使用可能なノード容量が十分でないときに発生する場合があります。これらの問題には、次のような複数の原因があります。
  + Amazon EKS クラスターが Amazon EC2 ではなく Fargate で初期化されました。このプロジェクトでは Amazon EC2 が必須です。
  + ノードが[汚染され](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html)ているため使用できません。

    `kubectl describe node NODENAME | grep Taints` を使用するとテイントを確認できます。次に `kubectl taint node NODENAME TAINT_NAME-` でテイントを削除します。テイント名の後に必ず `-` を含めてください。
  + ノードが容量制限に達しました。この場合は新しいノードを作成、または容量を増やすことができます。
+ Grafana にダッシュボードが表示されません: 間違った Grafana ワークスペース ID を使用しています。

  以下のコマンドを実行して Grafana に関する情報を取得してください。

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  正しいワークスペース URL の結果を確認できます。予想しているものでない場合は、正しいワークスペース ID で再デプロイします。

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ Grafana にダッシュボードが表示されません: 期限切れの API キーを使用しています。

  この場合の検索では、grafana 演算子を取得して、ログにエラーがないことを確認する必要があります。次のコマンドを使用して Grafana 演算子の名前を取得します。

  ```
  kubectl get pods -n grafana-operator
  ```

  次のような演算子名が返されます。

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  次のコマンドで演算子名を使用します。

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  次のようなエラーメッセージは、API キーの有効期限が切れたことを示しています。

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  この場合は、新しい API キーを作成してソリューションを再度デプロイします。問題が解決しない場合は、再びデプロイする前に次のコマンドを使用して強制的に同期できます。

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ SSM パラメータがありません。次のようなエラーが表示される場合は、`cdk bootstrap` を実行して再試行してください。

  ```
  Deployment failed: Error: aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```