Amazon Elastic Kubernetes Service AWS クラスター OpenTelemetry で Distro for を使用してメトリクスの取り込みを設定する - Amazon Managed Service for Prometheus

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

Amazon Elastic Kubernetes Service AWS クラスター OpenTelemetry で Distro for を使用してメトリクスの取り込みを設定する

AWS Distor for OpenTelemetry (ADOT) コレクターを使用して、Prometheus で計測されたアプリケーションからメトリクスをスクレイプし、そのメトリクスを Amazon Managed Service for Prometheus に送信できます。

注記

ADOT コレクターの詳細については、AWS 「 Distro for OpenTelemetry」を参照してください。

Prometheus で計測されたアプリケーションの詳細については、「」を参照してくださいPrometheus と互換性のあるメトリクスとはどのようなものですか。

で Prometheus メトリクスを収集するには、Prometheus レシーバー、Prometheus Remote Write Exporter、および Sigv4 Authentication Extension の 3 つの OpenTelemetry コンポーネントADOTが必要です。

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

Prometheus Remote Write Exporter は、remote_write エンドポイントを使用して、スクレイピングされたメトリクスを管理ポータルワークスペースに送信します。データのエクスポートHTTPリクエストは、 AWS SigV4 Authentication Extension を使用して、安全な認証の AWS プロトコルである Sigv4 で署名されます。詳細については、「Signature Version 4 の署名プロセス」を参照してください。

コレクターは Amazon 上の Prometheus メトリクスエンドポイントを自動的に検出EKSし、<kubernetes_sd_config> にある設定を使用します。

以下のデモは、Amazon Elastic Kubernetes Service または自己管理型 Kubernetes を実行しているクラスターでのこの設定の例を示しています。これらのステップを実行するには、デフォルトの認証情報チェーンの潜在的なオプションのいずれかからの AWS 認証情報が必要です AWS 。詳細については、「Go の AWS SDK の設定」を参照してください。このデモでは、プロセスの統合テストに使用されるサンプルアプリを使用します。このサンプルアプリは、Prometheus クライアントライブラリのように、/metrics エンドポイントでメトリクスを公開します。

前提条件

以下の取り込み設定ステップを開始する前に、サービスアカウントと信頼ポリシーのIAMロールを設定する必要があります。

サービスアカウントと信頼ポリシーのIAMロールを設定するには
  1. 「」の手順に従って、サービスアカウントのIAMロールを作成しますAmazon EKS クラスターからメトリクスを取り込むためのサービスロールの設定

    ADOT コレクターは、メトリクスをスクレイピングしてエクスポートするときにこのロールを使用します。

  2. 次に、信頼ポリシーを編集します。でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/

  3. 左側のナビゲーションペインでロールを選択し、ステップ 1 でamp-iamproxy-ingest-role作成した を見つけます。

  4. [信頼関係] タブを選択し、[信頼関係の編集] を選択します。

  5. 信頼関係ポリシー でJSON、 を aws-ampに置き換えadot-col信頼ポリシー の更新を選択します。最終的なポリシーは次のようになります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/openid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/openid:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account" } } } ] }
  6. [アクセス許可] タブを選択し、次のアクセス許可ポリシーがロールにアタッチされていることを確認します。

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

Prometheus メトリクスの収集の有効化

注記

Amazon で名前空間を作成するalertmanagerとEKS、ノードエクスポーターはデフォルトで無効になります。

Amazon EKSまたは Kubernetes クラスターで Prometheus コレクションを有効にするには
  1. のリポジトリからサンプルアプリケーションをフォークしてクローンしますaws-otel-community

    次に、以下のコマンドを実行します。

    cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
  2. このイメージを Amazon ECRや などのレジストリにプッシュします DockerHub。

  3. 次のように 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
  4. 次のコマンドを入力して、サンプルアプリが起動したことを確認します。コマンドの出力で、NAME 列に prometheus-sample-app が表示されます。

    kubectl get all -n aoc-prometheus-pipeline-demo
  5. Collector 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 エンドポイントと区別できます。別のサンプルアプリをスクレイピングする場合は、これを再ラベル付けの設定から削除できます。

  6. ADOT コレクターをデプロイするには、次のコマンドを入力します。

    kubectl apply -f prometheus-daemonset.yaml
  7. 次のコマンドを入力して、ADOTコレクターが起動したことを確認します。NAMESPACE 列で adot-col を探してください。

    kubectl get pods -n adot-col
  8. ログエクスポーターを使用して、パイプラインが機能することを確認します。サンプルテンプレートは既にログエクスポーターと統合されています。次のコマンドを入力します。

    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
  9. Amazon Managed Service for Prometheus がメトリクスを受け取ったかどうかをテストするには、awscurl を使用します。このツールを使用すると、 AWS Sigv4 認証を使用してコマンドラインからHTTPリクエストを送信できるため、Amazon Managed Service for Prometheus からクエリを実行するための正しいアクセス許可で AWS 認証情報をローカルに設定する必要があります。 のインストール手順についてはawscurl「awscurl」を参照してください。

    次のコマンドの AMP_REGIONAMP_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

高度な設定

Prometheus Receiver は、Prometheus ドキュメントの「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」を参照してください。サービスには aps を指定する必要があります。

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