

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

# 使用 AWS Distro for OpenTelemetry 做為收集器
<a name="AMP-ingest-with-adot"></a>

本節說明如何設定 AWS Distro for OpenTelemetry (ADOT) 收集器從 Prometheus 檢測的應用程式進行湊集，並將指標傳送至 Amazon Managed Service for Prometheus。如需有關 ADOT 匯集器的詳細資訊，請參閱 [AWS 適用於 OpenTelemetry 的 AWS Distro](https://aws.amazon.com/otel/)。

下列主題說明三種將 ADOT 設定為指標收集器的不同方式，取決於您的指標是來自 Amazon EKS、Amazon ECS 還是 Amazon EC2 執行個體。

**Topics**
+ [在 Amazon Elastic Kubernetes Service 叢集上使用 AWS Distro for OpenTelemetry 設定指標擷取](AMP-onboard-ingest-metrics-OpenTelemetry.md)
+ [使用 AWS Distro for Open Telemetry 從 Amazon ECS 設定指標擷取](AMP-onboard-ingest-metrics-OpenTelemetry-ECS.md)
+ [使用遠端寫入設定 Amazon EC2 執行個體擷取的指標](AMP-onboard-ingest-metrics-remote-write-EC2.md)

# 在 Amazon Elastic Kubernetes Service 叢集上使用 AWS Distro for OpenTelemetry 設定指標擷取
<a name="AMP-onboard-ingest-metrics-OpenTelemetry"></a>

您可以使用 AWS Distro for OpenTelemetry (ADOT) 收集器從 Prometheus 檢測應用程式抓取指標，並將指標傳送至 Amazon Managed Service for Prometheus。

**注意**  
如需 ADOT 收集器的詳細資訊，請參閱 [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel/)。  
如需 Prometheus 檢測應用程式的詳細資訊，請參閱 [什麼是與 Prometheus 相容的指標？](prom-compatible-metrics.md)。

使用 ADOT 收集 Prometheus 指標涉及三個 OpenTelemetry 元件：Prometheus 接收器、Prometheus 遠端寫入匯出程式和 SigV4 驗證延伸。

您可以使用現有的 Prometheus 組態，來組態 Prometheus 接收器來執行服務探索和指標抓取。Prometheus 接收器會以 Prometheus 展開格式抓取指標。您要抓取的任何應用程式或端點都應使用 Prometheus 用戶端程式庫進行組態。Prometheus 接收器在 Prometheus 說明文件中，支援[組態](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)中說明的全套 Prometheus 抓取和重新標籤組態。您可以將這些組態直接貼到您的 ADOT 收集器組態中。

Prometheus 遠端寫入匯出程式會使用 `remote_write` 端點將抓取的指標傳送至您的管理入口網站工作區。將使用 AWS SigV4 身分驗證延伸的安全身分驗證 AWS 通訊協定 Sigv4 簽署匯出資料的 HTTP 請求。如需詳細資訊，請參閱[簽章版本 4 簽署程序](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。

收集器會自動探索 Amazon EKS 上的 Prometheus 指標端點，並使用[<kubernetes\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config)中找到的組態。

 以下示範是在執行 Amazon Elastic Kubernetes Service 或自我管理 Kubernetes 的叢集上進行此組態的範例。若要執行這些步驟，您必須擁有 AWS 來自預設登入資料鏈中任何潛在選項的 AWS 登入資料。如需詳細資訊，請參閱[設定 AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html)。此示範使用範例應用程式，用於程序的整合測試。範例應用程式會在 `/metrics` 端點公開指標，例如 Prometheus 用戶端程式庫。

## 先決條件
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-pre"></a>

在開始下列擷取設定步驟之前，您必須為服務帳戶和信任政策設定 IAM 角色。

**設定服務帳戶和信任政策的 IAM 角色**

1. 遵循 [自 Amazon EKS 叢集設定指標擷取作業的服務角色](set-up-irsa.md#set-up-irsa-ingest) 中的步驟，為服務帳戶建立 IAM 角色。

   當 ADOT 收集器抓取並匯出指標時，將使用此角色。

1. 接下來，編輯信任政策。前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/home) 開啟 IAM 主控台。

1. 在左側導覽窗格中選擇**角色**，然後尋找您在步驟 1 中建立的 **amp-iamproxy-ingest-role**。

1. 選擇**信任關係**索引標籤，然後選擇**編輯信任關係**。

1. 在信任關係政策 JSON 中，取代 `aws-amp` 為 `adot-col`，然後選擇**更新信任原則**。結果信任政策應如下所示：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account",
             "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
           }
         }
       }
     ]
   }
   ```

------

1. 選擇**權限**索引標籤，並確定已將下列權限政策附加至該角色。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "aps:RemoteWrite",
                   "aps:GetSeries",
                   "aps:GetLabels",
                   "aps:GetMetricMetadata"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## 啟用 Prometheus 指標收集
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-steps"></a>

**注意**  
當您在 Amazon EKS 中建立命名空間時，依預設 `alertmanager` 會停用節點匯出程式。

**在 Amazon EKS 或 Kubernetes 叢集上啟用 Prometheus 集合**

1. 分隔並複製從 [aws-otel-community](https://github.com/aws-observability/aws-otel-community) 儲存庫中的樣本應用程式。

   然後，執行以下命令。

   ```
   cd ./sample-apps/prometheus-sample-app
   docker build . -t prometheus-sample-app:latest
   ```

1. 將此圖片推送到註冊表，例如 Amazon ECR 或 DockerHub。

1. 複製此 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
   ```

1. 輸入下列命令，確認已啟動範例應用程式。在命令的輸出中，您將在 `NAME` 欄中看到 `prometheus-sample-app`。

   ```
   kubectl get all -n aoc-prometheus-pipeline-demo
   ```

1. 啟動 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\$1write** 端點。查看工作區詳細資料時，請使用在 Amazon Managed Service for Prometheus 主控台中顯示的 **remote\$1write** 端點。

   您也需要在 Kubernetes 組態的服務帳戶區段`YOUR_ACCOUNT_ID`中將 變更為 AWS 您的帳戶 ID。

   在此範例中，ADOT 收集器組態使用註解 (`scrape=true`) 來判斷要抓取哪些目標端點。這可讓 ADOT 收集器區分範例應用程式端點與叢集中的 kube 系統端點。若您要抓取不同範例應用程式，則可以將其從重新標籤組態中移除。

1. 輸入下列命令以部署 ADOT 收集器。

   ```
   kubectl apply -f prometheus-daemonset.yaml
   ```

1. 輸入下列命令，確認已啟動 ADOT 收集器。在 `NAMESPACE` 欄中尋找 `adot-col`。

   ```
   kubectl get pods -n adot-col
   ```

1. 使用記錄匯出程式確認管線是否正常運作。我們的範例範本已與記錄匯出程式整合。輸入下列命令：

   ```
   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
   ```

1. 若要測試 Amazon Managed Service for Prometheus 是否收到指標，請使用 `awscurl`。此工具可讓您透過命令列使用 AWS Sigv4 身分驗證來傳送 HTTP 請求，因此您必須在本機設定 AWS 登入資料，並具有從 Amazon Managed Service for Prometheus 查詢的正確許可。如需安裝 的指示`awscurl`，請參閱 [awscurl](https://github.com/okigan/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
```

## 進階組態
<a name="AMP-otel-advanced"></a>

Prometheus 接收器在 Prometheus 說明文件中，支援[組態](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)中說明的全套 Prometheus 抓取和重新標籤組態。您可以將這些組態直接貼到您的 ADOT 收集器組態中。

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 組態，則必須將 `$` 個字元替換為 `$$` 以避免將值替換為環境變數。\$1 這對於 relabel\$1configurations 的替換值特別重要。例如，若您開始使用下列 relabel\$1configuration：

```
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 登入資料鏈的 AWS 登入資料，傳送由 AWS SigV4 簽署的 HTTPS 請求。如需詳細資訊，請參閱[設定 適用於 Go 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html)。您必須將服務指定為 `aps`。

無論部署方法為何，ADOT 收集器都必須能夠存取預設 AWS 登入資料鏈中列出的其中一個選項。Sigv4 身分驗證延伸取決於 適用於 Go 的 AWS SDK ，並使用它來擷取登入資料並進行身分驗證。您必須確保這些憑證有 Amazon Managed Service for Prometheus 的遠端寫入權限。

# 使用 AWS Distro for Open Telemetry 從 Amazon ECS 設定指標擷取
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS"></a>

本節說明如何從 Amazon Elastic Container Service (Amazon ECS) 收集指標，並使用 AWS Distro for Open Telemetry (ADOT) 將其擷取至 Amazon Managed Service for Prometheus。這同時說明如何在 Amazon Managed Grafana 中將指標視覺化。

## 先決條件
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-prereq"></a>

**重要**  
在開始之前，您必須在具有預設設定的 AWS Fargate 叢集上擁有 Amazon ECS 環境、Amazon Managed Service for Prometheus 工作區，以及 Amazon Managed Grafana 工作區。我們假設您熟悉容器工作負載、Amazon Managed Service for Prometheus，以及 Amazon Managed Grafana。

如需詳細資訊，請參閱下列連結：
+ 如需如何使用預設設定在 Fargate 叢集上建立 Amazon ECS 環境的詳細資訊，請參閱《*Amazon ECS 開發人員指南*》中的[建立叢集](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)。
+ 如需如何建立 Amazon Managed Service for Prometheus 的詳細資訊，請參閱《*Amazon Managed Service for Prometheus 使用者指南*》中的[建立工作區](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)。
+ 如需如何建立 Amazon Managed Grafana 工作區的詳細資訊，請參閱《*Amazon Managed Grafana 使用者指南*》中的[建立工作區](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-create-workspace.html)。

## 步驟 1：定義自訂 ADOT 收集器容器映像
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-create"></a>

使用下列組態檔作為範本，定義您自己的 ADOT 收集器容器映像檔。將 *my-remote-URL* 和 *my-region* 替換為您的 `endpoint` 和 `region` 值。將組態儲存在一個名為 *adot-config.yaml* 檔案中的組態。

**注意**  
此組態使用 `sigv4auth` 延伸來驗證 Amazon Managed Service for Prometheus 的呼叫。如需有關組態 `sigv4auth` 的詳細資訊，請參閱 GitHub 上的[驗證器 - Sigv4](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension)。

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 15s
        scrape_timeout: 10s
      scrape_configs:
      - job_name: "prometheus"
        static_configs:
        - targets: [ 0.0.0.0:9090 ]
  awsecscontainermetrics:
    collection_interval: 10s
processors:
  filter:
    metrics:
      include:
        match_type: strict
        metric_names:
          - ecs.task.memory.utilized
          - ecs.task.memory.reserved
          - ecs.task.cpu.utilized
          - ecs.task.cpu.reserved
          - ecs.task.network.rate.rx
          - ecs.task.network.rate.tx
          - ecs.task.storage.read_bytes
          - ecs.task.storage.write_bytes
exporters:
  prometheusremotewrite:
    endpoint: my-remote-URL
    auth:
      authenticator: sigv4auth
  logging:
    loglevel: info
extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679
  sigv4auth:
    region: my-region
    service: aps
service:
  extensions: [pprof, zpages, health_check, sigv4auth]
  pipelines:
    metrics:
      receivers: [prometheus]
      exporters: [logging, prometheusremotewrite]
    metrics/ecs:
      receivers: [awsecscontainermetrics]
      processors: [filter]
      exporters: [logging, prometheusremotewrite]
```

## 步驟 2：將您的 ADOT 收集器容器映像推送至 Amazon ECR 儲存庫
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-push"></a>

使用 Dockerfile 建立容器映像，然後將其推送至 Amazon Elastic Container Registry (ECR) 儲存庫。

1. 建立 Dockerfile 以複製和新增您的容器映像檔並將其新增至 OTEL Docker 映像檔中。

   ```
   FROM public.ecr.aws/aws-observability/aws-otel-collector:latest
   COPY adot-config.yaml /etc/ecs/otel-config.yaml
   CMD ["--config=/etc/ecs/otel-config.yaml"]
   ```

1. 建立 Amazon ECR 儲存庫。

   ```
   # create repo:
   COLLECTOR_REPOSITORY=$(aws ecr create-repository --repository aws-otel-collector \ 
                                  --query repository.repositoryUri --output text)
   ```

1. 建立容器映像。

   ```
   # build ADOT collector image:
   docker build -t $COLLECTOR_REPOSITORY:ecs .
   ```
**注意**  
這假設您正在執行容器的相同環境中建構容器。若否，您可能需要在建立映像時使用 `--platform` 參數。

1. 登入 Amazon ECR 儲存庫。將 *my-region* 替換為您的 `region` 值。

   ```
   # sign in to repo:
   aws ecr get-login-password --region my-region | \
           docker login --username AWS --password-stdin $COLLECTOR_REPOSITORY
   ```

1. 推送您的容器映像。

   ```
   # push ADOT collector image:
   docker push $COLLECTOR_REPOSITORY:ecs
   ```

## 步驟 3：建立 Amazon ECS 任務定義來抓取 Amazon Managed Service for Prometheus
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-task"></a>

建立 Amazon ECS 任務定義來抓取 Amazon Managed Service for Prometheus。您的工作定義應包含名為 `adot-collector` 的容器和名為 `prometheus` 的容器。`prometheus` 產生指標，和 `adot-collector` 抓取 `prometheus`。

**注意**  
Amazon Managed Service for Prometheus 以服務的形式執行，並從容器收集指標。在這種情況下，容器會以代理程式模式在本端執行 Prometheus，並將本端指標傳送至 Amazon Managed Service for Prometheus。

**範例：任務定義**

以下為任務定義外觀的範例。您可以使用此範例作為建立您任務定義的範本。將 `adot-collector` 的 `image` 值替換為儲存庫 URL 和映像標籤 (`$COLLECTOR_REPOSITORY:ecs`)。將 `adot-collector` 和 `prometheus` 的 `region` 個值替換為 `region` 個值。

```
{
  "family": "adot-prom",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "adot-collector",
      "image": "account_id.dkr.ecr.region.amazonaws.com/image-tag",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-adot-collector",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    },
    {
      "name": "prometheus",
      "image": "prom/prometheus:main",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-prom",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "1024"
}
```

## 步驟 4：授予您的任務存取 Amazon Managed Service for Prometheus 的許可
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-attach"></a>

若要將抓取指標傳送至 Amazon Managed Service for Prometheus，您的 Amazon ECS 任務必須具有正確的許可，才能為您呼叫 AWS API 操作。您必須為任務建立 IAM 角色，並將 `AmazonPrometheusRemoteWriteAccess` 政策附加至 IAM 角色。如需有關建立此角色並附加政策的詳細資訊，請參閱[為任務建立 IAM 角色和政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

在您將 `AmazonPrometheusRemoteWriteAccess` 附加至 IAM 角色並將該角色用於您的任務之後，Amazon ECS 可以將您抓取的指標傳送到 Amazon Managed Service for Prometheus。

## 步驟 5：在 Amazon Managed Grafana 中視覺化您的指標
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-vis"></a>

**重要**  
在開始之前，您必須在 Amazon ECS 任務定義中執行 Fargate 任務。否則，Amazon Managed Service for Prometheus 將無法使用您的指標。

1. 在 Amazon Managed Grafana 工作區的導覽窗格中，選擇 AWS 圖示下的**資料來源**。

1. 在**資料來源**索引標籤上，針對**服務**選取 **Amazon Managed Service for Prometheus**，然後選擇您的**預設區域**。

1. 選擇 **[新增資料來源]**。

1. 使用 `ecs` 和 `prometheus` 個前綴查詢和檢視您的指標。

# 使用遠端寫入設定 Amazon EC2 執行個體擷取的指標
<a name="AMP-onboard-ingest-metrics-remote-write-EC2"></a>

本節說明如何在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體中使用遠端寫入執行 Prometheus 伺服器。這會說明如何從使用 Go 編寫的示範應用程式收集指標，並將其傳送到 Amazon Managed Service for Prometheus 工作區。

## 先決條件
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-prereq"></a>

**重要**  
在開始前，您必須安裝 Prometheus v2.26 或更高版本。我們假設您熟悉 Prometheus、Amazon EC2 和 Amazon Managed Service for Prometheus。有關如何安裝 Prometheus 的訊息，請參閱 Prometheus 網站上的[入門](https://prometheus.io/docs/prometheus/latest/getting_started/)。

如果您不熟悉 Amazon EC2 或 Amazon Managed Service for Prometheus，建議您先從閱讀以下各節開始：
+ [Amazon Elastic Compute Cloud 是什麼？](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)
+ [Amazon Managed Service for Prometheus 是什麼？](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html)

## 建立 Amazon EC2 的 IAM 角色
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-IAM"></a>

若要串流指標，您必須先使用 AWS 受管政策 **AmazonPrometheusRemoteWriteAccess** 建立 IAM 角色。然後，您可以啟動具有角色的執行個體，並將指標串流到 Amazon Managed Service for Prometheus 工作區。

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

1. 從導覽窗格，選擇 **Roles (角色)**，然後選擇 **Create role (建立角色)**。

1. 對於信任的實體類型，選擇 **AWS service** (AWS 服務)。針對使用案例，選擇 **EC2**。選擇**下一步：許可**。

1. 在搜尋列中，輸入 **Amazon PrometheusRemoteWriteAccess**。針對**政策名稱**，選取 **AmazonPrometheusRemoteWriteAccess** 然後選擇 **附加政策**。選擇 **Next: Add Tags (下一步：新增標籤)**。

1. (選用) 為您的 IAM 角色建立 IAM 標籤。選擇 **[下一步：檢閱]**。

1. 輸入您的角色名稱。選擇**建立政策**。

## 啟動 Amazon EC2 執行個體
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-instance"></a>

若要啟動 Amazon EC2 執行個體，請遵循《*適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南*》中[啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#launch-instance-with-role)的指示。

## 執行示範應用程式
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-demo"></a>

建立 IAM 角色並使用 角色啟動 EC2 執行個體後，您可以執行示範應用程式來查看它是否有效。

**執行示範應用程式和測試指標**

1. 使用下列範本建立名為 `main.go` 的 Go 檔案。

   ```
   package main
   
   import (
       "github.com/prometheus/client_golang/prometheus/promhttp"
       "net/http"
   )
   
   func main() {
       http.Handle("/metrics", promhttp.Handler())
   
       http.ListenAndServe(":8000", nil)
   }
   ```

1. 執行以下命令以安裝正確相依項目。

   ```
   sudo yum update -y
   sudo yum install -y golang
   go get github.com/prometheus/client_golang/prometheus/promhttp
   ```

1. 執行示範應用程式。

   ```
   go run main.go
   ```

   展示應用程式應該在連接埠 8000 上運行，並顯示所有暴露的 Prometheus 指標。以下是這些指標的範例。

   ```
   curl -s http://localhost:8000/metrics 
   ...
   process_max_fds 4096# HELP process_open_fds Number of open file descriptors.# TYPE process_open_fds gauge
   process_open_fds 10# HELP process_resident_memory_bytes Resident memory size in bytes.# TYPE process_resident_memory_bytes gauge
   process_resident_memory_bytes 1.0657792e+07# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.# TYPE process_start_time_seconds gauge
   process_start_time_seconds 1.61131955899e+09# HELP process_virtual_memory_bytes Virtual memory size in bytes.# TYPE process_virtual_memory_bytes gauge
   process_virtual_memory_bytes 7.77281536e+08# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.# TYPE process_virtual_memory_max_bytes gauge
   process_virtual_memory_max_bytes -1# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.# TYPE promhttp_metric_handler_requests_in_flight gauge
   promhttp_metric_handler_requests_in_flight 1# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.# TYPE promhttp_metric_handler_requests_total counter
   promhttp_metric_handler_requests_total{code="200"} 1
   promhttp_metric_handler_requests_total{code="500"} 0
   promhttp_metric_handler_requests_total{code="503"} 0
   ```

## 建立 Amazon Managed Service for Prometheus 工作區
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-workspace"></a>

若要建立 Amazon Managed Service for Prometheus 工作區，請按照[建立工作區](AMP-create-workspace.md)中的指示操作。

## 執行 Prometheus 伺服器
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-server"></a>

1. 使用下列範例 YAML 檔案作為範本，以建立名為 `prometheus.yaml` 的新檔案。針對 `url`，將 *my-region* 值替換您的地區值，以及將 *my-workspace-id* 替換為針對您產生 Amazon Managed Service for Prometheus 的工作區 ID。針對 `region`，將 *my-region* 替換為您的地區值。

   **範例：YAML 檔案**

   ```
   global:
     scrape_interval: 15s
     external_labels:
       monitor: 'prometheus'
   
   scrape_configs:
     - job_name: 'prometheus'
       static_configs:
         - targets: ['localhost:8000']
   
   remote_write:
     -
       url: https://aps-workspaces.my-region.amazonaws.com/workspaces/my-workspace-id/api/v1/remote_write
       queue_config:
           max_samples_per_send: 1000
           max_shards: 200
           capacity: 2500
       sigv4:
            region: my-region
   ```

1. 執行 Prometheus 伺服器，將示範應用程式的指標傳送至您的 Amazon Managed Service for Prometheus 工作區。

   ```
   prometheus --config.file=prometheus.yaml
   ```

Prometheus 伺服器現在應該會將示範應用程式的指標傳送到您的 Amazon Managed Service for Prometheus 工作區。