本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS 發行版在 Amazon Elastic Kubernetes Service 叢集 OpenTelemetry 上設定指標擷取
您可以使用「轉換器 AWS 」 OpenTelemetry (ADOT) 收集器從 Prometheus 儀表的應用程式中抓取指標,然後將指標傳送至適用於 Prometheus 的 Amazon 受管服務。
注意
有關 ADOT 收集器的更多信息,請參閱 AWS . OpenTelemetry
如需有關 Prometheus 儀器應用程式的更多資訊,請參閱。什麼是與 Prometheus 相容的指標?
使用 ADOT 收集 Prometheus 指標涉及三個 OpenTelemetry 元件:Prometheus 接收器、Prometheus 遠端寫入匯出程式和 Sigv4 驗證延伸模組。
您可以使用現有的 Prometheus 組態,來組態 Prometheus 接收器來執行服務探索和指標抓取。Prometheus 接收器會以 Prometheus 展開格式抓取指標。您要抓取的任何應用程式或端點都應使用 Prometheus 用戶端程式庫進行組態。Prometheus 接收器在 Prometheus 說明文件中,支援組態
Prometheus 遠端寫入匯出程式會使用 remote_write
端點將抓取的指標傳送至您的管理入口網站工作區。匯出資料的 HTTP 要求將使用 AWS Sigv4 (用於安全驗證的 AWS 通訊協定) 與 Sigv4 驗證延伸模組簽署。如需詳細資訊,請參閱簽章版本 4 簽署程序。
收集器會自動探索 Amazon EKS 上的 Prometheus 指標端點,並使用<kubernetes_sd_config>
以下示範是在執行 Amazon Elastic Kubernetes Service 或自我管理 Kubernetes 的叢集上進行此組態的範例。若要執行這些步驟,您必須擁有預設認 AWS
證鏈結中任何可能選項的認 AWS 證。如需詳細資訊,請參閱 < 設定 AWS SDK for Go >。此示範使用範例應用程式,用於程序的整合測試。範例應用程式會在 /metrics
端點公開指標,例如 Prometheus 用戶端程式庫。
必要條件
在開始下列擷取設定步驟之前,您必須為服務帳戶和信任政策設定 IAM 角色。
設定服務帳戶和信任政策的 IAM 角色
-
遵循 自 Amazon EKS 叢集設定指標擷取作業的服務角色 中的步驟,為服務帳戶建立 IAM 角色。
當 ADOT 收集器抓取並匯出指標時,將使用此角色。
-
接下來,編輯信任政策。前往 https://console.aws.amazon.com/iam/
開啟 IAM 主控台。 -
在左側導覽窗格中,選擇 [角色],然後尋找您amp-iamproxy-ingest-role在步驟 1 中建立的角色。
-
選擇信任關係索引標籤,然後選擇編輯信任關係。
-
在信任關係政策 JSON 中,取代
aws-amp
為adot-col
,然後選擇更新信任原則。結果信任政策應如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::
account-id
:oidc-provider
/oidc.eks.region
.amazonaws.com/id/openid
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region
.amazonaws.com/id/openid:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account" } } } ] } -
選擇權限索引標籤,並確定已將下列權限政策附加至該角色。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:RemoteWrite", "aps:GetSeries", "aps:GetLabels", "aps:GetMetricMetadata" ], "Resource": "*" } ] }
啟用 Prometheus 指標收集
注意
當您在 Amazon EKS 中建立命名空間時,依預設 alertmanager
會停用節點匯出程式。
在 Amazon EKS 或 Kubernetes 叢集上啟用 Prometheus 集合
-
從存儲庫中分叉並克隆示例應用程序,位於 aws-otel-community
. 然後,執行以下命令。
cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
-
將此映像推送到註冊表,例如 Amazon ECR 或 DockerHub.
-
複製此 Kubernetes 組態並套用,在叢集中部署範例應用程式。通過在
prometheus-sample-app.yaml
檔案中替換{{PUBLIC_SAMPLE_APP_IMAGE}}
將圖像變更為剛才推送的圖像。curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml kubectl apply -f prometheus-sample-app.yaml
-
輸入下列命令,確認已啟動範例應用程式。在命令的輸出中,您將在
NAME
欄中看到prometheus-sample-app
。kubectl get all -n aoc-prometheus-pipeline-demo
-
啟動 ADOT 收集器的預設執行個體。若要執行此作業,請先輸入下列命令來拉取 ADOT 收集器的 Kubernetes 組態。
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml
然後編輯範本檔案,將您
YOUR_ENDPOINT
的 Amazon Managed Service for Prometheus 工作區以及您YOUR_REGION
的區域替換 remote_write 端點。查看工作區詳細資料時,請使用在 Amazon Managed Service for Prometheus 主控台中顯示的 remote_write 端點。您也必須將 Kubernetes 設定的服務帳戶區段變更
YOUR_ACCOUNT_ID
為您 AWS 的帳戶 ID。在此範例中,ADOT 收集器組態使用註解 (
scrape=true
) 來判斷要抓取哪些目標端點。這可讓 ADOT 收集器區分範例應用程式端點與叢集中的 kube 系統端點。若您要抓取不同範例應用程式,則可以將其從重新標籤組態中移除。 -
輸入下列命令以部署 ADOT 收集器。
kubectl apply -f prometheus-daemonset.yaml
-
輸入下列命令,確認已啟動 ADOT 收集器。在
NAMESPACE
欄中尋找adot-col
。kubectl get pods -n adot-col
-
使用記錄匯出程式確認管線是否正常運作。我們的範例範本已與記錄匯出程式整合。輸入下列命令:
kubectl get pods -A kubectl logs -n adot-col
name_of_your_adot_collector_pod
範例應用程式中的某些抓取指標將依照以下範例所示:
Resource labels: -> service.name: STRING(kubernetes-service-endpoints) -> host.name: STRING(192.168.16.238) -> port: STRING(8080) -> scheme: STRING(http) InstrumentationLibraryMetrics #0 Metric #0 Descriptor: -> Name: test_gauge0 -> Description: This is my gauge -> Unit: -> DataType: DoubleGauge DoubleDataPoints #0 StartTime: 0 Timestamp: 1606511460471000000 Value: 0.000000
-
若要測試 Amazon Managed Service for Prometheus 是否收到指標,請使用
awscurl
。此工具可讓您使用 AWS Sigv4 身份驗證透過命令列傳送 HTTP 請求,因此您必須在本機設定具有正確許可的 AWS 登入資料,才能從 Prometheus 的 Amazon 受管服務進行查詢。如需有關安裝awscurl
的指示,請參閱 awscurl。在下列命令中,將
AMP_REGION
和AMP_ENDPOINT
替換為 Amazon Managed Service for Prometheus 工作區的資訊。awscurl --service="aps" --region="
AMP_REGION
" "https://AMP_ENDPOINT
/api/v1/query?query=adot_test_gauge0" {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}如果您收到指標作為回應,則表示管道設定已成功,且指標已成功從範例應用程式傳播到 Amazon Managed Service for Prometheus。
清除
若要清理此示範,請輸入下列命令。
kubectl delete namespace aoc-prometheus-pipeline-demo kubectl delete namespace adot-col
進階組態
Prometheus 接收器在 Prometheus 說明文件中,支援組態
Prometheus 接收器的組態包括您的服務探索、抓取組態和重新標籤組態。接收器組態如下所示。
receivers: prometheus: config: [
[Your Prometheus configuration]
]
以下是範例組態。
receivers: prometheus: config: global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: kubernetes-service-endpoints sample_limit: 10000 kubernetes_sd_configs: - role: endpoints tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
如果您有現有的 Prometheus 組態,則必須將 $
個字元替換為 $$
以避免將值替換為環境變數。* 這對於 relabel_configurations 的替換值特別重要。例如,若您開始使用下列 relabel_configuration:
relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: ${1}://${2}${3} target_label: __param_target
它將成為以下幾點:
relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: $${1}://${2}${3} target_label: __param_target
Prometheus 遠端寫入匯出程式和 Sigv4 身分驗證延伸
Prometheus 遠端寫入匯出程式和 Sigv4 身分驗證延伸的設定較 Prometheus 接收器容易。在此管道階段已擷取指標,我們已準備好將這些資料匯出到 Amazon Managed Service for Prometheus。下列範例顯示成功組態與 Amazon Managed Service for Prometheus 通訊的最低需求。
extensions: sigv4auth: service: "aps" region: "user-region" exporters: prometheusremotewrite: endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write" auth: authenticator: "sigv4auth"
此設定會傳送由 AWS Sigv4 使用預設認證鏈結中的認 AWS AWS 證簽署的 HTTPS 要求。如需詳細資訊,請參閱設定 AWS SDK for Go。您必須將服務指定為 aps
。
無論採用何種部署方法,ADOT 收集器都必須能夠存取預設認 AWS 證鏈結中列出的其中一個選項。Sigv4 驗證延伸模組取決於 AWS SDK for Go 並使用它來擷取認證和驗證。您必須確保這些憑證有 Amazon Managed Service for Prometheus 的遠端寫入權限。