

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

# 使用 Prometheus 執行個體作為收集器
<a name="AMP-ingest-with-prometheus"></a>

您可以使用在*代理*程式模式 （稱為 Prometheus *代理程式） 中執行的 Prometheus* 執行個體來抓取指標，並將其傳送至您的 Amazon Managed Service for Prometheus 工作區。

下列主題說明如何針對在代理程式模式下執行的 Prometheus 執行個體，設定作為指標的收集器的不同方法。

**警告**  
當您建立 Prometheus 代理程式時，您必須負責其組態和維護。[啟用安全功能](https://prometheus.io/docs/prometheus/latest/configuration/https/)，避免 Prometheus 湊集端點暴露於公有網際網路。

如果您設定多個 Prometheus 執行個體來監控同一組指標，並將其傳送到單一 Amazon Managed Service for Prometheus 以獲得高可用性，則需要設定重複資料刪除功能。若未按照步驟設定重複資料刪除功能，則會向您收取傳送至 Amazon Managed Service for Prometheus 的所有資料樣本費用，包括重複樣本。如需有關設定重複資料刪除的指示，請參閱 [將傳送至 Amazon Managed Service for Prometheus 的高可用性指標刪除重複資料](AMP-ingest-dedupe.md)。

**Topics**
+ [設定使用 Helm 從新的 Prometheus 伺服器擷取](AMP-onboard-ingest-metrics-new-Prometheus.md)
+ [在 EC2 上 Kubernetes 中設定現有 Prometheus 伺服器的擷取作業](AMP-onboard-ingest-metrics-existing-Prometheus.md)
+ [在 Fargate 的 Kubernetes 從現有的 Prometheus 伺服器設定擷取作業](AMP-onboard-ingest-metrics-existing-Prometheus-fargate.md)

# 設定使用 Helm 從新的 Prometheus 伺服器擷取
<a name="AMP-onboard-ingest-metrics-new-Prometheus"></a>

本節中的指示可協助您快速啟動，並使用 Amazon Managed Service for Prometheus 執行。您在 Amazon EKS 叢集中設定新的 Prometheus 伺服器，新伺服器會使用預設組態將指標傳送至 Amazon Managed Service for Prometheus。此主題有以下先決條件：
+ 您必須擁有新的 Prometheus 伺服器將從中收集指標的 Amazon EKS 叢集。
+ 您的 Amazon EKS 叢集必須安裝 [Amazon EBS CSI 驅動程式](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) (Helm 要求）。
+ 您必須使用 Helm CLI 3.0 或更新版本。
+ 您必須使用 Linux 或 macOS 電腦來執行以下各節中的步驟。

## 步驟 1：新增 Helm Chart 儲存庫
<a name="AMP-onboard-new-Prometheus-HelmRepo"></a>

若要新增 Helm Chart 儲存庫，請輸入下列命令。如需有關這些命令的詳細資訊，請參閱 [Helm 儲存庫](https://helm.sh/docs/helm/helm_repo/)。

```
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics
helm repo update
```

## 步驟 2：建立 Prometheus 命名空間
<a name="AMP-onboard-new-Prometheus-namespace"></a>

輸入下列命令，為 Prometheus 伺服器和其他監控元件建立 Prometheus 命名空間。將 *prometheus-namespace* 替換為您希望此命名空間的名稱。

```
kubectl create namespace prometheus-namespace
```

## 步驟 3：為服務帳戶設定 IAM 角色
<a name="AMP-onboard-new-Prometheus-IRSA"></a>

若為我們正在記錄的入職方法，您需要在執行 Prometheus 伺服器的 Amazon EKS 叢集中使用服務帳戶的 IAM 角色。

透過服務帳戶的 IAM 角色，您可以產生 IAM 角色與 Kubernetes 服務帳戶的關聯。然後，此服務帳戶可以為使用該服務帳戶之任何 Pod 中的容器提供 AWS 許可。如需詳細資訊，請參閱[服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

如果您尚未設定這些角色，請按照中的 [自 Amazon EKS 叢集設定指標擷取作業的服務角色](set-up-irsa.md#set-up-irsa-ingest) 指示設定角色。本節中的說明需要使用 `eksctl`。如需詳細資訊，請參閱 [Amazon Elastic Kubernetes Service 入門 - `eksctl`](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)。

**注意**  
當您不在 EKS 或 ， AWS 並且只使用存取金鑰和私密金鑰來存取 Amazon Managed Service for Prometheus 時，則無法使用 `EKS-IAM-ROLE` 型 SigV4。

## 步驟 4：設定新伺服器並開始擷取指標
<a name="AMP-onboard-ingest-metrics-new-Prometheus-Helm"></a>

若要安裝新的 Prometheus 伺服器，該伺服器會將指標傳送至您的 Amazon Managed Service for Prometheus 工作區，請按照下列步驟操作。

**安裝新的 Prometheus 伺服器，以將指標傳送至您的 Amazon Managed Service for Prometheus 工作區**

1. 使用文字編輯器建立名為 `my_prometheus_values_yaml` 的檔案，包含下列內容。
   + 將 *IAM\$1PROXY\$1PROMETHEUS\$1ROLE\$1ARN* 替換為您在 [自 Amazon EKS 叢集設定指標擷取作業的服務角色](set-up-irsa.md#set-up-irsa-ingest) 中建立 **amp-iamproxy-ingest-role** 的 ARN。
   + 將 *WORKSPACE\$1ID* 替換為您 Amazon Managed Service for Prometheus 工作區的 ID。
   + 將 *REGION* 替換為您 Amazon Managed Service for Prometheus 工作區的區域。

   ```
   ## The following is a set of default values for prometheus server helm chart which enable remoteWrite to AMP
   ## For the rest of prometheus helm chart values see: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml
   ##
   serviceAccounts:
     server:
       name: amp-iamproxy-ingest-service-account
       annotations: 
         eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
   server:
     remoteWrite:
       - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
         sigv4:
           region: ${REGION}
         queue_config:
           max_samples_per_send: 1000
           max_shards: 200
           capacity: 2500
   ```

1. 輸入下列命令以建立 Prometheus 伺服器。
   + 將 *prometheus-chart-name* 替換為您的 Prometheus 版本名稱。
   + 將 *prometheus-namespace* 替換為您的 Prometheus 命名空間的名稱。

   ```
   helm install prometheus-chart-name prometheus-community/prometheus -n prometheus-namespace \
   -f my_prometheus_values_yaml
   ```
**注意**  
您可以使用多種方式自訂 `helm install` 命令。如需詳細資訊，請參閱 *Helm 文件*中的 [Helm 安裝](https://helm.sh/docs/helm/helm_install/)。

# 在 EC2 上 Kubernetes 中設定現有 Prometheus 伺服器的擷取作業
<a name="AMP-onboard-ingest-metrics-existing-Prometheus"></a>

Amazon Managed Service for Prometheus 支援擷取 Prometheus 伺服器的指標，位於執行 Amazon EKS 的叢集以及在 Amazon EC2 中執行的自我管理 Kubernetes。本節中的詳細說明適用於 Amazon EKS 叢集中的 Prometheus 伺服器。除了您將需要在 Kubernetes 叢集中自行設定服務帳戶的 OIDC 提供者和 IAM 角色以外，Amazon EC2 上的自我管理 Kubernetes 叢集步驟皆相同。

本節中的指示使用 Helm 做為 Kubernetes 套件管理員。

**Topics**
+ [步驟 1：為服務帳戶設定 IAM 角色](#AMP-onboard-existing-Prometheus-IRSA)
+ [步驟 2：使用 Helm 升級您現有的 Prometheus 伺服器](#AMP-onboard-ingest-metrics-existing-remotewrite)

## 步驟 1：為服務帳戶設定 IAM 角色
<a name="AMP-onboard-existing-Prometheus-IRSA"></a>

若為我們正在記錄的入職方法，您需要在執行 Prometheus 伺服器的 Amazon EKS 叢集中使用服務帳戶的 IAM 角色。這些角色也稱為*服務角色*。

透過服務角色，您可以產生 IAM 角色與 Kubernetes 服務帳戶的關聯。然後，此服務帳戶可以為使用該服務帳戶的任何 Pod 中的容器提供 AWS 許可。如需詳細資訊，請參閱[服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

如果您尚未設定這些角色，請按照中的 [自 Amazon EKS 叢集設定指標擷取作業的服務角色](set-up-irsa.md#set-up-irsa-ingest) 指示設定角色。

## 步驟 2：使用 Helm 升級您現有的 Prometheus 伺服器
<a name="AMP-onboard-ingest-metrics-existing-remotewrite"></a>

本節中的說明包括設定遠端寫入和 sigv4 以進行驗證，並授權 Prometheus 伺服器遠端寫入 Amazon Managed Service for Prometheus 工作區。

### 使用 Prometheus 版本 2.26.0 或更新版本
<a name="AMP-onboard-ingest-metrics-Helm13"></a>

如果您稍後使用 Helm Chart 與版本 2.26.0 或更新版本的 Prometheus 伺服器，請按照下列步驟操作。

**使用 Helm Chart 從 Prometheus 伺服器設定遠端寫入**

1. 在 Helm 組態檔案中建立一個新的遠端寫入區段：
   + 將 `${IAM_PROXY_PROMETHEUS_ROLE_ARN}` 替換為您在 [步驟 1：為服務帳戶設定 IAM 角色](#AMP-onboard-existing-Prometheus-IRSA) 中建立 **amp-iamproxy-ingest-role** 的 ARN。角色 ARN 的格式應為 `arn:aws:iam::your account ID:role/amp-iamproxy-ingest-role`。
   + 將 `${WORKSPACE_ID}` 替換為 Amazon Managed Service for Prometheus 工作區 ID。
   + 將 `${REGION}` 替換為 Amazon Managed Service for Prometheus 工作區的地區 (例如 `us-west-2`)。

   ```
   ## The following is a set of default values for prometheus server helm chart which enable remoteWrite to AMP
       ## For the rest of prometheus helm chart values see: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml
       ##
       serviceAccounts:
         server:
           name: amp-iamproxy-ingest-service-account
           annotations: 
             eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
       server:
         remoteWrite:
           - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
             sigv4:
               region: ${REGION}
             queue_config:
               max_samples_per_send: 1000
               max_shards: 200
               capacity: 2500
   ```

1. 使用 Helm 更新您現有的 Prometheus 伺服器組態：
   + 將 `prometheus-chart-name` 替換為您的 Prometheus 版本名稱。
   + 將 `prometheus-namespace` 替換為安裝 Prometheus 伺服器的 Kubernetes 命名空間。
   + 將 `my_prometheus_values_yaml` 替換為 Helm 組態檔路徑。
   + 將 `current_helm_chart_version` 替換為您 Prometheus 伺服器 Helm Chart 的目前版本。您可以通過使用 [Helm list](https://helm.sh/docs/helm/helm_list/) 命令找到目前圖表版本。

   ```
   helm upgrade prometheus-chart-name prometheus-community/prometheus \
          -n prometheus-namespace \
          -f my_prometheus_values_yaml \
          --version current_helm_chart_version
   ```

### 使用早期 Prometheus 的版本
<a name="AMP-onboard-ingest-metrics-Helm8"></a>

若您正在使用 2.26.0 之前的 Prometheus 版本，請按照以下步驟操作。這些步驟使用附屬方法，因為舊版 Prometheus 本身不支援 AWS Signature 第 4 版簽署程序 (AWS SigV4)。

以下說明假設您使用 Helm 部署 Prometheus。

**從 Prometheus 伺服器設定遠端寫入**

1. 在您的 Prometheus 伺服器上，建立新的遠端寫入組態。首先，建立新的更新檔案。我們將呼叫該檔案 `amp_ingest_override_values.yaml`。

   將下列值新增至 YAML 檔案。

   ```
   serviceAccounts:
           server:
               name: "amp-iamproxy-ingest-service-account"
               annotations:
                   eks.amazonaws.com/role-arn: "${SERVICE_ACCOUNT_IAM_INGEST_ROLE_ARN}"
       server:
           sidecarContainers:
               - name: aws-sigv4-proxy-sidecar
                 image: public.ecr.aws/aws-observability/aws-sigv4-proxy:1.0
                 args:
                 - --name
                 - aps
                 - --region
                 - ${REGION}
                 - --host
                 - aps-workspaces.${REGION}.amazonaws.com
                 - --port
                 - :8005
                 ports:
                 - name: aws-sigv4-proxy
                   containerPort: 8005
           statefulSet:
               enabled: "true"
           remoteWrite:
               - url: http://localhost:8005/workspaces/${WORKSPACE_ID}/api/v1/remote_write
   ```

   將 `${REGION}` 替換為 Amazon Managed Service for Prometheus 工作區的地區。

   將 `${SERVICE_ACCOUNT_IAM_INGEST_ROLE_ARN}` 替換為您在 [步驟 1：為服務帳戶設定 IAM 角色](#AMP-onboard-existing-Prometheus-IRSA) 中建立 **amp-iamproxy-ingest-role** 的 ARN。角色 ARN 的格式應為 `arn:aws:iam::your account ID:role/amp-iamproxy-ingest-role`。

   將 `${WORKSPACE_ID}` 替換為工作區 ID。

1. 升級 Prometheus Helm Chart。首先，輸入下列命令尋找 Helm Chart 名稱。在此命令的輸出中，尋找名稱包含 `prometheus` 的圖表。

   ```
   helm ls --all-namespaces
   ```

   然後輸入下列命令。

   ```
   helm upgrade --install prometheus-helm-chart-name prometheus-community/prometheus -n prometheus-namespace -f ./amp_ingest_override_values.yaml
   ```

   將 *prometheus-helm-chart-name* 替換為上一個命令中傳回 Prometheus Helm Chart 的名稱。將 *prometheus-namespace* 替換為命名空間名稱。

#### 下載 Helm Chart
<a name="AMP-onboard-ingest-downloadHelm"></a>

如果您尚未在本機下載 Helm Chart，您可以使用以下命令進行下載。

```
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm pull prometheus-community/prometheus --untar
```

# 在 Fargate 的 Kubernetes 從現有的 Prometheus 伺服器設定擷取作業
<a name="AMP-onboard-ingest-metrics-existing-Prometheus-fargate"></a>

Amazon Managed Service for Prometheus 支援在 Fargate 上執行的自我管理 Kubernetes 叢集中，從 Prometheus 伺服器擷取指標。若要從 Fargate 上執行 Amazon EKS 叢集中的 Prometheus 伺服器擷取指標，請覆寫名為 amp\$1ingest\$1override\$1values.yaml 組態檔中的預設組態，如下所示：

```
prometheus-node-exporter:
        enabled: false
    
    alertmanager:
        enabled: false
    
    serviceAccounts:
      server:
        name: amp-iamproxy-ingest-service-account
        annotations: 
          eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
    
    server:
      persistentVolume:
        enabled: false
      remoteWrite:
        - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
          sigv4:
            region: ${REGION}
          queue_config:
            max_samples_per_send: 1000
            max_shards: 200
            capacity: 2500
```

使用透過以下命令覆寫安裝 Prometheus：

```
helm install prometheus-for-amp prometheus-community/prometheus \
                   -n prometheus \
                   -f amp_ingest_override_values.yaml
```

請注意，在 Helm Chart 組態中，我們停用節點匯出程式和警示管理員以及執行 Prometheus 伺服器部署。

您可以使用以下範例測試查詢驗證安裝程序。

```
$ awscurl --region region --service aps "https://aps-workspaces.region_id.amazonaws.com/workspaces/workspace_id/api/v1/query?query=prometheus_api_remote_read_queries"
    {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"prometheus_api_remote_read_queries","instance":"localhost:9090","job":"prometheus"},"value":[1648461236.419,"0"]}]}}21
```