View a markdown version of this page

Helm を使用して OTel Container Insights をデプロイする - Amazon CloudWatch

Helm を使用して OTel Container Insights をデプロイする

Amazon CloudWatch Observability Helm チャートによって、OTel Container Insights を必要に応じて柔軟にデプロイできます。ログ収集用の OpenTelemetry ファイルログレシーバーを使用して CloudWatch エージェント (OTel ベース) がインストールされます。Helm チャートは https://github.com/aws-observability/helm-charts で管理されています。

次の 1 つまたは複数の機能が必要な場合は、Helm チャートを使用します。

  • エージェント設定のきめ細かな制御

  • ファイルログレシーバーを使用した OTel ネイティブのログ収集 (Fluent Bit 依存関係なし)

  • cert-manager によるカスタム TLS 証明書管理

  • EKS 以外の Kubernetes クラスター (ROSA、セルフマネージド Kubernetes)

  • ArgoCD または Flux を使用した GitOps ワークフロー

前提条件

Helm で OTel Container Insights をデプロイする前に、次の要件を満たしていることを確認します。

  • Kubernetes バージョン 1.28 以降を実行している既存の Amazon EKS クラスター

  • Helm バージョン 3.9 以降

  • kubectl がターゲットクラスターと通信できるように設定されていること

  • IAM アクセス許可: エージェントロールにアタッチされた CloudWatchAgentServerPolicy 管理ポリシー

  • サービスアカウント (IRSA) の IAM ロール用に設定された OpenID Connect (OIDC) プロバイダー

  • クラスターから CloudWatch エンドポイントへのアウトバウンドインターネットアクセス

Helm チャートをインストールする

Helm チャートを使用して OTel Container Insights をデプロイするには、次の手順を実行します。

ステップ 1: Helm リポジトリを追加する

AWS Observability Helm チャートリポジトリをローカル Helm 設定に追加します。

Helm リポジトリを追加するには
  1. 次のコマンドを実行してリポジトリを追加します。

    helm repo add aws-observability \ https://aws-observability.github.io/helm-charts
  2. リポジトリを更新して、最新のチャートバージョンを取得します。

    helm repo update

ステップ 2: IAM ロールを作成する

CloudWatch エージェントが CloudWatch にデータを送信できるようにする IAM ロールを作成します。このロールは IRSA を使用して IAM アクセス許可を Kubernetes サービスアカウントに関連付けます。

CloudWatch エージェント用の IAM ロールを作成するには
  1. クラスターの OIDC 発行者 URL を取得します。cluster-name は、自分の Amazon EKS クラスターに置き換えます。

    aws eks describe-cluster \ --name cluster-name \ --query "cluster.identity.oidc.issuer" \ --output text
  2. IRSA の信頼できるポリシーを使用して IAM ロールを作成します。account-id を自分の AWS アカウント ID に、oidc-id を前のステップ (https://oidc.eks.region.amazonaws.com/id/ の後の部分) の OIDC プロバイダー ID に置き換えます。

    aws iam create-role \ --role-name EKS-CW-Observability-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/oidc-id:sub": "system:serviceaccount:amazon-cloudwatch:cloudwatch-agent" } } }] }'
  3. CloudWatchAgentServerPolicy 管理ポリシーをロールにアタッチします。

    aws iam attach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

ステップ 3: チャートをインストールする

OTel Container Insights を有効にして Amazon CloudWatch Observability Helm チャートをインストールします。

Helm チャートをインストールするには
  • 以下のコマンドを実行してください。cluster-name を Amazon EKS クラスターの名前に、region を AWS リージョンに、account-id を AWS アカウント ID に置き換えます。

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
    重要

    otelContainerInsights.enabled パラメータは必須です。OTel Container Insights はデフォルトでは有効になっていません。

ステップ 4: インストールを確認する

Helm リリースドとエージェントポッドが正常にデプロイされたことを確認します。

Helm のインストールを確認するには
  1. Helm リリースステータスが deployed と表示されていることを確認します。

    helm list -n amazon-cloudwatch
  2. オペレーターポッドが実行されていることを確認します。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability
  3. CloudWatch エージェントポッドがすべてのノードで実行されていることを確認します。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    すべてのエージェントポッドが Running ステータスになっている必要があります。

キーの設定オプション

次の表は、設定できる Helm チャートの主要な値を示しています。--set フラグまたはカスタム values.yaml ファイルを使用して、これらの値を渡します。

[クラスター設定]

パラメータ デフォルト 説明
clusterName Amazon EKS クラスターの名前。必須。
region クラスターが実行されている AWS リージョン。必須。
otelContainerInsights.enabled false ファイルログレシーバーで OTel Container Insights を有効にします。

コンテナログ (OTel ファイルログレシーバー)

パラメータ デフォルト 説明
containerLogs.enabled true OTel ファイルログレシーバーを使用してコンテナログの収集を有効にします。
containerLogs.logGroupName /aws/containerinsights/cluster-name/application コンテナログの CloudWatch Logs ロググループ名。
containerLogs.logRetentionDays 7 CloudWatch Logs にコンテナログを保持する日数。

エージェント (メトリクス)

パラメータ デフォルト 説明
agent.enabled true メトリクス収集の CloudWatch エージェント DaemonSet を有効にします。
agent.serviceAccount.name cloudwatch-agent エージェントの Kubernetes サービスアカウントの名前。
agent.resources.requests.cpu 100m エージェントコンテナの CPU リクエスト。
agent.resources.requests.memory 128Mi エージェントコンテナのメモリリクエスト。
agent.resources.limits.cpu 200m エージェントコンテナの CPU 制限
agent.resources.limits.memory 256Mi エージェントコンテナのメモリ制限

GPU モニタリング

パラメータ デフォルト 説明
agent.config.logs.metrics_collected.kubernetes.enhanced_container_insights true GPU メトリクスを含む Enhanced Container Insights メトリクスを有効にします。
dcgmExporter.enabled false NVIDIA GPU メトリクスの DCGM エクスポーターを有効にします。NVIDIA GPU ノードが必要です。
neuronMonitor.enabled false AWS Inferentia と Trainium メトリクスの Neuron モニターを有効にします。

TLS 証明書の管理

CloudWatch Observability オペレーターには、ウェブフック通信用の TLS 証明書が必要です。デフォルトでは、チャートは自己署名証明書を生成します。cert-manager を使用して、証明書を自動的に管理できます。

自己署名証明書 (デフォルト)

デフォルトでは、Helm チャートは自己署名 CA を生成し、その CA から証明書を発行します。追加の設定は必要ありません。チャートは、アップグレード中にこれらの証明書を自動的にローテーションします。

cert-manager 統合

cert-manager を使用して、証明書の発行と更新を自動化できます。このアプローチは、組織が外部で署名された証明書または一元化された証明書管理を必要とする場合に役立ちます。

cert-manager 統合を設定するには
  1. cert-manager がクラスターにインストールされていることを確認します。

    kubectl get pods -n cert-manager
  2. cert-manager を有効にして Helm チャートをインストールします。cluster-name を Amazon EKS クラスターの名前に、region を AWS リージョンに、account-id を AWS アカウント ID に置き換えます。

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true \ --set admissionWebhooks.certManager.enabled=true

cert-manager を有効にすると、チャートは cert-manager がウェブフック TLS 証明書を自動的に発行および管理するために使用する Certificate リソースを作成します。

注記

HashiCorp Vault などの外部発行者でも cert-manager を使用できます。外部発行者を設定するには、cert-manager 発行者と一致するように admissionWebhooks.certManager.issuerRef.nameadmissionWebhooks.certManager.issuerRef.kind を設定します。

チャートをアップグレードする

Helm チャートをアップグレードして新しい設定値を適用するか、新しいチャートバージョンに更新します。

Helm チャートをアップグレードするには
  1. Helm リポジトリを更新して、最新のチャートバージョンを取得します。

    helm repo update
  2. アップグレードコマンドを希望する値で実行します。cluster-name を Amazon EKS クラスターの名前に、region を AWS リージョンに、account-id を AWS アカウント ID に置き換えます。

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
  3. アップグレードが正常に完了したことを確認します。

    helm list -n amazon-cloudwatch

    リビジョン番号が増加し、ステータスが deployed になる必要があります。

ヒント

アップグレード中に設定値が失われないようにするには、カスタム値を values.yaml ファイルに保存し、-f values.yaml フラグとともに渡します。

チャートをアンインストールする

クラスターから OTel Container Insights を削除するには、Helm リリースをアンインストールします。

Helm チャートをアンインストールするには
  1. 次のコマンドを実行してリリースをアンインストールします。

    helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch
  2. 必要に応じて、不要になった名前空間があれば削除します。

    kubectl delete namespace amazon-cloudwatch

Helm チャートをアンインストールした後、IAM ロールと OIDC プロバイダーの設定は AWS アカウントに残ります。これらのリソースが不要になった場合は、個別に削除します。

aws iam detach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws iam delete-role \ --role-name EKS-CW-Observability-Role

CloudWatch でデータを確認する

Helm チャートをインストールすると、3~5 分以内に Container Insights データが CloudWatch に表示されます。

メトリクスを確認する

CloudWatch でメトリクスを確認するには
  1. CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/ を開いてください。

  2. ナビゲーションペインで、[Container Insights] を選択します。

  3. クラスターがクラスターリストに表示され、インフラストラクチャメトリクスが入力されていることを確認します。

ログを確認する

クラスターにロググループが存在することを確認するには、次のコマンドを実行します。cluster-name は、自分の Amazon EKS クラスターに置き換えます。

aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].logGroupName" \ --output table

トラブルシューティング

Helm で OTel Container Insights をデプロイする際の一般的な問題を解決するには、次のガイダンスを使用します。

CrashLoopBackOff のオペレーターポッド

症状: kubectl get pods -n amazon-cloudwatch を実行すると、オペレーターポッドに CrashLoopBackOff ステータスが表示されます。

原因: TLS 証明書に問題があるか、アクセス許可が不十分であるため、オペレーターポッドを起動できません。

解決策: この問題を解決するには、次の手順に従います。

  1. 証明書関連のエラーがないかオペレーターポッドログを確認します。

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50
  2. 名前空間にウェブフック TLS シークレットが存在することを確認します。

    kubectl get secrets -n amazon-cloudwatch | grep webhook
  3. cert-manager を使用する場合は、Certificate リソースのステータスが Ready であることを確認します。

    kubectl get certificate -n amazon-cloudwatch
  4. 証明書が見つからないか無効である場合は、チャートをアンインストールして再インストールし、証明書を再生成します。

    helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch

すべてのノードではスケジュールされていないエージェントポッド

症状: エージェント DaemonSet は、クラスター内のノード数よりも少ないポッドを表示します。

原因: ノードテイント、リソース制約、またはノードセレクタにより、エージェントポッドが特定のノードでスケジューリングできなくなります。

解決策: この問題を解決するには、次の手順に従います。

  1. スケジューリングの問題がないか DaemonSet のステータスを確認します。

    kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent
  2. スケジュールされていないポッドをチェックし、そのイベントを表示します。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running
  3. ノードにテイントがある場合は、Helm チャート値に許容範囲を追加します。例えば、すべてのテイントを許容するには、次のフラグを使用してチャートをアップグレードします。

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists"
  4. エージェントポッドがすべてのノードで実行されていることを確認します。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide