CloudWatch Observability EKS add-onでEKSのメトリクスとログ収集

2023年12月28日

Amazon EKS

CloudWatch Observability EKS add-on を試してみたので備忘録。これまで EKS のメトリクスを CloudWatch に送信するには、Quick Start setup for Container Insights on Amazon EKS and Kubernetes - Amazon CloudWatch を参考に CloudWatch Agent と Fluentd を手動でインストールして管理する必要があったのですが、それらが add-on にパッケージ化され、インストールやバージョンアップが楽になりました。

参考にしたサイトは公式ドキュメントの Install the CloudWatch agent by using the Amazon CloudWatch Observability EKS add-on - Amazon CloudWatch。EKS のバージョンは 1.27、eksctl は 0.167.0 で動作確認。

目次

  1. EKS にインストールできる add-on のバージョンを調べる
  2. EKS に add-on をインストールする
  3. add-on のインストールが失敗する場合は amazon-cloudwatch 名前空間の Pod が起動しているか確認する
  4. add-on のインストール後にできるようになること
  5. 細かいカスタマイズはできるか?

EKS にインストールできる add-on のバージョンを調べる

Managing Amazon EKS add-ons | Creating an add-on - Amazon EKS を参考に、EKS にインストールできる addon を調べます。

eksctl utils describe-addon-versions --kubernetes-version 1.27 | grep AddonName

実行すると、いくつか add-on が表示されます。その中に amazon-cloudwatch-observability add-on が見つかります。

...
"AddonName": "amazon-cloudwatch-observability",
...

インストール可能な add-on のバージョンを調べます。

eksctl utils describe-addon-versions --kubernetes-version 1.27 --name amazon-cloudwatch-observability | grep AddonVersion

以下のバージョンが出力されました。今回は v1.2.0-eksbuild.1 をインストールします。

"AddonVersions": [
        "AddonVersion": "v1.2.0-eksbuild.1",
        "AddonVersion": "v1.1.1-eksbuild.1",

EKS に add-on をインストールする

公式ドキュメントによると、add-on をインストールする前に IAM Role による権限設定が必要です。Option 2: Install using IAM service account role による方法が権限の範囲が小さくなるので良いでしょう。

公式ドキュメントに書かれている eksctl による一連のコマンドでインストールするのではなく、設定ファイルに add-on と IAM Role を記載してインストールをします。このようにすると、後から見たときに設定がすぐに分かるのでオススメです。設定ファイル例は以下の通り。仕様は Config file schema - eksctl を参照。

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-eks
  region: ap-northeast-1
  version: "1.27"

iam:
  withOIDC: true

addons:
  - name: amazon-cloudwatch-observability
    version: v1.2.0-eksbuild.1
    attachPolicyARNs:
      - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
      - arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess

OpenID Connect (OIDC) provider が設定されていない場合は以下のコマンドで設定をしてから

eksctl utils associate-iam-oidc-provider -f my-eks-config.yaml --approve

以下のコマンドで add-on をインストールします。

eksctl create addon -f my-eks-config.yaml

add-on のインストールが失敗する場合は amazon-cloudwatch 名前空間の Pod が起動しているか確認する

eksctl create addon コマンドは通常はすぐに完了しますが、私の環境ではなかなか完了せずに、タイムアウトをしてしまいました。AWS マネジメントコンソールでは add-on のステータスは Creating から先に進まず、最終的に install-failed のような失敗ステータスになりました。

このような場合は、amazon-cloudwatch namespace で Pod がすべて起動しているかどうか確認してみてください。

kubectl get pods -n amazon-cloudwatch

うまくいっている場合は以下のような結果が返ってきます。

NAME                                                              READY   STATUS    RESTARTS   AGE
amazon-cloudwatch-observability-controller-manager-a1237456abc7   1/1     Running   0           1d
cloudwatch-agent-abcde                                            1/1     Running   0           1d
cloudwatch-agent-fghij                                            1/1     Running   0           1d
fluent-bit-kl1m2                                                  1/1     Running   0           1d
fluent-bit-op3q4                                                  1/1     Running   0           1d

私の場合はいくつかの Pod が Node のリソース不足により起動していませんでした。Node のリソースを調整し、すべての Pod を起動させて再度インストールを試みたところ、インストールが成功しました。

add-on のインストール後にできるようになること

  • EKS で起動しているすべての Pod のメトリクスが CloudWatch に送信されるようになります。CloudWatch Metrics の ContainerInsights の名前空間から各種メトリクスが確認できます。
  • メトリクスを一覧で確認ができるダッシュボードが利用できるようになります。CloudWatch Insights の Container Insights から確認ができます。
  • EKS のログが CloudWatch Logs に送信されるようになります。/aws/containerinsights/<EKS名>/のロググループから確認できます。

細かいカスタマイズはできるか?

CloudWatch に送信されるメトリクスやログは、デフォルトの状態ではすべて送信されます。これらを制限したかったのですが、ドキュメントにはカスタマイズについて詳しく書かれていませんでした。

(Optional) Additional configuration によると、CloudWatch agent configuration を上書きすることでカスタマイズができそうでしたが、細かいことは書かれていなかったので、CloudWatch agent のドキュメントを確認する予定です。カスタマイズ方法がわかったら追記します。

-技術ブログ
-