OpenTelemetry Collector - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

OpenTelemetry Collector

OpenTelemetry Collector 是開放原始碼、與廠商無關的代理程式,可接收、處理和匯出遙測資料。它充當應用程式與 Amazon CloudWatch 之間的中央管道,從多個來源收集指標、日誌和追蹤,並使用 OpenTelemetry Protocol (OTLP) 將其傳送至 CloudWatch。

將 OpenTelemetry Collector 與 CloudWatch 搭配使用可提供下列優點:

  • 透過單一代理程式從多個應用程式和主機收集遙測,減少與 CloudWatch 的連線數量。

  • 在傳送至 CloudWatch 之前處理和篩選遙測,包括新增或移除屬性、批次處理資料和取樣追蹤。

  • 在跨 AWS、內部部署和其他雲端環境中使用相同的收集器組態,無論應用程式在何處執行,都能提供一致的遙測管道。

  • 使用可在 CloudWatch Query Studio 中使用 Prometheus 查詢語言 (PromQL) 查詢的豐富標籤,將指標傳送至 CloudWatch。

支援的接收者

OpenTelemetry Collector 支援各種接收器來擷取遙測資料。您可以使用 OpenTelemetry 接收器,例如使用 OpenTelemetry SDKs 檢測的應用程式的 OTLP 接收器,或 Prometheus 接收器從現有的 Prometheus 匯出程式中抓取指標。與 CloudWatch 搭配使用的常見 Prometheus 接收器包括:

  • Prometheus 接收器,用於抓取任何與 Prometheus 相容的端點

  • 主機指標接收者,用於從主機收集系統層級指標

  • Kubernetes 叢集接收器,用於從 Kubernetes API 伺服器收集叢集層級指標

您可以在單一收集器中設定多個接收者,讓您同時收集 OpenTelemetry 和 Prometheus 指標,並透過相同的管道將其傳送至 CloudWatch。如需可用接收器的完整清單,請參閱 OpenTelemetry Collector 儲存庫

開始使用

先決條件 – 如果使用 OTLP 端點進行追蹤,請確定交易搜尋已啟用。

步驟:

  1. 下載最新版本的 OpenTelemetry Collector 分佈。如需詳細資訊,請參閱 OpenTelemetry Collector 版本

  2. 在主機上安裝 OpenTelemetry Collector。收集器會在任何作業系統和平台上執行。如需詳細資訊,請參閱安裝 Collector

  3. 在 Amazon EC2 或內部部署主機上設定 AWS 登入資料。收集器會在傳送遙測資料時,使用這些登入資料向 CloudWatch 進行身分驗證。如需詳細資訊,請參閱下文。

    Setup IAM permissions for Amazon EC2
    請依循下列程序,將 CloudWatchAgentServerPolicy IAM 政策附加至 Amazon EC2 執行個體的 IAM 角色。
    1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

    2. 選擇角色,然後尋找並選取 Amazon EC2 執行個體使用的角色。

    3. 許可索引標籤中,依序選擇新增許可連結政策

    4. 透過搜尋方塊搜尋 CloudWatchAgentServerPolicy 政策。

    5. 選取 CloudWatchAgentServerPolicy 政策,然後選擇新增許可

    Setup IAM permissions for on-premise hosts
    可以建立 IAM 使用者,用來提供許可給內部部署主機。
    1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

    2. 選擇使用者建立使用者

    3. 使用者詳細資訊下的使用者名稱中,輸入新 IAM 使用者的名稱。這是 的登入名稱 AWS ,將用於驗證您的主機。

    4. 選擇下一步

    5. 設定許可頁面,為許可選項選取直接連結政策

    6. 許可政策清單中,選取要新增至使用者的 CloudWatchAgentServerPolicy 政策。

    7. 選擇下一步

    8. 檢閱和建立頁面上,確定您對使用者名稱感到滿意,並且 CloudWatchAgentServerPolicy 政策位於許可摘要中。

    9. 選擇 Create user (建立使用者)。

    10. 建立和擷取您的 AWS 存取金鑰和私密金鑰 – 在 IAM 主控台的導覽窗格中,選擇使用者,然後選取您在上一個步驟中建立的使用者名稱。

    11. 在使用者頁面上,選擇安全憑證索引標籤。

    12. 存取金鑰區段中,選擇建立存取金鑰

    13. 針對建立存取金鑰步驟 1,請選擇命令列界面 (CLI)

    14. 建立存取金鑰步驟 2 中,輸入選用標籤,然後選擇下一步

    15. 建立存取金鑰步驟 3 中,選取下載 .csv 檔案,以儲存包含 IAM 使用者存取金鑰和私密存取金鑰的 .csv 檔案。您需要這些資訊才能進行後續步驟。

    16. 選擇完成

    17. 輸入下列命令,在現場部署主機中設定您的 AWS 登入資料。將 ACCESS_KEY_IDSECRET_ACCESS_ID 替換為您在上一個步驟中下載的 .csv 檔案中新產生的存取金鑰和私密存取金鑰。

      $ aws configure AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
  4. 為您的 Amazon EKS 或 Kubernetes 叢集設定 AWS 登入資料。開始使用 Amazon EKS 的最簡單方法是使用 EKS OTel Container Insights 附加元件。如果您偏好直接使用 OpenTelemetry Collector,請依照下列程序設定 Amazon EKS 或 Kubernetes 叢集的 AWS 登入資料,將遙測傳送至 CloudWatch。

    Setup IAM permissions for Amazon EKS
    1. 使用下列命令為您的叢集建立 IAM OIDC 身分提供者。

      eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} --region ${REGION} --approve
    2. 透過下列命令,將 IAM 角色指派給 OTel Collector 的 Kubernetes 服務帳戶。

      eksctl create iamserviceaccount \ --name ${COLLECTOR_SERVICE_ACCOUNT}\ --namespace ${NAMESPACE} \ --cluster ${CLUSTER_NAME} \ --region ${REGION} \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --approve \ --override-existing-serviceaccounts
    Setup IAM permissions for Kubernetes
    1. 輸入下列命令,在現場部署主機中設定您的 AWS 登入資料。將 ACCESS_KEY_IDSECRET_ACCESS_ID 替換為您在上一個步驟中下載的 .csv 檔案中新產生的存取金鑰和私密存取金鑰。依預設,憑證檔案儲存在 /home/user/.aws/credentials 下。

      aws configure AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
    2. 編輯 OpenTelemetry Collector 資源,使用如下命令新增新建立的 AWS 憑證機密:kubectl edit OpenTelemetryCollector otel_collector

    3. 使用檔案編輯器,將下列組態新增至部署頂端,將 AWS 登入資料新增至 OpenTelemetryCollector 容器。將路徑 /home/user/.aws/credentials 取代為本機 AWS 登入資料檔案的位置。

      spec: volumeMounts: - mountPath: /rootfs volumeMounts: - name: aws-credentials mountPath: /root/.aws readOnly: true volumes: - hostPath: path: /home/user/.aws/credentials name: aws-credentials
  5. 在收集器組態中設定 OTLP 匯出工具,將遙測傳送至 CloudWatch 端點。請參閱下列範例。

收集器組態範例

複製並貼上以下內容,以設定收集器,將日誌和追蹤傳送至 OTLP 端點。

receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: otlphttp/logs: compression: gzip logs_endpoint: logs_otlp_endpoint headers: x-aws-log-group: ency_log_group x-aws-log-stream: default auth: authenticator: sigv4auth/logs otlphttp/traces: compression: gzip traces_endpoint: traces_otlp_endpoint auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "region" service: "logs" sigv4auth/traces: region: "region" service: "xray" service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: logs: receivers: [otlp] exporters: [otlphttp/logs] traces: receivers: [otlp] exporters: [otlphttp/traces]

以下為使用 sigv4 將日誌和追蹤傳送至 us-east-1 的範例。

receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: otlphttp/logs: compression: gzip logs_endpoint: https://logs.us-east-1.amazonaws.com/v1/logs headers: x-aws-log-group: MyApplicationLogs x-aws-log-stream: default auth: authenticator: sigv4auth/logs otlphttp/traces: compression: gzip traces_endpoint: https://xray.us-east-1.amazonaws.com/v1/traces auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "us-east-1" service: "logs" sigv4auth/traces: region: "us-east-1" service: "xray" service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: logs: receivers: [otlp] exporters: [otlphttp/logs] traces: receivers: [otlp] exporters: [otlphttp/traces]
注意

將 OpenTelemetry SDK 設定為 always_on 取樣組態,以可靠記錄 100% 的範圍,並透過 CloudWatch Application Signals 全面了解關鍵應用程式的運作狀況。如需詳細資訊,請參閱 OpenTelemetry Java SDK 取樣器組態範例。如需使用 X-Ray OTLP 端點設定 OpenTelemetry Collector 的範例,請參閱 Application Signals 示範儲存庫。

複製並貼上以下內容,以設定收集器將指標傳送至 OTLP 端點。

receivers: otlp: protocols: http: endpoint: "0.0.0.0:4318" processors: batch: send_batch_size: 200 timeout: 10s exporters: otlphttp: tls: insecure: false endpoint: metrics_otlp_endpoint auth: authenticator: sigv4auth extensions: sigv4auth: service: "monitoring" region: "region" service: extensions: [sigv4auth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]

以下是使用 sigv4 將指標傳送至 us-east-1 的範例。

receivers: otlp: protocols: http: endpoint: "0.0.0.0:4318" processors: batch: send_batch_size: 200 timeout: 10s exporters: otlphttp: tls: insecure: false endpoint: "https://monitoring.us-east-1.amazonaws.com/v1/metrics:443" auth: authenticator: sigv4auth extensions: sigv4auth: service: "monitoring" region: "us-east-1" service: extensions: [sigv4auth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]