Controllers for Kubernetes で Amazon Managed Service for AWS Prometheus を管理する - Amazon Managed Service for Prometheus

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

Controllers for Kubernetes で Amazon Managed Service for AWS Prometheus を管理する

Amazon Managed Service for Prometheus は、AWS Controllers for Kubernetes (ACK) と統合され、Amazon EKS のワークスペース、アラートマネージャー、ルーラーリソースの管理をサポートします。 AWS Controllers for Kubernetes カスタムリソース定義 (CRDsとネイティブ Kubernetes オブジェクトを使用できます。クラスターの外部にあるリソースは定義する必要はありません。

このセクションでは、既存の Amazon EKS クラスターで AWS Controllers for Kubernetes と Amazon Managed Service for Prometheus を設定する方法について説明します。

AWS Controllers for Kubernetes Amazon Managed Service for Prometheus の ACK コントローラーを紹介するブログ記事も読むことができます。

前提条件

AWS Controllers for Kubernetes と Amazon Managed Service for Prometheus を Amazon EKS クラスターと統合する前に、次の前提条件が必要です。

Amazon EKS クラスターが正しく構成されたら、kubectl get --raw /metrics を呼び出して、Prometheus 用にフォーマットされたメトリクスを確認できます。これで、 AWS Controllers for Kubernetes サービスコントローラーをインストールし、それを使用して Amazon Managed Service for Prometheus リソースをデプロイする準備が整いました。

AWS Controllers for Kubernetes を使用したワークスペースのデプロイ

新しい Amazon Managed Service for Prometheus ワークスペースをデプロイするには、 AWS Controllers for Kubernetes コントローラーをインストールし、それを使用してワークスペースを作成します。

AWS Controllers for Kubernetes を使用して新しい Amazon Managed Service for Prometheus ワークスペースをデプロイするには
  1. 以下のコマンドを実行し、Helm を使用して Amazon Managed Service for Prometheus サービスコントローラーをインストールします。詳細については、 の Controllers for Kubernetes ドキュメントの AWS 「ACK Controller をインストールする」を参照してください GitHub。region には、us-east-1 など、システムに適したリージョンを使用してください。

    export SERVICE=prometheusservice export RELEASE_VERSION=`curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4` export ACK_SYSTEM_NAMESPACE=ack-system export AWS_REGION=region aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller \ oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION --set=aws.region=$AWS_REGION

    しばらくすると、成功を示す次のようなレスポンスが表示されます。

    You are now able to create Amazon Managed Service for Prometheus (AMP) resources! The controller is running in "cluster" mode. The controller is configured to manage AWS resources in region: "us-east-1"

    オプションで、次のコマンドを使用して AWS Controllers for Kubernetes コントローラーが正常にインストールされたことを確認できます。

    helm list --namespace $ACK_SYSTEM_NAMESPACE -o yaml

    これにより、コントローラー ack-prometheusservice-controller に関する情報 (status: deployed など) が返されます。

  2. workspace.yaml という名前のファイルを作成し、次のテキストを記述します。これは、作成するワークスペースの設定として使用されます。

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: Workspace metadata: name: my-amp-workspace spec: alias: my-amp-workspace tags: ClusterName: EKS-demo
  3. 次のコマンドを実行してワークスペースを作成します (このコマンドでは、ステップ 1 で設定したシステム変数が使用されます)。

    kubectl apply -f workspace.yaml -n $ACK_SYSTEM_NAMESPACE

    しばらくすると、アカウントに my-amp-workspace という新しいワークスペースが表示されます。

    次のコマンドを実行して、ワークスペース ID などのワークスペースの詳細とステータスを確認します。または、Amazon Managed Service for Prometheus コンソールで新しいワークスペースを確認することもできます。

    kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
    注記

    新しいワークスペースを作成する代わりに、既存のワークスペースを使用することもできます。

  4. Rulegroups の設定として 2 つの新しい yaml ファイルを作成し、次の設定を使用して次に AlertManager 作成します。

    次の設定を rulegroup.yaml として保存します。WORKSPACE-ID は、前のステップで確認したワークスペース ID に置き換えます。

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: RuleGroupsNamespace metadata: name: default-rule spec: workspaceID: WORKSPACE-ID name: default-rule configuration: | groups: - name: example rules: - alert: HostHighCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 60 for: 5m labels: severity: warning event_type: scale_up annotations: summary: Host high CPU load (instance {{ $labels.instance }}) description: "CPU load is > 60%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - alert: HostLowCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) < 30 for: 5m labels: severity: warning event_type: scale_down annotations: summary: Host low CPU load (instance {{ $labels.instance }}) description: "CPU load is < 30%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"

    次の設定を alertmanager.yaml として保存します。WORKSPACE-ID は、前のステップで確認したワークスペース ID に置き換えます。TOPIC-ARN を通知を送信する Amazon SNS トピックの ARN に、REGION を使用中の に置き換え AWS リージョン ます。Amazon Managed Service for Prometheus に、Amazon SNS トピックへのアクセス許可が必要であることを忘れないでください。

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: AlertManagerDefinition metadata: name: alert-manager spec: workspaceID: WORKSPACE-ID configuration: | alertmanager_config: | route: receiver: default_receiver receivers: - name: default_receiver sns_configs: - topic_arn: TOPIC-ARN sigv4: region: REGION message: | alert_type: {{ .CommonLabels.alertname }} event_type: {{ .CommonLabels.event_type }}
    注記

    これらの設定ファイルの形式の詳細については、RuleGroupsNamespaceData「」および「」を参照してくださいAlertManagerDefinitionData

  5. 次のコマンドを実行して、ルールグループとアラートマネージャーの設定を作成します (このコマンドでは、ステップ 1 で設定したシステム変数が使用されます)。

    kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE

    しばらくすると変更が有効になります。

    注記

    リソースを作成するのではなく更新する場合は、yaml ファイルを更新し、kubectl apply コマンドを再実行するだけです。

    リソースを削除するには、次のコマンドを実行します。を、、WorkspaceAlertManagerDefinitionまたは を削除するリソースのタイプResourceTypeに置き換えますRuleGroupNamespace。を削除するリソースの名前ResourceNameに置き換えます。

    kubectl delete ResourceType ResourceName -n $ACK_SYSTEM_NAMESPACE

これで、新しいワークスペースのデプロイは完了です。次のセクションでは、このワークスペースにメトリクスを送信するようにクラスターを構成する方法を説明します。

Amazon Managed Service for Prometheus ワークスペースに書き込むための Amazon EKS クラスターの構成

このセクションでは、Helm を使用して、Amazon EKS クラスターで実行されている Prometheus を構成し、前のセクションで作成した Amazon Managed Service for Prometheus ワークスペースへのメトリクスのリモートで書き込みを行う方法について説明します。

この手順では、メトリクスの取り込みに使用するために作成した IAM ロールの名前が必要です。まだ作成していない場合は、「Amazon EKS クラスターからメトリクスを取り込むためのサービスロールの設定」を参照して、詳細と手順を確認してください。これらの手順に従うと、amp-iamproxy-ingest-role という IAM ロールが作成されます。

Amazon EKS クラスターをリモート書き込み用に構成するには
  1. 次のコマンドを使用して、ワークスペースの prometheusEndpoint を取得します。WORKSPACE-ID は、前のセクションで確認したワークスペース ID に置き換えます。

    aws amp describe-workspace --workspace-id WORKSPACE-ID

    返される結果には prometheusEndpoint が含まれ、次のような形式になります。

    https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-a1b2c3d4-a123-b456-c789-ac1234567890/

    後のステップで使用するために、この URL を保存しておきます。

  2. 次のテキストで新しいファイルを作成し、prometheus-config.yaml という名前を付けます。account は自分のアカウント ID に、workspaceURL/ は先ほど確認した URL に、region はシステムの適切な AWS リージョン に置き換えます。

    serviceAccounts: server: name: "amp-iamproxy-ingest-service-account" annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::account:role/amp-iamproxy-ingest-role" server: remoteWrite: - url: workspaceURL/api/v1/remote_write sigv4: region: region queue_config: max_samples_per_send: 1000 max_shards: 200 capacity: 2500
  3. 次の Helm コマンドを使用して、Prometheus のチャート名、名前空間の名前、チャートのバージョンを確認します。

    helm ls --all-namespaces

    ここまでの手順に基づくと、Prometheus チャートと名前空間にはどちらも prometheus という名前が付いていて、チャートのバージョンは 15.2.0 のようになります。

  4. 前のステップでPrometheusChartVersion確認した PrometheusChartNamePrometheusNamespace、および を使用して、次のコマンドを実行します。

    helm upgrade PrometheusChartName prometheus-community/prometheus -n PrometheusNamespace -f prometheus-config.yaml --version PrometheusChartVersion

    数分後に、アップグレードが成功したことを示すメッセージが表示されます。

  5. 必要に応じて、awscurl を使用して Amazon Managed Service for Prometheus エンドポイントにクエリを実行して、メトリクスが正常に送信されていることを確認します。Region AWS リージョン を使用中の に、workspaceURLをステップ 1 で見つけた URL に置き換えます。

    awscurl --service="aps" --region="Region" "workspaceURL/api/v1/query?query=node_cpu_seconds_total"

これで、YAML ファイルを設定として使用して、Amazon Managed Service for Prometheus ワークスペースを作成し、そのワークスペースに Amazon EKS クラスターから接続することができました。これらのファイルはカスタムリソース定義 (CRD) と呼ばれ、Amazon EKS クラスター内に配置されます。 AWS Controllers for Kubernetes コントローラーを使用して、Amazon Managed Service for Prometheus のすべてのリソースをクラスターから直接管理できます。