スキップしてコンテンツを表示

Amazon EKS クラスターの Container Insights に関する問題をトラブルシューティングする方法を教えてください。

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターに Amazon CloudWatch Container Insights を設定する際に、問題が発生します。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Container Insights のインストールを確認する

Amazon EKS クラスターに Container Insights が正しくインストールされているかどうかを確認するには、次のコマンドを実行します。

kubectl get pods -n amazon-cloudwatch

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

kubectl describe pod pod-name -n amazon-cloudwatch

注: pod-name は実際のポッド名に置き換えます。

コマンドの出力で [イベント] セクションを確認します。

CloudWatch ログを確認するには、次のコマンドを実行します。

kubectl logs pod-name  -n amazon-cloudwatch

CloudWatch Observability を Amazon EKS マネージドアドオンとしてインストールする

Amazon EKS アドオンを使用して拡張オブザーバビリティ Container Insights を Amazon EKS にインストールします。

注: EKS アドオン CloudWatch Observability は、Kubernetes バージョン 1.23 以降のみを実行する Amazon EKS クラスターで使用できます。

CloudWatch Observability をセルフマネージドアドオンとしてインストールするには、次の手順を実行します。

  1. cert-manager をインストールするには、次のコマンドを実行します。

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
  2. カスタムリソース定義 (CRD) をインストールするには、次のコマンドを実行します。

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl apply --server-side -f -
  3. CloudWatch コンテナエージェントオペレータをインストールするには、次のコマンドを実行します。

    ClusterName=my-cluster-name
    RegionName=my-cluster-region
    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -

AWS マネジメントコンソールに表示されないメトリクスのトラブルシューティング

AWS マネジメントコンソールに Container Insights のメトリクスが表示されない場合は、Container Insights のセットアップが完了していることを確認してください。

Container Insights で発生するエラーのトラブルシューティング

Unauthorized panic: Cannot retrieve cadvisor data from kubelet (kubelet から cadvisor データを取得できません)

この問題を解決するには、kubelet で Webhook 認証モードを有効にしてください。

Invalid endpoint エラー

エラーメッセージの例

"log": "2020-04-02T08:36:16Z E! cloudwatchlogs: code: InvalidEndpointURL, message: invalid endpoint uri, original error: &url.Error{Op:\"parse\", URL:\"https://logs.{{region_name}}.amazonaws.com/\", Err:\"{\"}, &awserr.baseError{code:\"InvalidEndpointURL\", message:\"invalid endpoint uri\", errs:[]error{(*url.Error)(0xc0008723c0)}}\n",

この問題を解決するには、コマンド内のプレースホルダー値をすべて置き換える必要があります。たとえば、cluster-nameregion-name に使用する情報は、AWS CLI を実行する際のデプロイに適切なものである必要があります。

クラスターのアップグレード後に、Amazon EKS または Kubernetes に関するポッドのメトリクスが表示されない

エラーメッセージの例

「W! No pod metric collected (ポッドのメトリクスは収集されませんでした)」

クラスターをアップグレードした後にポッドのメトリクスが見つからない場合は、ノード上のコンテナランタイムが想定どおりに動作しているかどうかを確認してください。

この問題を解決するには、デプロイマニフェストを更新し、コンテナ化したソケットをホストからコンテナにマウントします。

デプロイマニフェストの例

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cloudwatch-agent
  namespace: amazon-cloudwatch
spec:
  template:
    spec:
      containers:
        - name: cloudwatch-agent
# ...
          # Don't change the mountPath
          volumeMounts:
# ...
            - name: dockersock
              mountPath: /var/run/docker.sock
              readOnly: true
            - name: varlibdocker
              mountPath: /var/lib/docker
              readOnly: true
            - name: containerdsock # NEW mount
              mountPath: /run/containerd/containerd.sock
              readOnly: true
# ...
      volumes:
# ...
        - name: dockersock
          hostPath:
            path: /var/run/docker.sock
        - name: varlibdocker
          hostPath:
            path: /var/lib/docker
        - name: containerdsock # NEW volume
          hostPath:
            path: /run/containerd/containerd.sock

マニフェストの完全な例については、GitHub のウェブサイトで「cwagent-daemonset.yaml」を参照してください。

** Amazon EKS でボトルロケットを使用する際に、ポッドのメトリクスが表示されない**

エラーメッセージの例

「W! No pod metric collected (ポッドのメトリクスは収集されませんでした)」

Bottlerocket は、ホスト上の別のコンテナパスを使用します。Bottlerocket を使用する場合は、すべてのボリュームを Bottlerocket コンテナパスの場所に変更する必要があります。

コマンド例

volumes:
  # ...
    - name: containerdsock
      hostPath:
        # path: /run/containerd/containerd.sock
        # bottlerocket does not mount containerd sock at normal place
        # https://github.com/bottlerocket-os/bottlerocket/commit/91810c85b83ff4c3660b496e243ef8b55df0973b
        path: /run/dockershim.sock

Prometheus メトリクスの収集時に、CloudWatch エージェントからのログが想定を超えて増加する

この問題を解決するには、CloudWatch エージェントを利用可能な最新バージョンに更新してください。現在のバージョンを確認する方法については、「CloudWatch エージェントのバージョンに関する情報を特定する」を参照してください。最新バージョンをインストールする方法については、「CloudWatch エージェントのインストール」を参照してください。

CloudWatch エージェントで発生する CrashLoopBackoff エラー

この問題を解決するには、AWS Identity and Access Management (IAM) アクセス許可が正しく設定されていることを確認してください。

CloudWatch エージェントまたは Fluentd ポッドが保留状態に留まっている

ポッドが Pending 状態のままになっていたり、CloudWatch エージェントまたは Fluentd ポッドで FailedScheduling が発生していたりする可能性があります。この問題を解決するには、エージェントが必要とするコード量と RAM に応じて、ノードに十分なコンピューティングリソースがあることを確認します。

ポッドを記述するには、次のコマンドを実行します。

kubectl describe pod cloudwatch-agent-85ppg -n amazon-cloudwatch

fluent bit の設定マップが正しくデプロイされていない

この問題を解決するには、設定マップ fluent-bit-config が名前空間 amazon-cloudwatch に正しくデプロイされていることを確認してください。

エラーメッセージの例

[2024/10/02 11:16:42] [error] [config] inconsistent use of tab and space
[2024/10/02 11:16:42] [error] [config] error in /fluent-bit/etc/..2024_10_02_11_16_29.3759745087//application-log.conf:62: invalid indentation level
[2024/10/02 11:16:42] [error] configuration file contains errors, aborting.cwagent-daemonset.yaml
AWS公式更新しました 9ヶ月前
コメントはありません

関連するコンテンツ