

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 メトリクスの収集には、Prometheus Receiver、Prometheus Remote Write Exporter、Sigv4 Authentication Extension という 3 つの OpenTelemetry コンポーネントが使用されます。

既存の Prometheus の設定を使用して Prometheus Receiver を構成して、サービス検出とメトリクスのスクレイピングを実行できます。Prometheus Receiver は、メトリクスを Prometheus 公開形式でスクレイピングします。スクレイピング対象のアプリケーションやエンドポイントは、Prometheus クライアントライブラリで構成する必要があります。Prometheus Receiver は、Prometheus ドキュメントの「[Configuration](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)」で説明されている Prometheus のスクレイピングと再ラベル付けの設定をすべてサポートしています。これらの設定を直接 ADOT コレクターの設定に貼り付けることができます。

Prometheus Remote Write Exporter は、`remote_write` エンドポイントを使用して、スクレイピングされたメトリクスを管理ポータルワークスペースに送信します。データをエクスポートする HTTP リクエストは、安全な認証の AWS プロトコルである AWS SigV4 と Sigv4 Authentication Extension で署名されます。詳細については、「[Signature Version 4 の署名プロセス](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)」を参照してください。

コレクターは、Amazon EKS 上の Prometheus メトリクスエンドポイントを自動的に検出し、[<kubernetes\_sd\_config>](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)」を参照してください。このデモでは、プロセスの統合テストに使用されるサンプルアプリを使用します。このサンプルアプリは、Prometheus クライアントライブラリのように、`/metrics` エンドポイントでメトリクスを公開します。

## 前提条件
<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. 次に、信頼ポリシーを編集します。IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/home)) を開きます。

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 ワークスペースの **remote\_write** エンドポイントに、`YOUR_REGION` を使用中のリージョンに置き換えます。ワークスペースの詳細を確認したときに Amazon Managed Service for Prometheus コンソールに表示される **remote\_write** エンドポイントを使用してください。

   また、Kubernetes 設定のサービスアカウントセクション`YOUR_ACCOUNT_ID`の を AWS アカウント ID に変更する必要があります。

   この例では、ADOT コレクターの設定で注釈 (`scrape=true`) を使用して、スクレイピングするターゲットエンドポイントを指定しています。ADOT コレクターは、これによってサンプルアプリのエンドポイントをクラスター内の kube-system エンドポイントから区別できます。別のサンプルアプリをスクレイピングする場合は、これを再ラベル付けの設定から削除できます。

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 リクエストを送信できるため、Amazon Managed Service for Prometheus からクエリを実行するための正しいアクセス許可を持つ AWS 認証情報をローカルに設定する必要があります。 のインストール手順については`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 Receiver は、Prometheus ドキュメントの「[Configuration](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)」で説明されている Prometheus のスクレイピングと再ラベル付けの設定をすべてサポートしています。これらの設定を直接 ADOT コレクターの設定に貼り付けることができます。

Prometheus Receiver の設定には、サービス検出、スクレイピング設定、再ラベル設定が含まれます。レシーバーの設定は次のようになります。

```
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 設定がある場合は、値が環境変数で置き換えられないように、`$` 文字を `$$` に置き換える必要があります。\*これは、relabel\_configurations の replacement の値で特に重要です。例えば、次のような relabel\_configurations があるとします。

```
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 Remote Write Exporter と Sigv4 Authentication Extension**

Prometheus Remote Write Exporter と Sigv4 Authentication Extension の設定は、Prometheus Receiver よりも簡単です。パイプラインのこの段階では、既にメトリクスが取り込まれていて、このデータを 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 リクエストを送信します。詳細については、「[Configuring the AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html)」を参照してください。サービスには `aps` を指定する必要があります。

デプロイの方法にかかわらず、ADOT コレクターはデフォルトの AWS 認証情報チェーンにリストされているオプションのいずれかにアクセスできる必要があります。Sigv4 Authentication Extension は に依存し AWS SDK for Go 、それを使用して認証情報を取得して認証します。これらの認証情報に、Amazon Managed Service for Prometheus のリモート書き込みアクセス許可があることを確認する必要があります。