使用 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 收集器會抓取與 Prometheus 相容的指標。如需 Prometheus 相容指標的詳細資訊,請參閱 什麼是與 Prometheus 相容的指標?

下列主題說明如何建立、管理和設定湊集器。

建立湊集器

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 地區中建立湊集器。您需要使用自己的 ID 取代 AWS 帳戶、工作區、安全性和 Amazon EKS 叢集資訊,並提供用於抓取工具的組態。

注意

您必須包含至少兩個子網路,至少位於兩個可用區域。

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 地區中建立湊集器。您需要使用自己的 ID 取代 AWS 帳戶、工作區、安全性和 Amazon EKS 叢集資訊,並提供用於抓取工具的組態。

注意

您必須包含至少兩個子網路,至少位於兩個可用區域。

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 一併使用的完整湊集器作業清單:

注意

必須設定您要湊集的 Amazon EKS 叢集以讓 Amazon Managed Service for Prometheus 存取指標。下一個主題說明如何設定叢集。

創建抓取工具時的常見錯誤

以下是嘗試創建新抓取工具時最常見的問題。

  • 所需的 AWS 資源不存在。指定的安全群組子網路Amazon EKS 叢集必須存在。

  • IP 位址空間不足。您必須在傳遞至 CreateScraper API 的每個子網路中至少有一個可用的 IP 位址。

設定 Amazon EKS 叢集

必須設定您的 Amazon EKS 叢集以讓湊集器存取指標。此組態有兩個選項:

  • 使用 Amazon EKS 存取項目,自動為 Prometheus 收集器提供 Amazon 受管服務存取您叢集的存取權。

  • 手動設定 Amazon EKS 叢集以進行受管指標抓取。

下列主題會更詳細地說明這些主題。

使用存取項目設定 Amazon EKS 以進行抓取工具存取

使用 Amazon EKS 的存取項目是讓 Prometheus 的 Amazon 受管服務存取權從叢集抓取指標的最簡單方法。

您要抓取的 Amazon EKS 叢集必須設定為允許 API 身份驗證。叢集驗證模式必須設定為APIAPI_AND_CONFIG_MAP。這可在叢集詳細資料的存取組態索引標籤上的 Amazon EKS 主控台中檢視。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的允許 IAM 角色或使用者存取 Amazon EKS 叢集上的 Kubernetes 物件

您可以在建立叢集時或建立叢集之後建立抓取工具:

存取項目原則已建立

當您創建抓取工具並讓 Prometheus 的 Amazon 託管服務為您生成訪問輸入政策時,它會生成以下策略。如需有關存取項目的詳細資訊,請參閱 Amazon E KS 使用者指南中的允許 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 以進行刮板訪問

如果您偏好使用控制aws-auth ConfigMap對 kubernetes 叢集的存取,您仍然可以為 Prometheus 抓取工具授予 Amazon 受管服務存取您的指標。以下步驟將為 Prometheus 提供 Amazon 託管服務訪問權限,以從您的 Amazon EKS 集群抓取指標。

注意

如需有關ConfigMap和存取項目的詳細資訊,請參閱 Amazon E KS 使用者指南中的允許 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. 以下命令為您提供有關含有 ID 為 scraper-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。最新版本為您提供最新的特色和功能,以及安全性更新。或者,使用 AWS Cloudshell,它可以自動提供始終 up-to-date 命令列體驗。

要列出您帳戶中的所有抓取工具,請使用 ListScrapersAPI 操作。

或者,使用 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" } } } ] }

要刪除抓取工具,scraperId請使用該ListScrapers操作查找要刪除的抓取工具,然後使用該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 地址。

  • 授權 — 如果不需要授權,則省略。如果需要,授權必須是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 收集器探索的每個端點,皆會自動分配此指標。此指標有三種狀態,可協助您疑難排解收集器內所發生的事情。

  • up 不存在 - 若端點沒有 up 指標,則這表示收集器找不到端點。

    如果您確定端點已存在,則可能需要調整湊集組態。探索 relabel_config 可能需要調整,或者用於探索的 role 可能出現問題。

  • up 已存在,但始終為 0 — 如果 up 已存在但為 0,則收集器能夠探索端點,但找不到任何與 Prometheus 相容的指標。

    在這種情況下,您可以嘗試直接對端點使用 curl 命令。您可以驗證您的詳細資料是否正確,例如您使用的通訊協定 (httphttps)、端點或連接埠。您也可以檢查端點是否有效回200應,並遵循 Prometheus 格式。最後,響應的主體不能大於允許的最大大小。(如需 AWS 受管理之收集器的限制,請參閱下一節。)

  • up 已存在且大於 0 — 若 up 已存在且大於 0,則指標會傳送至 Amazon Managed Service for Prometheus。

    驗證您正在尋找 Amazon Managed Service for Prometheus (或您的替代儀表板,例如 Amazon Managed Grafana) 中的正確指標。您可以再次使用 curl 來檢查/metrics端點中的預期數據。同時檢查您是否未超過其他限制,例如每個湊集器的端點數量。您可以使count(up)用檢查指標計數來檢查正在抓取的up指標端點數量。

湊集器限制

Amazon Managed Service for Prometheus 所提供全受管湊集器的限制較少。

  • 區域:您的 EKS 叢集、受管理湊集器和 Amazon Managed Service for Prometheus workspace 必須位於相同 AWS 區域。

  • 帳戶:您的 EKS 叢集、受管湊集器和 Amazon Managed Service for Prometheus 工作區都必須處於相同 AWS 帳戶。

  • 收集器:各帳戶最多可以為每個區域提供 10 個 Amazon Managed Service for Prometheus 湊集器。

    注意

    您可以透過請求增加配額來請求增加此限制。

  • 指標回應:來自任何一個 /metrics 端點請求的回應主體不能超過 50 MB。

  • 每個湊集器的端點:湊集器最多可以湊集 30,000 /metrics 個端點。

  • 湊集間隔:湊集器組態無法指定少於 30 秒的湊集間隔。