本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 EKS 叢集會公開 API 伺服器的指標。Kubernetes 版本1.28
或更高版本的 Amazon EKS 叢集也會公開 kube-scheduler
和 的指標kube-controller-manager
。如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的擷取 Prometheus 格式的控制平面原始指標。
注意
從叢集擴展指標可能會產生網路用量的費用。最佳化這些成本的其中一種方法是設定/metrics
端點來壓縮提供的指標 (例如,使用 gzip),以減少必須跨網路移動的資料。如何執行此操作取決於提供指標的應用程式或程式庫。根據預設,某些程式庫 gzip。
下列主題說明如何建立、管理和設定湊集器。
建立湊集器
Amazon Managed Service for Prometheus 收集器包含一個湊集器,可從 Amazon EKS 叢集中探索和收集指標。Amazon Managed Service for Prometheus 可為您管理湊集器,提供所需的可擴展性、安全性和可靠性,而無需自行管理任何執行個體、代理程式或湊集器。
建立抓取器的方法有三種:
-
當您透過 Amazon EKS 主控台建立 Amazon EKS 叢集並選擇開啟 Prometheus 指標時,系統會自動為您建立抓取器。
-
您可以從 Amazon EKS 主控台為現有叢集建立抓取器。在 Amazon EKS 主控台
中開啟叢集,然後在可觀測性索引標籤上,選擇新增抓取器。 如需可用設定的詳細資訊,請參閱《Amazon EKS 使用者指南》中的開啟 Prometheus 指標。
-
您可以使用 AWS API 或 建立抓取器 AWS CLI。
這些選項會在下列程序中說明。
您需先滿足幾項先決條件,才能建立自己的湊集器:
注意
叢集會依其 Amazon 資源名稱 (ARN) 與抓取器建立關聯。如果您刪除叢集,然後使用相同名稱建立新的叢集,則新的叢集將重複使用 ARN。因此,抓取器會嘗試收集新叢集的指標。您可以將抓取器與刪除叢集分開刪除。
下列是您可以與 AWS API 一併使用的完整湊集器作業清單:
-
使用 CreateScraper API 操作建立抓取器。
-
使用 ListScrapers API 操作列出現有的抓取器。
-
使用 UpdateScraper API 操作更新抓取器的別名、組態或目的地。
-
使用 DeleteScraper API 操作刪除抓取器。
-
使用 DescribeScraper API 操作取得有關抓取器的詳細資訊。
-
使用 GetDefaultScraperConfiguration API 操作取得抓取器的一般用途組態。
注意
必須設定您要湊集的 Amazon EKS 叢集以讓 Amazon Managed Service for Prometheus 存取指標。下一個主題說明如何設定叢集。
跨帳戶設定
若要在您要收集指標的 Amazon EKS 叢集位於與 Amazon Managed Service for Prometheus 收集器不同的帳戶中時,在跨帳戶設定中建立抓取器,請使用下列程序。
例如,當您有兩個帳戶時,Amazon account_id_source
EKS 所在的第一個來源帳戶,以及 account_id_target
Amazon Managed Service for Prometheus 工作區所在的第二個目標帳戶。
在跨帳戶設定中建立抓取器
-
在來源帳戶中,建立角色
arn:aws:iam::
並新增下列信任政策。account_id
_source:role/Source{ "Effect": "Allow", "Principal": { "Service": [ "scraper.aps.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "scraper_ARN" }, "StringEquals": { "AWS:SourceAccount": "account_id" } } }
-
在來源 (Amazon EKS 叢集) 和目標 (Amazon Managed Service for Prometheus 工作區) 的每個組合上,您需要建立角色,
arn:aws:iam::
並新增具有 AmazonPrometheusRemoteWriteAccess 許可的下列信任政策。account_id
_target:role/Target{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id_source:role/Source" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "scraper_ARN" } } }
-
使用
--role-configuration
選項建立抓取器。aws amp create-scraper \ --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:
account-id
_source:cluster/xarw,subnetIds=[subnet-subnet-id
]}" \ --scrape-configuration configurationBlob=<base64-encoded-blob>
\ --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id
_target:workspace/ws-workspace-id
'}"\ --role-configuration '{"sourceRoleArn":"arn:aws:iam::account-id
_source:role/Source", "targetRoleArn":"arn:aws:iam::account-id
_target:role/Target"}' -
驗證抓取器建立。
aws amp list-scrapers { "scrapers": [ { "scraperId": "
scraper-id
", "arn": "arn:aws:aps:us-west-2:account_id
_source:scraper/scraper-id
", "roleArn": "arn:aws:iam::account_id
_source:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraperInternal_cc319052-41a3-4", "status": { "statusCode": "ACTIVE" }, "createdAt": "2024-10-29T16:37:58.789000+00:00", "lastModifiedAt": "2024-10-29T16:55:17.085000+00:00", "tags": {}, "source": { "eksConfiguration": { "clusterArn": "arn:aws:eks:us-west-2:account_id
_source:cluster/xarw", "securityGroupIds": [ "sg-security-group-id
", "sg-security-group-id
" ], "subnetIds": [ "subnet-subnet_id
" ] } }, "destination": { "ampConfiguration": { "workspaceArn": "arn:aws:aps:us-west-2:account_id
_target:workspace/ws-workspace-id
" } } } ] }
在 RoleConfiguration 和服務連結角色之間變更
當您想要切換回服務連結角色,而不是 RoleConfiguration
以寫入 Amazon Managed Service for Prometheus 工作區時,您必須更新 ,UpdateScraper
並在沒有 的抓取器所在的相同帳戶中提供工作區RoleConfiguration
。RoleConfiguration
會從抓取器中移除 ,並使用服務連結角色。
當您變更與抓取器相同帳戶中的工作區,並且想要繼續使用 時RoleConfiguration
,您必須再次RoleConfiguration
在 上提供 UpdateScraper
。
為使用客戶受管金鑰啟用的工作區建立抓取器
若要建立抓取器,以使用客戶受管金鑰將指標擷取到 Amazon Managed Service for Prometheus 工作區,請使用同時將來源和目標設定為相同帳戶--role-configuration
的 。
aws amp create-scraper \ --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:
account-id
:cluster/xarw,subnetIds=[subnet-subnet_id
]}" \ --scrape-configuration configurationBlob=<base64-encoded-blob>
\ --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id
:workspace/ws-workspace-id
'}"\ --role-configuration '{"sourceRoleArn":"arn:aws:iam::account_id
:role/Source", "targetRoleArn":"arn:aws:iam::account_id
:role/Target"}'
建立抓取器時的常見錯誤
以下是嘗試建立新的抓取器時最常見的問題。
-
所需的 AWS 資源不存在。指定的安全群組、子網路和 Amazon EKS 叢集必須存在。
-
IP 地址空間不足。您必須在每個傳入
CreateScraper
API 的子網路中至少有一個可用的 IP 地址。
設定 Amazon EKS 叢集
必須設定您的 Amazon EKS 叢集以讓湊集器存取指標。此組態有兩個選項:
-
使用 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 使用者指南》中的允許 IAM 角色或使用者存取 Amazon EKS 叢集上的 Kubernetes 物件。
您可以在建立叢集時或在建立叢集之後建立抓取器:
-
建立叢集時 – 當您透過 Amazon EKS 主控台建立 Amazon EKS 叢集時,您可以設定此存取權 (遵循指示來建立叢集中的抓取器),系統會自動建立存取項目政策,讓 Amazon Managed Service for Prometheus 能夠存取叢集指標。
-
建立叢集後新增 - 如果您的 Amazon EKS 叢集已存在,請將身分驗證模式設定為
API
或API_AND_CONFIG_MAP
,而您透過 Amazon Managed Service for Prometheus API 或 CLI 或透過 Amazon EKS 主控台建立的任何抓取器,將自動擁有為您建立的正確存取項目政策,抓取器將可存取您的叢集。
已建立存取項目政策
當您建立抓取器並讓 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", "apiGroups": [ "metrics.eks.amazonaws.com" ], "resources": [ "kcm/metrics", "ksh/metrics" ], "verbs": [ "get" ] }, { "effect": "allow", "nonResourceURLs": [ "/metrics" ], "verbs": [ "get" ] } ] }
手動設定 Amazon EKS 以進行抓取器存取
如果您偏好使用 aws-auth ConfigMap
來控制對 kubernetes 叢集的存取,您仍然可以讓 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 叢集以進行受管指標抓取
-
使用下列內文建立名為
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"] - apiGroups: ["metrics.eks.amazonaws.com"] resources: ["kcm/metrics", "ksh/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。最新版本為您提供最新的功能和功能,以及安全性更新。或者,使用自動提供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
作業下載一般用途組態檔案。
若要修改抓取器的組態,您可以使用 UpdateScraper
操作。如果您需要更新指標的來源 (例如,其他 Amazon EKS 叢集),您必須刪除抓取器,並使用新來源重新建立該抓取器。
支援的組態
如需有關抓取器組態格式的資訊,包括可能值的詳細明細,請參閱 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 組態檔。此範例包括對 kube API 伺服器指標的支援,以及 kube-controller-manager 和 kube-scheduler 指標的支援。如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的擷取 Prometheus 格式的控制平面原始指標。
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 # Scheduler metrics - job_name: 'ksh-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics scheme: https bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name action: keep regex: default;kubernetes;https # Controller Manager metrics - job_name: 'kcm-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics scheme: https bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name action: keep regex: default;kubernetes;https
以下是 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 工作區中看到您希望看到的指標,該如何進行疑難排解?
重要
確認已啟用 Amazon EKS 叢集的私有存取。如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的叢集私有端點。
up
指標是一個有助益的工具。針對 Amazon Managed Service for Prometheus 收集器探索的每個端點,皆會自動分配此指標。此指標有三種狀態,可協助您疑難排解收集器內所發生的事情。
-
up
不存在 - 若端點沒有up
指標,則這表示收集器找不到端點。如果您確定端點存在,收集器可能無法找到它有幾個原因。
-
您可能需要調整湊集組態。探索
relabel_config
可能需要調整。 -
role
用於探索的 可能有問題。 -
Amazon EKS 叢集使用的 Amazon VPC 可能尚未啟用 DNS,這會使收集器無法尋找端點。
-
-
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 workspace 必須位於相同 AWS 區域。
-
帳戶:您的 EKS 叢集、受管湊集器和 Amazon Managed Service for Prometheus 工作區都必須處於相同 AWS 帳戶。
-
收集器:各帳戶最多可以為每個區域提供 10 個 Amazon Managed Service for Prometheus 湊集器。
注意
您可以透過請求增加配額
來請求增加此限制。 -
指標回應:來自任何一個
/metrics
端點請求的回應主體不能超過 50 MB。 -
每個湊集器的端點:湊集器最多可以湊集 30,000
/metrics
個端點。 -
湊集間隔:湊集器組態無法指定少於 30 秒的湊集間隔。