本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 一併使用的完整湊集器作業清單:
-
使用 CreateScraperAPI 操作創建抓取工具。
-
使用 ListScrapersAPI 操作列出現有的抓取工具。
-
使用 DeleteScraperAPI 操作刪除抓取工具。
-
使用 DescribeScraperAPI 操作獲取有關抓取工具的更多詳細信息。
-
使用 GetDefaultScraperConfigurationAPI 操作獲取抓取工具的通用配置。
注意
必須設定您要湊集的 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 身份驗證。叢集驗證模式必須設定為API
或API_AND_CONFIG_MAP
。這可在叢集詳細資料的存取組態索引標籤上的 Amazon EKS 主控台中檢視。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的允許 IAM 角色或使用者存取 Amazon EKS 叢集上的 Kubernetes 物件。
您可以在建立叢集時或建立叢集之後建立抓取工具:
-
建立叢集時 — 您可以在透過 Amazon EKS 主控台建立 Amazon EKS 叢集時設定此存取權 (依照指示在叢集中建立抓取工具),並自動建立存取項目政策,讓 Prometheus 的 Amazon 受管服務可存取叢集指標。
-
在叢集建立後新增 — 如果您的 Amazon EKS 叢集已存在,請將身份驗證模式設定為
API
或API_AND_CONFIG_MAP
,您透過 Prometheus API 或 CLI 的 Amazon 受管服務建立的任何抓取工具都會自動為您建立正確的存取輸入政策,而且抓取工具將可以存取您的叢集。
存取項目原則已建立
當您創建抓取工具並讓 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 叢集以進行受管指標抓取
-
使用下列內文建立名為
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
-
在叢集中執行下列命令:
kubectl apply -f clusterrole-binding.yml
這將建立叢集角色連結和規則。此範例使用
aps-collector-role
作為角色名稱和aps-collector-user
作為使用者名稱。 -
以下命令為您提供有關含有 ID 為
scraper-id
的資訊。這是您使用上一節命令建立的湊集器。aws amp describe-scraper --scraper-id
scraper-id
-
在
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
-
使用上一個步驟中修改後的
roleArn
以及您的叢集名稱和區域,在叢集中執行下列命令:eksctl create iamidentitymapping --cluster
cluster-name
--regionregion-id
--arnroleArn
--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
命令。您可以驗證您的詳細資料是否正確,例如您使用的通訊協定 (http
或https
)、端點或連接埠。您也可以檢查端點是否有效回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 秒的湊集間隔。