

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

# OpenTelemetry Collector
<a name="CloudWatch-OTLPSimplesetup"></a>

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

將 OpenTelemetry Collector 與 CloudWatch 搭配使用可提供下列優點：
+ 透過單一代理程式從多個應用程式和主機收集遙測，減少與 CloudWatch 的連線數量。
+ 在傳送至 CloudWatch 之前處理和篩選遙測，包括新增或移除屬性、批次處理資料和取樣追蹤。
+ 在跨 AWS、內部部署和其他雲端環境中使用相同的收集器組態，無論應用程式在何處執行，都能提供一致的遙測管道。
+ 使用可在 CloudWatch Query Studio 中使用 Prometheus 查詢語言 (PromQL) 查詢的豐富標籤，將指標傳送至 CloudWatch。

## 支援的接收者
<a name="CloudWatch-OTLPSupportedReceivers"></a>

OpenTelemetry Collector 支援各種接收器來擷取遙測資料。您可以使用 OpenTelemetry 接收器，例如使用 OpenTelemetry SDKs 檢測的應用程式的 OTLP 接收器，或 Prometheus 接收器從現有的 Prometheus 匯出程式中抓取指標。與 CloudWatch 搭配使用的常見 Prometheus 接收器包括：
+ Prometheus 接收器，用於抓取任何與 Prometheus 相容的端點
+ 主機指標接收者，用於從主機收集系統層級指標
+ Kubernetes 叢集接收器，用於從 Kubernetes API 伺服器收集叢集層級指標

您可以在單一收集器中設定多個接收者，讓您同時收集 OpenTelemetry 和 Prometheus 指標，並透過相同的管道將其傳送至 CloudWatch。如需可用接收器的完整清單，請參閱 OpenTelemetry Collector [儲存庫](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver)。

## 開始使用
<a name="CloudWatch-OTLPSimplesetupGettingStarted"></a>

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

步驟：

1. 下載最新版本的 OpenTelemetry Collector 分佈。如需詳細資訊，請參閱 OpenTelemetry Collector [版本](https://github.com/open-telemetry/opentelemetry-collector-releases/releases)。

1. 在主機上安裝 OpenTelemetry Collector。收集器會在任何作業系統和平台上執行。如需詳細資訊，請參閱[安裝 Collector](https://opentelemetry.io/docs/collector/installation/)。

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

------
#### [ Setup IAM permissions for Amazon EC2 ]

**請依循下列程序，將 `CloudWatchAgentServerPolicy` IAM 政策附加至 Amazon EC2 執行個體的 IAM 角色。**

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

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

   1. 在**許可**索引標籤中，依序選擇**新增許可**、**連結政策**。

   1. 透過搜尋方塊搜尋 `CloudWatchAgentServerPolicy` 政策。

   1. 選取 **CloudWatchAgentServerPolicy** 政策，然後選擇**新增許可**。

------
#### [ Setup IAM permissions for on-premise hosts ]

**可以建立 IAM 使用者，用來提供許可給內部部署主機。**

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

   1. 選擇**使用者**、**建立使用者**。

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

   1. 選擇**下一步**。

   1. 在**設定許可**頁面，為**許可選項**選取**直接連結政策**。

   1. 在**許可政策**清單中，選取要新增至使用者的 **CloudWatchAgentServerPolicy** 政策。

   1. 選擇**下一步**。

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

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

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

   1. 在使用者頁面上，選擇**安全憑證**索引標籤。

   1. 在**存取金鑰**區段中，選擇**建立存取金鑰**。

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

   1. 在**建立存取金鑰步驟 2** 中，輸入選用標籤，然後選擇**下一步**。

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

   1. 選擇**完成**。

   1. 輸入下列命令，在現場部署主機中設定您的 AWS 登入資料。將 *ACCESS\$1KEY\$1ID* 和 *SECRET\$1ACCESS\$1ID* 替換為您在上一個步驟中下載的 .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
      ```

------

1. 為您的 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
      ```

   1. 透過下列命令，將 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\$1KEY\$1ID* 和 *SECRET\$1ACCESS\$1ID* 替換為您在上一個步驟中下載的 .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
      ```

   1. 編輯 OpenTelemetry Collector 資源，使用如下命令新增新建立的 AWS 憑證機密：`kubectl edit OpenTelemetryCollector otel_collector`

   1. 使用檔案編輯器，將下列組態新增至部署頂端，將 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
      ```

------

1. 在收集器組態中設定 OTLP 匯出工具，將遙測傳送至 CloudWatch 端點。請參閱下列範例。

## 收集器組態範例
<a name="CloudWatch-OTLPSimplesetupConfigureCollector"></a>

複製並貼上以下內容，以設定收集器，將日誌和追蹤傳送至 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\$1on* 取樣組態，以可靠記錄 100% 的範圍，並透過 CloudWatch Application Signals 全面了解關鍵應用程式的運作狀況。如需詳細資訊，請參閱 [OpenTelemetry Java SDK 取樣器組態](https://opentelemetry.io/docs/languages/java/sdk/#sampler)範例。如需使用 X-Ray OTLP 端點設定 OpenTelemetry Collector 的範例，請參閱 [Application Signals 示範](https://github.com/aws-observability/application-signals-demo/blob/main/scripts/opentelemetry/otel_simple_setup/opentelemetry.yaml)儲存庫。

複製並貼上以下內容，以設定收集器將指標傳送至 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]
```