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 リポジトリを追加するには
-
次のコマンドを実行してリポジトリを追加します。
helm repo add aws-observability \ https://aws-observability.github.io/helm-charts -
リポジトリを更新して、最新のチャートバージョンを取得します。
helm repo update
ステップ 2: IAM ロールを作成する
CloudWatch エージェントが CloudWatch にデータを送信できるようにする IAM ロールを作成します。このロールは IRSA を使用して IAM アクセス許可を Kubernetes サービスアカウントに関連付けます。
CloudWatch エージェント用の IAM ロールを作成するには
-
クラスターの OIDC 発行者 URL を取得します。
cluster-nameは、自分の Amazon EKS クラスターに置き換えます。aws eks describe-cluster \ --namecluster-name\ --query "cluster.identity.oidc.issuer" \ --output text -
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" } } }] }' -
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 のインストールを確認するには
-
Helm リリースステータスが
deployedと表示されていることを確認します。helm list -n amazon-cloudwatch -
オペレーターポッドが実行されていることを確認します。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability -
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/ |
コンテナログの 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 統合を設定するには
-
cert-manager がクラスターにインストールされていることを確認します。
kubectl get pods -n cert-manager -
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.name と admissionWebhooks.certManager.issuerRef.kind を設定します。
チャートをアップグレードする
Helm チャートをアップグレードして新しい設定値を適用するか、新しいチャートバージョンに更新します。
Helm チャートをアップグレードするには
-
Helm リポジトリを更新して、最新のチャートバージョンを取得します。
helm repo update -
アップグレードコマンドを希望する値で実行します。
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 -
アップグレードが正常に完了したことを確認します。
helm list -n amazon-cloudwatchリビジョン番号が増加し、ステータスが
deployedになる必要があります。
ヒント
アップグレード中に設定値が失われないようにするには、カスタム値を values.yaml ファイルに保存し、-f values.yaml フラグとともに渡します。
チャートをアンインストールする
クラスターから OTel Container Insights を削除するには、Helm リリースをアンインストールします。
Helm チャートをアンインストールするには
-
次のコマンドを実行してリリースをアンインストールします。
helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch -
必要に応じて、不要になった名前空間があれば削除します。
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 でメトリクスを確認するには
-
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
ナビゲーションペインで、[Container Insights] を選択します。
-
クラスターがクラスターリストに表示され、インフラストラクチャメトリクスが入力されていることを確認します。
ログを確認する
クラスターにロググループが存在することを確認するには、次のコマンドを実行します。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 証明書に問題があるか、アクセス許可が不十分であるため、オペレーターポッドを起動できません。
解決策: この問題を解決するには、次の手順に従います。
-
証明書関連のエラーがないかオペレーターポッドログを確認します。
kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50 -
名前空間にウェブフック TLS シークレットが存在することを確認します。
kubectl get secrets -n amazon-cloudwatch | grep webhook -
cert-manager を使用する場合は、
CertificateリソースのステータスがReadyであることを確認します。kubectl get certificate -n amazon-cloudwatch -
証明書が見つからないか無効である場合は、チャートをアンインストールして再インストールし、証明書を再生成します。
helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch
すべてのノードではスケジュールされていないエージェントポッド
症状: エージェント DaemonSet は、クラスター内のノード数よりも少ないポッドを表示します。
原因: ノードテイント、リソース制約、またはノードセレクタにより、エージェントポッドが特定のノードでスケジューリングできなくなります。
解決策: この問題を解決するには、次の手順に従います。
-
スケジューリングの問題がないか DaemonSet のステータスを確認します。
kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent -
スケジュールされていないポッドをチェックし、そのイベントを表示します。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running -
ノードにテイントがある場合は、Helm チャート値に許容範囲を追加します。例えば、すべてのテイントを許容するには、次のフラグを使用してチャートをアップグレードします。
helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists" -
エージェントポッドがすべてのノードで実行されていることを確認します。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide