メインコンテンツまでスキップ

AWS Distro for OpenTelemetry を使用したメトリクスのスクレイピング

このラボでは、すでに作成されている Amazon Managed Service for Prometheus ワークスペースにメトリクスを保存します。コンソールで確認することができます:

AWS console iconAPS コンソールを開く

ワークスペースを表示するには、左側のコントロールパネルの All Workspaces タブをクリックします。eks-workshop で始まるワークスペースを選択すると、ルール管理やアラートマネージャーなどのワークスペース内のさまざまなタブを表示できます。

Amazon EKS クラスターからメトリクスを収集するために、OpenTelemetryCollector カスタムリソースをデプロイします。EKS クラスターで実行されている ADOT オペレーターは、このリソースの存在や変更を検出し、以下のアクションを実行します:

  • Kubernetes API サーバーへの作成、更新、削除リクエストに必要なすべての接続が利用可能であることを確認します。
  • OpenTelemetryCollector リソース設定でユーザーが指定した方法で ADOT コレクターインスタンスをデプロイします。

まず、ADOT コレクターに必要な権限を与えるリソースを作成しましょう。コレクターが Kubernetes API にアクセスするための権限を与える ClusterRole から始めます:

~/environment/eks-workshop/modules/observability/oss-metrics/adot/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otel-prometheus-role
rules:
- apiGroups:
- ""
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch
- nonResourceURLs:
- /metrics
verbs:
- get
A

このコア API グループ "" は、メトリクス収集のために resources の下にリストされているコア Kubernetes リソースに verbs の下で指定されたアクションを使用してアクセスする権限をロールに与えます

B

この拡張 API グループ extensions は、ネットワークトラフィックメトリクス収集のために verbs の下で指定されたアクションを使用してイングレスリソースにアクセスする権限をロールに与えます

C

nonResourceURLs は、クラスターレベルの運用メトリクス収集のために verbs の下で指定されたアクションを使用して、Kubernetes API サーバー上の /metrics エンドポイントにアクセスする権限をロールに与えます

マネージド IAM ポリシー AmazonPrometheusRemoteWriteAccess を使用して、IAM Roles for Service Accounts を通じてコレクターに必要な IAM 権限を提供します:

~$aws iam list-attached-role-policies \
--role-name $EKS_CLUSTER_NAME-adot-collector | jq .
{
  "AttachedPolicies": [
    {
      "PolicyName": "AmazonPrometheusRemoteWriteAccess",
      "PolicyArn": "arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess"
    }
  ]
}

この IAM ロールは、コレクターの ServiceAccount に追加されます:

~/environment/eks-workshop/modules/observability/oss-metrics/adot/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: adot-collector
annotations:
eks.amazonaws.com/role-arn: ${ADOT_IAM_ROLE}

リソースを作成します:

~$kubectl kustomize ~/environment/eks-workshop/modules/observability/oss-metrics/adot \
| envsubst | kubectl apply -f-
~$kubectl rollout status -n other deployment/adot-collector --timeout=120s

コレクターの仕様は長すぎて全てを表示できませんが、以下のように確認できます:

~$kubectl -n other get opentelemetrycollector adot -o yaml

より理解しやすくするために、このセクションを分解してみましょう。これが OpenTelemetry コレクター設定です:

~$kubectl -n other get opentelemetrycollector adot -o jsonpath='{.spec.config}' | jq

これは以下の構造を持つ OpenTelemetry パイプラインを設定しています:

  • レシーバー
    • Prometheus レシーバー - Prometheus エンドポイントを公開するターゲットからメトリクスをスクレイプするように設計されています
  • プロセッサー
    • このパイプラインには含まれていません
  • エクスポーター

このコレクターは、1つのコレクターエージェントを実行する Deployment として構成されています:

~$kubectl -n other get opentelemetrycollector adot -o jsonpath='{.spec.mode}{"\n"}'

実行中の ADOT コレクター Pod を調査することで、これを確認できます:

~$kubectl get pods -n other
NAME                              READY   STATUS    RESTARTS   AGE
adot-collector-6f6b8867f6-lpjb7   1/1     Running   2          11d