Amazon Managed Grafana で Kafka アプリケーションをモニタリングするためのソリューション - Amazon Managed Grafana

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

Amazon Managed Grafana で Kafka アプリケーションをモニタリングするためのソリューション

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

注記

このソリューションは、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 アプリケーションのパフォーマンスとワークロードに関するインサイトを提供することで、アプリケーションの運用をより効果的にするのに役立つダッシュボードを生成するために使用されます。

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

このソリューションを使用して構築した Grafana ダッシュボードフォルダの例を示すイメージ。

メトリクスは 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 にあるかどうかによって異なります。

前提条件

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

  1. モニタリングする [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 の使用方法」を参照してください。

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

  3. Amazon EKS クラスターと同じ に Amazon Managed Service for Prometheus ワークスペースを作成する必要があります。 AWS アカウント 詳細については、[Amazon Managed Service for Prometheus ユーザーガイド][ワークスペースの作成] を参照してください。

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

  4. 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)

注記

ここでの手順では、 AWS CLI、、および Node.js AWS CDKと NPM の両方がインストールされている環境があることを前提としています。make と を使用してbrew、ビルドやその他の一般的なアクションを簡素化します。

このソリューションを使用して で Amazon EKS クラスターをモニタリングするには AWS CDK
  1. 前提条件のすべてのステップを完了済みであることを確認してください。

  2. 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/ .

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

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

    必要な環境変数を設定します。REGIONAMG_ENDPOINTEKS_CLUSTERAMP_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
  4. デプロイで使用できる注釈を作成する必要があります。名前空間、デプロイ、ステートフルセット、デーモンセット、またはポッドに直接注釈を付けることができます。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
  5. 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
  6. 次の make コマンドを実行して、プロジェクトの他の依存関係をインストールします。

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

    make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
  8. 〔オプション] スタックの作成が完了したら、それぞれの他の前提条件 (個別の 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 CNICoreDNSkube-proxy アドオンをインストールする必要があります。インストールしないとソリューションが正しく動作しません。これらは、コンソールを介してクラスターを作成するときにデフォルトでインストールされます。クラスターが AWS SDK を使用して作成された場合は、インストールが必要になる場合があります。

  • Amazon EKS ポッドのインストールがタイムアウトしました。これは、使用可能なノード容量が十分でないときに発生する場合があります。これらの問題には、次のような複数の原因があります。

    • Amazon EKS クラスターが Amazon EC2 ではなく Fargate で初期化されました。このプロジェクトでは Amazon EC2 が必須です。

    • ノードが汚染されているため使用できません。

      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)