AWS マネージドコレクターの使用 - Amazon Managed Service for Prometheus

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

AWS マネージドコレクターの使用

Amazon Managed Service for Prometheus コレクターを使用するには、Amazon EKS クラスター内のメトリクスを検出して取得するスクレイパーを作成する必要があります。

  • Amazon EKS クラスターを作成するときに、スクレイパーを作成できます。スクレイパーの作成を含め、Amazon EKS クラスターの作成に関する詳細については、「Amazon EKS ユーザーガイド」の「Amazon EKS クラスターの作成」を参照してください。

  • 独自のスクレイパーは、 AWS API または を使用してプログラムで作成できます AWS CLI。

注記

カスタマーマネージドキーで作成された Amazon Managed Service for Prometheus ワークスペースでは、 AWS マネージドコレクターを取り込みに使用することはできません。

Amazon Managed Service for Prometheus コレクターは、Prometheus と互換性のあるメトリクスをスクレイピングします。Prometheus 互換メトリクスの詳細については、「Prometheus と互換性のあるメトリクスとはどのようなものですか。」を参照してください。

注記

クラスターからメトリクスをスクレイピングすると、クロスリージョントラフィックなど、ネットワークの使用に対して料金が発生する可能性があります。これらのコストを最適化する 1 つの方法は、エンドポイントを設定/metricsして、提供されたメトリクス (gzip など) を圧縮し、ネットワーク上で移動する必要があるデータを減らすことです。これを行う方法は、メトリクスを提供するアプリケーションまたはライブラリによって異なります。一部のライブラリはデフォルトで gzip です。

以下のトピックでは、スクレイパーを作成、管理、および設定する方法について説明します。

スクレイパーの作成

Amazon Managed Service for Prometheus コレクターは、Amazon EKS クラスターからメトリクスを検出して収集するスクレイパーで構成されています。Amazon Managed Service for Prometheus ではお客様に代わってスクレイパーが管理されます。インスタンス、エージェント、スクレイパーをご自身で管理しなくても、必要なスケーラビリティ、セキュリティ、信頼性を実現できます。

Amazon EKS コンソールから Amazon EKS クラスターを作成すると、スクレイパーが自動的に作成されます。ただし、状況によっては、ご自身でスクレイパーを作成したい場合もあるでしょう。例えば、 AWS マネージドコレクターを既存の Amazon EKS クラスターに追加する場合や、既存のコレクターの設定を変更する場合などです。

AWS API または を使用してスクレイパーを作成できます AWS CLI。

独自のスクレイパーを作成するには、いくつかの前提条件があります。

  • Amazon EKS クラスターが作成済みである必要があります。

  • Amazon EKS クラスターは、クラスターエンドポイントアクセスコントロールがプライベートアクセスを含むように設定されている必要があります。プライベートとパブリックを含めることができますが、プライベートを含める必要があります。

注記

クラスターは、Amazon リソースネーム (ARN) によってスクレイパーに関連付けられます。クラスターを削除し、同じ名前の新しいクラスターを作成すると、ARN は新しいクラスターに再利用されます。このため、スクレイパーは新しいクラスターのメトリクスの収集を試みます。スクレイパーは、クラスターの削除とは別に削除します。

AWS API

AWS API を使用してスクレイパーを作成するには

CreateScraper API オペレーションを使用して AWS API を含むスクレイパーを作成します。次の例では、us-west-2 リージョンでスクレイパーを作成します。 AWS アカウント、ワークスペース、セキュリティ、Amazon EKS クラスターの情報を独自の IDsに置き換え、スクレイパーに使用する設定を指定する必要があります。

注記

セキュリティグループとサブネットは、接続先のクラスターのセキュリティグループとサブネットに設定する必要があります。

少なくとも 2 つ以上のアベイラビリティーゾーンにある 2 つ以上のサブネットを含める必要があります。

scrapeConfiguration は、base64 でエンコードされた Prometheus 設定 YAML ファイルです。GetDefaultScraperConfiguration API オペレーションで汎用設定をダウンロードできます。の形式の詳細については、scrapeConfiguration「」を参照してくださいスクレイパー設定

POST /scrapers HTTP/1.1 Content-Length: 415 Authorization: AUTHPARAMS X-Amz-Date: 20201201T193725Z User-Agent: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.58-37.125.amzn2int.x86_64 botocore/1.18.6 { "alias": "myScraper", "destination": { "ampConfiguration": { "workspaceArn": "arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id" } }, "source": { "eksConfiguration": { "clusterArn": "arn:aws:eks:us-west-2:account-id:cluster/cluster-name", "securityGroupIds": ["sg-security-group-id"], "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"] } }, "scrapeConfiguration": { "configurationBlob": <base64-encoded-blob> } }
AWS CLI

を使用してスクレイパーを作成するには AWS CLI

create-scraper コマンドを使用して、 でスクレイパーを作成します AWS CLI。次の例では、us-west-2 リージョンでスクレイパーを作成します。 AWS アカウント、ワークスペース、セキュリティ、Amazon EKS クラスターの情報を独自の IDsに置き換え、スクレイパーに使用する設定を指定する必要があります。

注記

セキュリティグループとサブネットは、接続先のクラスターのセキュリティグループとサブネットに設定する必要があります。

少なくとも 2 つ以上のアベイラビリティーゾーンにある 2 つ以上のサブネットを含める必要があります。

scrape-configuration は、base64 でエンコードされた Prometheus 設定 YAML ファイルです。get-default-scraper-configuration コマンドを使用して汎用設定をダウンロードできます。の形式の詳細については、scrape-configuration「」を参照してくださいスクレイパー設定

aws amp create-scraper \ --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id:cluster/cluster-name', securityGroupIds=['sg-security-group-id'],subnetIds=['subnet-subnet-id-1', 'subnet-subnet-id-2']}" \ --scrape-configuration configurationBlob=<base64-encoded-blob> \ --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id'}"

以下は、 AWS API で使用できるスクレイパーオペレーションの完全なリストです。

  • CreateScraper API オペレーションを使用してスクレイパーを作成します。

  • ListScrapers API オペレーションを使用して、既存のスクレイパーを一覧表示します。

  • DeleteScraper API オペレーションを使用してスクレイパーを削除します。

  • DescribeScraper API オペレーションを使用してスクレイパーの詳細を取得します。

  • GetDefaultScraperConfiguration API オペレーションを使用してスクレイパーの汎用設定を取得します。

注記

スクレイピングする Amazon EKS クラスターは、Amazon Managed Service for Prometheus がメトリクスにアクセスできるように設定されている必要があります。次のトピックでは、クラスターの設定方法について説明します。

スクレイパー作成時の一般的なエラー

以下は、新しいスクレイパーを作成しようとするときに発生する最も一般的な問題です。

  • 必要な AWS リソースは存在しません。指定されたセキュリティグループ サブネット 、および Amazon EKS クラスターが存在している必要があります。

  • IP アドレス空間が不十分です。CreateScraper API に渡すサブネットごとに、少なくとも 1 つの IP アドレスが必要です。

Amazon EKS クラスターの設定

Amazon EKS クラスターは、スクレイパーがメトリクスにアクセスできるように設定する必要があります。この設定には 2 つのオプションがあります。

  • Amazon EKS アクセスエントリを使用して、Amazon Managed Service for Prometheus コレクターにクラスターへのアクセスを自動的に提供します。

  • マネージドメトリクススクレイピング用に Amazon EKS クラスターを手動で設定します。

以下のトピックでは、これらの各項目について詳しく説明します。

アクセスエントリを使用してスクレイパーアクセス用に Amazon EKS を設定する

Amazon EKS のアクセスエントリを使用することは、Amazon Managed Service for Prometheus にクラスターからメトリクスをスクレイプするためのアクセスを許可する最も簡単な方法です。

スクレイピングする Amazon EKS クラスターは、API 認証を許可するように設定する必要があります。クラスター認証モードは、 APIまたは のいずれかに設定する必要がありますAPI_AND_CONFIG_MAP。これは、クラスターの詳細のアクセス設定タブの Amazon EKS コンソールで表示できます。詳細については、「Amazon EKS ユーザーガイド」の「Amazon EKS クラスターの Kubernetes オブジェクトへのアクセスを IAM ロールまたはユーザーに許可する」を参照してください。

クラスターの作成時または作成後にスクレイパーを作成できます。

  • クラスターの作成時Amazon EKS コンソールを使用して Amazon EKS クラスターを作成するときに (クラスターの一部としてスクレイパーを作成する指示に従って)、このアクセスを設定できます。アクセスエントリポリシーが自動的に作成され、Amazon Managed Service for Prometheus にクラスターメトリクスへのアクセスが許可されます。

  • クラスターの作成後に を追加する – Amazon EKS クラスターがすでに存在する場合は、認証モードを APIまたは に設定します。Amazon Managed Service for Prometheus API または CLI を使用して作成したスクレイパーにはAPI_AND_CONFIG_MAP、自動的に正しいアクセスエントリポリシーが作成され、スクレイパーはクラスターにアクセスできます。

アクセスエントリポリシーが作成されました

スクレイパーを作成し、Amazon Managed Service for Prometheus がアクセスエントリポリシーを生成できるようにすると、次のポリシーが生成されます。アクセスエントリの詳細については、「Amazon EKS ユーザーガイド」の「IAM ロールまたはユーザーに Kubernetes へのアクセスを許可する」を参照してください。

{ "rules": [ { "effect": "allow", "apiGroups": [ "" ], "resources": [ "nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps" ], "verbs": [ "get", "list", "watch" ] }, { "effect": "allow", "apiGroups": [ "extensions", "networking.k8s.io" ], "resources": [ "ingresses/status", "ingresses" ], "verbs": [ "get", "list", "watch" ] }, { "effect": "allow", "nonResourceURLs": [ "/metrics" ], "verbs": [ "get" ] } ] }

スクレイパーアクセス用に Amazon EKS を手動で設定する

を使用して kubernetes クラスターへのアクセスaws-auth ConfigMapを制御する場合でも、Amazon Managed Service for Prometheus スクレイパーにメトリクスへのアクセスを許可できます。次の手順では、Amazon Managed Service for Prometheus に Amazon EKS クラスターからメトリクスをスクレイプするためのアクセス権を付与します。

注記

ConfigMap およびアクセスエントリの詳細については、「Amazon EKS ユーザーガイド」の「IAM ロールまたはユーザーに Kubernetes へのアクセスを許可する」を参照してください。

この手順では、 kubectlと AWS CLI を使用します。kubectl のインストールの詳細については、「Amazon EKS ユーザーガイド」の「kubectl のインストール」を参照してください。

マネージドメトリクススクレイピング用に Amazon EKS クラスターを手動で設定するには
  1. clusterrole-binding.yml という名前のファイルを作成し、次のテキストを記述します。

    apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aps-collector-role rules: - apiGroups: [""] resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps"] verbs: ["describe", "get", "list", "watch"] - apiGroups: ["extensions", "networking.k8s.io"] resources: ["ingresses/status", "ingresses"] verbs: ["describe", "get", "list", "watch"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aps-collector-user-role-binding subjects: - kind: User name: aps-collector-user apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: aps-collector-role apiGroup: rbac.authorization.k8s.io
  2. クラスターで次のコマンドを実行します。

    kubectl apply -f clusterrole-binding.yml

    これにより、クラスターのロールバインディングとルールが作成されます。この例では、aps-collector-role をロール名、aps-collector-user をユーザー名として使用しています。

  3. 次のコマンドは、scraper-id という ID のスクレイパーに関する情報を提供します。これは、前のセクションのコマンドを使用して作成したスクレイパーです。

    aws amp describe-scraper --scraper-id scraper-id
  4. describe-scraper の結果から roleArn を探します。この形式は次のようになります。

    arn:aws:iam::account-id:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_unique-id

    Amazon EKS では、この ARN に別の形式が必要です。次のステップで使用するために、返される ARN の形式を調整する必要があります。この形式に合わせて編集してください。

    arn:aws:iam::account-id:role/AWSServiceRoleForAmazonPrometheusScraper_unique-id

    例えば、この ARN の場合、

    arn:aws:iam::111122223333:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7

    以下のように記述する必要があります。

    arn:aws:iam::111122223333:role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7
  5. 前のステップで変更した roleArn と、クラスター名およびリージョンを使用して、クラスター内で以下のコマンドを実行します。

    eksctl create iamidentitymapping --cluster cluster-name --region region-id --arn roleArn --username aps-collector-user

    これにより、スクレイパーは clusterrole-binding.yml ファイルに作成したロールとユーザーを使用してクラスターにアクセスできます。

スクレイパーの検出と削除

AWS API または を使用して AWS CLI 、アカウント内のスクレイパーを一覧表示したり、削除したりできます。

注記

AWS CLI または SDK の最新バージョンを使用していることを確認してください。最新バージョンでは、最新の機能やセキュリティ更新プログラムを利用できます。または、常に up-to-date コマンドラインエクスペリエンスを提供する AWS Cloudshell を自動的に使用します。

アカウント内のすべてのスクレイパーを一覧表示するには、 ListScrapers API オペレーションを使用します。

または、 を使用して AWS CLIを呼び出します。

aws amp list-scrapers

ListScrapers は、アカウント内のすべてのスクレイパーを返します。例:

{ "scrapers": [ { "scraperId": "s-1234abcd-56ef-7890-abcd-1234ef567890", "arn": "arn:aws:aps:us-west-2:123456789012:scraper/s-1234abcd-56ef-7890-abcd-1234ef567890", "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-2931", "status": { "statusCode": "DELETING" }, "createdAt": "2023-10-12T15:22:19.014000-07:00", "lastModifiedAt": "2023-10-12T15:55:43.487000-07:00", "tags": {}, "source": { "eksConfiguration": { "clusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-cluster", "securityGroupIds": [ "sg-1234abcd5678ef90" ], "subnetIds": [ "subnet-abcd1234ef567890", "subnet-1234abcd5678ab90" ] } }, "destination": { "ampConfiguration": { "workspaceArn": "arn:aws:aps:us-west-2:123456789012:workspace/ws-1234abcd-5678-ef90-ab12-cdef3456a78" } } } ] }

スクレイパーを削除するには、 ListScrapersオペレーションを使用して削除するscraperIdスクレイパーの を見つけ、 DeleteScraperオペレーションを使用して削除します。

または、 を使用して AWS CLIを呼び出します。

aws amp delete-scraper --scraper-id scraperId

スクレイパー設定

Prometheus 互換のスクレイパー設定を使用して、スクレイパーがメトリクスを検出して収集する方法を制御できます。例えば、メトリクスをワークスペースに送信する間隔を変更できます。再ラベル付けを使用して、メトリクスのラベルを動的に書き換えることもできます。スクレイパー設定は、スクレイパーの定義の一部である YAML ファイルです。

新しいスクレイパーを作成したら、API コールで base64 でエンコードされた YAML ファイルを提供して設定を指定します。Amazon Managed Service for Prometheus API の GetDefaultScraperConfiguration オペレーションを含む汎用設定ファイルをダウンロードできます。

スクレイパーの設定を変更するには、スクレイパーを削除し、新しい設定で再作成します。

サポートされている設定

可能な値の詳細な内訳を含むスクレイパー設定形式の詳細については、Prometheus ドキュメントの「設定」を参照してください。グローバル設定オプションと <scrape_config> オプションには、最も一般的に必要なオプションが記載されています。

Amazon EKS はサポートされている唯一のサービスであるため、サポートされているサービス検出設定 (<*_sd_config>) は のみです<kubernetes_sd_config>

許可される設定セクションの完全なリスト:

  • <global>

  • <scrape_config>

  • <static_config>

  • <relabel_config>

  • <metric_relabel_configs>

  • <kubernetes_sd_config>

これらのセクション内の制限事項は、サンプル設定ファイルの後に一覧表示されます。

設定ファイルの例

以下は、30 秒のスクレイプ間隔の YAML 設定ファイルのサンプルです。

global: scrape_interval: 30s external_labels: clusterArn: apiserver-test-2 scrape_configs: - job_name: pod_exporter kubernetes_sd_configs: - role: pod - job_name: cadvisor scheme: https authorization: type: Bearer credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - replacement: kubernetes.default.svc:443 target_label: __address__ - source_labels: [__meta_kubernetes_node_name] regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor # apiserver metrics - scheme: https authorization: type: Bearer credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token job_name: kubernetes-apiservers kubernetes_sd_configs: - role: endpoints relabel_configs: - action: keep regex: default;kubernetes;https source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name # kube proxy metrics - job_name: kube-proxy honor_labels: true kubernetes_sd_configs: - role: pod relabel_configs: - action: keep source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_pod_name separator: '/' regex: 'kube-system/kube-proxy.+' - source_labels: - __address__ action: replace target_label: __address__ regex: (.+?)(\\:\\d+)? replacement: $1:10249

以下は、 AWS マネージドコレクターに固有の制限です。

  • スクレイプ間隔 — スクレイパー設定では、30 秒未満のスクレイプ間隔を指定できません。

  • ターゲットstatic_config 内のターゲットは IP アドレスとして指定する必要があります。

  • DNS 解決 — ターゲット名に関連して、この設定で認識されるサーバー名は Kubernetes API サーバー のみですkubernetes.default.svc。他のすべてのマシン名は IP アドレスで指定する必要があります。

  • 承認 – 承認が必要ない場合は省略します。必要な場合、認証は でなければならずBearer、ファイル を指す必要があります/var/run/secrets/kubernetes.io/serviceaccount/token。つまり、使用すると、承認セクションは次のようになります。

    authorization: type: Bearer credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    注記

    type: Bearer がデフォルトであるため、省略できます。

スクレイパー設定のトラブルシューティング

Amazon Managed Service for Prometheus コレクターは、メトリクスの検出と収集を自動的に行います。しかし、予想したメトリクスが Amazon Managed Service for Prometheus ワークスペースに表示されない場合、どのようにトラブルシューティングできるでしょうか。

up メトリクスは便利なツールです。Amazon Managed Service for Prometheus コレクターが検出した各エンドポイントについて、このメトリクスは自動的に送信されます。このメトリクスには 3 つの状態があり、コレクター内で発生している問題のトラブルシューティングに役立ちます。

  • up が存在しない — エンドポイントの up メトリクスが存在しない場合、コレクターがエンドポイントを検出できなかったことを意味します。

    エンドポイントが存在することが確実な場合は、スクレイプ設定を調整する必要がある可能性があります。検出の relabel_config の調整が必要な場合もあれば、検出に使用される role に問題がある可能性もあります。

  • up は存在するものの、常に 0 — up が存在するが 0 の場合、コレクターはエンドポイントを検出できますが、Prometheus 互換のメトリクスを検出できません。

    この場合は、curl エンドポイントに対して直接コマンドを実行してみるといいかもしれません。使用しているプロトコル (http または https)、エンドポイント、ポートなど、詳細が正しいことを検証できます。エンドポイントが有効な200レスポンスで応答していること、および Prometheus 形式に従っていることを確認することもできます。最後に、レスポンスの本文を最大許容サイズより大きくすることはできません。( AWS マネージドコレクターの制限については、次のセクションを参照してください。)

  • up が存在し、0 より大きい — up が存在し、かつ 0 より大きい場合、メトリクスは Amazon Managed Service for Prometheus に送信されています。

    Amazon Managed Service for Prometheus (または Amazon Managed Grafana などの代替ダッシュボード) で正しいメトリクスを検出していることを確認します。curl をもう一度使用して、/metrics エンドポイントに予想したデータがあるかどうかを確認できます。また、スクレイパーあたりのエンドポイント数など、他の制限を超えていないことも確認してください。を使用してメトリクスの数を確認することで、スクレイピングされるupメトリクスエンドポイントの数を確認できますcount(up)

スクレイパーの制限事項

Amazon Managed Service for Prometheus が提供するフルマネージド型スクレイパーには、いくつかの制限があります。

  • リージョン — EKS クラスター、マネージドスクレイパー、Amazon Managed Service for Prometheus ワークスペースはすべて同じ AWS リージョンにある必要があります。

  • アカウント — EKS クラスター、マネージドスクレイパー、Amazon Managed Service for Prometheus ワークスペースはすべて同じ AWS アカウントにある必要があります。

  • コレクター — 1 リージョンの 1 アカウントあたり、最大 10 個の Amazon Managed Service for Prometheus スクレイパーを設定できます。

    注記

    クォータの引き上げをリクエストすることで、この上限を引き上げることができます。

  • メトリクスレスポンス — 任意の 1 つの /metrics エンドポイントリクエストからのレスポンスの本文は 50 メガバイト (MB) を超えることはできません。

  • スクレイパーあたりのエンドポイント — スクレイパーは最大 30,000 の /metrics エンドポイントをスクレイピングできます。

  • スクレイプ間隔 — スクレイパー設定では、30 秒未満のスクレイプ間隔を指定できません。