View a markdown version of this page

OpenTelemetry 收集器 - Amazon CloudWatch

OpenTelemetry 收集器

OpenTelemetry Collector 是一个与供应商无关的开源代理,可接收、处理和导出遥测数据。该代理充当应用程序与 Amazon CloudWatch 之间的中心管道,从多个来源收集指标、日志和跟踪数据,然后使用 OpenTelemetry Protocol(OTLP)将其发送到 CloudWatch。

将 OpenTelemetry Collector 与 CloudWatch 搭配使用具有以下优势:

  • 通过单个代理从多个应用程序和主机收集遥测数据,从而减少与 CloudWatch 的连接数量。

  • 在将遥测数据发送到 CloudWatch 之前,对数据进行处理和筛选,包括添加或删除属性、批处理数据和采样跟踪数据。

  • 在 AWS、本地和其他云环境中使用相同的收集器配置,无论应用程序在哪里运行,都能提供一致的遥测管道。

  • 将带有丰富标签的指标发送到 CloudWatch,且可在 CloudWatch Query Studio 中使用 Prometheus 查询语言(PromQL)查询这些标签。

支持的接收器

OpenTelemetry Collector 支持各种用于摄取遥测数据的接收器。可以使用 OpenTelemetry 接收器,例如将 OTLP 接收器用于使用 OpenTelemetry SDK 埋点的应用程序,或者使用 Prometheus 接收器从现有 Prometheus 导出器中抓取指标。与 CloudWatch 一起使用的常见 Prometheus 接收器包括:

  • Prometheus 接收器,用于抓取任何兼容 Prometheus 的端点

  • 主机指标接收器,用于从主机收集系统级指标

  • Kubernetes 集群接收器,用于从 Kubernetes API 服务器收集集群级别的指标

您可以在单个收集器中配置多个接收器,从而收集 OpenTelemetry 和 Prometheus 指标,并通过同一个管道将它们发送到 CloudWatch。有关可用接收器的完整列表,请参阅 OpenTelemetry Collector 存储库

开始使用

先决条件:如果使用 OTLP 端点进行跟踪,请确保启用事务搜索功能。

步骤:

  1. 下载最新版本的 OpenTelemetry Collector 发行版。有关更多信息,请参阅 OpenTelemetry Collector 版本

  2. 在主机上安装 OpenTelemetry Collector。该收集器可在任何操作系统和平台上运行。有关更多信息,请参阅 Install the 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. 选择创建用户

    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. 使用以下命令为 OTel Collector 的 Kubernetes 服务账户分配 IAM 角色。

      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 资源以添加新创建的 Amazon 凭证密钥: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 的示例,请参阅应用程序信号演示存储库。

复制并粘贴以下内容,将您的收集器配置为向 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]