翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Managed Grafana で Kafka アプリケーションをモニタリングするためのソリューション
Apache Kafka
注記
このソリューションは、Amazon Managed Streaming for Apache Kafka アプリケーションのモニタリングをサポートしていません。Amazon MSK アプリケーションのモニタリングについては、「Amazon Managed Streaming for Apache Kafka デベロッパーガイド」の「Amazon MSK クラスターのモニタリング」を参照してください。
このソリューションは以下を設定します。
-
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 をモニタリングし、Amazon EKS クラスターのメトリクスとアラートを確認できます。
このソリューションについて
このソリューションは、Amazon Managed Grafana ワークスペースを設定して、Apache Kafka アプリケーションのメトリクスを提供します。メトリクスは、Kafka アプリケーションのパフォーマンスとワークロードに関するインサイトを提供することで、アプリケーションの運用をより効果的にするのに役立つダッシュボードを生成するために使用されます。
次の図は、このソリューションによって作成されたダッシュボードのサンプルを示しています。

メトリクスは 1 分間のスクレイプ間隔でスクレイプされます。ダッシュボードには、特定のメトリクスに基づいて、1 分、5 分、またはそれ以上に集約されたメトリクスが表示されます。
このソリューションで追跡されるメトリクスのリストについては、「追跡されるメトリクスのリスト」を参照してください。
コスト
このソリューションは、ワークスペース内にリソースを作成して使用します。作成したリソースの標準使用量に対して課金されますが、これには以下が含まれます。
-
ユーザーによる Amazon Managed Grafana ワークスペースアクセス。料金に関する詳細については、「Amazon Managed Grafana の料金
」を参照してください。 -
Amazon Managed Service for Prometheus メトリクスの取り込みとストレージ、およびメトリクス分析 (クエリサンプル処理)。このソリューションで使用されるメトリクスの数は、アプリケーションの設定と使用状況によって異なります。
CloudWatch を使用して、Amazon Managed Service for Prometheus で取り込みメトリクスとストレージメトリクスを表示できます。詳細については、Amazon Managed Service for Prometheus ユーザーガイドの [CloudWatch メトリクス] を参照してください。
Amazon Managed Service for Prometheus の料金
ページでは、料金計算ツールを使用してコストを見積もることができます。メトリクス数は、クラスター内のノード数と、アプリケーションが生成するメトリクスによって異なります。 -
ネットワークコスト。クロスアベイラビリティーゾーン、リージョン、またはその他のトラフィックに対して標準 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 にあるかどうかによって異なります。
前提条件
このソリューションを使用する前に、次のことを行う必要があります。
-
モニタリングする [Amazon Elastic Kubernetes Service クラスターを作成する]、またはそのクラスターがあるいる必要があります。そのクラスターには少なくとも 1 つのノードが必要です。クラスターには、プライベートアクセスを含めるように設定された API サーバーエンドポイントアクセスが必要です (パブリックアクセスを許可することもできます)。
認証モードに 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 の使用方法」を参照してください。
-
Amazon EKS クラスターの Java 仮想マシンで Apache Kafka アプリケーションを実行している必要があります。
-
Amazon EKS クラスターと同じ に Amazon Managed Service for Prometheus ワークスペースを作成する必要があります。 AWS アカウント 詳細については、[Amazon Managed Service for Prometheus ユーザーガイド] の [ワークスペースの作成] を参照してください。
Amazon Managed Service for Prometheus ワークスペース ARN を保存して後で指定します。
-
Grafana バージョン 9 以降の Amazon Managed Grafana ワークスペースは、Amazon EKS クラスターと同じ に作成する必要があります。 AWS リージョン 新しいワークスペースの作成の詳細については、「Amazon Managed Grafana ワークスペースを作成する」を参照してください。
ワークスペースロールには、Amazon Managed Service for Prometheus および Amazon CloudWatch API にアクセスするためのアクセス許可が必要です。この許可を付与する最も簡単な方法は、[サービス管理のアクセス許可]を使用して、Amazon Managed Service for Prometheus と CloudWatch を選択することです。AmazonPrometheusQueryAccess ポリシーと 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 ワークスペースでユーザーを認証する」を参照してください。
このソリューションの使用
このソリューションは、Amazon EKS クラスターで実行されている Kafka アプリケーションからのメトリクスのレポートとモニタリングをサポートするように AWS インフラストラクチャを設定します。を使用してインストールできますAWS Cloud Development Kit (AWS CDK)。
注記
このソリューションを使用して で Amazon EKS クラスターをモニタリングするには AWS CDK
-
前提条件のすべてのステップを完了済みであることを確認してください。
-
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/ .
これらのファイルを修正する必要はありません。
-
コマンドライン環境で (ソリューションファイルをダウンロードしたフォルダから)、次のコマンドを実行します。
必要な環境変数を設定します。
REGION
、AMG_ENDPOINT
、EKS_CLUSTER
、AMP_ARN
を、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
-
デプロイで使用できる注釈を作成する必要があります。名前空間、デプロイ、ステートフルセット、デーモンセット、またはポッドに直接注釈を付けることができます。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
-
Grafana HTTP APIs を呼び出すための ADMIN アクセスを持つサービスアカウントトークンを作成します。詳細については、「サービスアカウントを使用した Grafana HTTP API の認証」を参照してください。トークンを作成するには、次のコマンド AWS CLI で を使用できます。
GRAFANA_ID
を ご使用の 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 することで、 AWS Systems Manager で API キーを使用できるようにします。
AWS_REGION
を、ソリューションを実行するリージョンに置き換えます (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 -
次の
make
コマンドを実行して、プロジェクトの他の依存関係をインストールします。make deps
-
最後に、 AWS CDK プロジェクトを実行します。
make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
-
〔オプション] スタックの作成が完了したら、それぞれの他の前提条件 (個別の Amazon Managed Grafana ワークスペースと Amazon Managed Service for Prometheus ワークスペースを含む) を完了している限り、同じ環境を使用して、同じリージョンの Amazon EKS クラスターで実行されている他の Kafka アプリケーションのスタックのインスタンスをさらに作成できます。新しいパラメータで
export
コマンドを再定義する必要があります。
スタックの作成が完了すると、Amazon Managed Grafana ワークスペースに、アプリケーションと Amazon EKS クラスターのメトリクスを示すダッシュボードが表示されます。メトリクスが収集されるため、メトリクスが表示されるまでに数分かかります。
追跡されるメトリクスのリスト
このソリューションは、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_replicated
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
トラブルシューティング
プロジェクトのセットアップが失敗する原因がいくつかあります。必ず以下の内容を確認してください。
-
ソリューションのインストール前にすべての [前提条件] を完了する必要があります。
-
ソリューションの作成やメトリクスへのアクセスを試みる前に、クラスターに少なくとも 1 つのノードを含める必要があります。
-
Amazon EKS クラスターには、
AWS CNI
、CoreDNS
、kube-proxy
アドオンをインストールする必要があります。インストールしないとソリューションが正しく動作しません。これらは、コンソールを介してクラスターを作成するときにデフォルトでインストールされます。クラスターが AWS SDK を使用して作成された場合は、インストールが必要になる場合があります。 -
Amazon EKS ポッドのインストールがタイムアウトしました。これは、使用可能なノード容量が十分でないときに発生する場合があります。これらの問題には、次のような複数の原因があります。
-
Amazon EKS クラスターが Amazon EC2 ではなく Fargate で初期化されました。このプロジェクトでは Amazon EC2 が必須です。
-
ノードが汚染されているため使用できません。
kubectl describe node
を使用するとテイントを確認できます。次にNODENAME
| grep Taintskubectl 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)