Amazon EKS コントロールプレーンのログ記録 - Amazon EKS

Amazon EKS コントロールプレーンのログ記録

Amazon EKS コントロールプレーンのログ記録により、アカウント内で Amazon EKS コントロールプレーンから CloudWatch Logs に対し、監査および診断ログを直接送れるようになります。これらのログを使用すると、クラスターの保護と実行が容易になります。必要なログタイプを正確に選択することで、CloudWatch 内で各 Amazon EKS クラスターのためのグループに対し、ログストリームの形態でログを送信できます。詳細については、「Amazon CloudWatch logging」(Amazon CloudWatch ログ記録) を参照してください。

Amazon EKS コントロールプレーンのログ記録の使用を開始するには、新規または既存の Amazon EKS クラスターごとに有効にするログタイプを選択します。クラスターごとに各ログタイプを有効または無効にするには、AWS Management Console、AWS CLI (バージョン 1.16.139 以降)、または Amazon EKS API を使用します。有効化したログタイプのログが、Amazon EKS クラスターから同じアカウントの CloudWatch Logs に自動的に送信されるようになります。

Amazon EKS コントロールプレーンのログ記録を使用すると、実行しているクラスターごとに Amazon EKS の標準料金が発生します。クラスターから CloudWatch Logs に送信されるすべてのログに対して、CloudWatch Logs のデータ取り込みおよび保存に関する標準料金が発生します。また、Amazon EC2 インスタンスや Amazon EBS ボリュームなど、クラスターの一部としてプロビジョニングしている AWS リソースに対しても料金が発生します。

以下のクラスターコントロールプレーンのログタイプが使用可能です。各ログタイプは、Kubernetes コントロールプレーンのコンポーネントに対応しています。これらのコンポーネントの詳細については、Kubernetes ドキュメントの「Kubernetes コンポーネント」を参照してください。

API サーバー (api)

クラスターの API サーバーは、Kubernetes API を公開するコントロールプレーンコンポーネントです。クラスターを起動する際、またはその直後に API サーバーのログを有効にすると、ログには、API サーバーの起動に使用された API サーバーフラグが含まれます。詳細については、「Kubernetes ドキュメント」の「kube-apiserver」と「audit policy」(監査ポリシー) を参照してください。

監査 (audit)

Kubernetes 監査ログは、クラスターに影響を与えた個々のユーザー、管理者、またはシステムコンポーネントの記録を提供します。詳細については、Kubernetes ドキュメントの「Auditing」(監査) を参照してください。

Authenticator (authenticator)

Authenticator ログは、Amazon EKS に固有です。これらのログは、IAM 認証情報を使用した Kubernetes [ロールベースのアクセスコントロール] (RBAC) 認証のために Amazon EKS が使用する、コントロールプレーンコンポーネントを示します。詳細については、「クラスターの管理」を参照してください。

コントローラーマネージャー (controllerManager)

コントローラーマネージャーは、Kubernetes に付属するコアコントロールループを管理します。詳細については、Kubernetes ドキュメントの「kube-controller-manager」を参照してください。

スケジューラ (scheduler)

スケジューラコンポーネントは、クラスター内で Pods を実行するタイミングと場所を管理します。詳細については、Kubernetes ドキュメントの「kube-scheduler」を参照してください。

コントロールプレーンログの有効化と無効化

デフォルトでは、クラスターコントロールプレーンのログは CloudWatch Logs に送信されません。クラスターのログを送信するには、各ログタイプを個別に有効にする必要があります。CloudWatch Logs で設定された取り込み、アーカイブストレージ、およびデータスキャンレートが、有効化されたコントロールプレーンログに適用されます。詳細については、「CloudWatch 料金表」を参照してください。

コントロールプレーンのログ記録設定を更新するために、Amazon EKS は各サブネットで最大 5 つの使用可能な IP アドレスを必要とします。ログタイプを有効にすると、ログの詳細レベル 2 でログが送信されます。

AWS Management Console
AWS Management Console を使用してコントロールプレーンログを有効または無効にするには
  1. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

  2. クラスター名を選択すると、そのクラスターの情報を表示されます。

  3. [オブザーバビリティ] タブを選択します。

  4. [コントロールプレーンのロギング] セクションで、[ロギングの管理] を選択します。

  5. ログタイプごとに、そのログタイプを [有効] にするか [無効] にするかを選択します。デフォルトでは、それぞれのログタイプは無効化されています。

  6. [変更を保存] を選択して終了します。

AWS CLI
AWS CLI を使用してコントロールプレーンログを有効または無効にするには
  1. 以下のコマンドを使用して、AWS CLI のバージョンを確認します。

    aws --version

    AWS CLI バージョンが 1.16.139 より前である場合は、まず最新バージョンに更新する必要があります。AWS CLI のインストールまたはアップグレードについては、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interface のインストール 」を参照してください。

  2. 次の AWS CLI コマンドを使用して、クラスターのコントロールプレーンログのエクスポート設定を更新します。my-cluster をクラスター名に置き換え、目的のエンドポイントアクセス値を指定します。

    注記

    次のコマンドは、使用可能なすべてのログタイプを CloudWatch Logs に送信します。

    aws eks update-cluster-config \ --region region-code \ --name my-cluster \ --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

    出力例は次のとおりです。

    {
        "update": {
            "id": "883405c8-65c6-4758-8cee-2a7c1340a6d9",
            "status": "InProgress",
            "type": "LoggingUpdate",
            "params": [
                {
                    "type": "ClusterLogging",
                    "value": "{\"clusterLogging\":[{\"types\":[\"api\",\"audit\",\"authenticator\",\"controllerManager\",\"scheduler\"],\"enabled\":true}]}"
                }
            ],
            "createdAt": 1553271814.684,
            "errors": []
        }
    }
  3. 次のコマンドでログ設定更新のステータスをモニタリングします。その際、以前のコマンドで返されたクラスター名と更新 ID を使用します。ステータスが Successful と表示されたら、更新は完了です。

    aws eks describe-update \ --region region-code\ --name my-cluster \ --update-id 883405c8-65c6-4758-8cee-2a7c1340a6d9

    出力例は次のとおりです。

    {
        "update": {
            "id": "883405c8-65c6-4758-8cee-2a7c1340a6d9",
            "status": "Successful",
            "type": "LoggingUpdate",
            "params": [
                {
                    "type": "ClusterLogging",
                    "value": "{\"clusterLogging\":[{\"types\":[\"api\",\"audit\",\"authenticator\",\"controllerManager\",\"scheduler\"],\"enabled\":true}]}"
                }
            ],
            "createdAt": 1553271814.684,
            "errors": []
        }
    }

クラスターのコントロールプレーンログの表示

Amazon EKS クラスターのいずれかのコントロールプレーンログタイプを有効にすると、それらを CloudWatch コンソールで表示できるようになります。

CloudWatch でログを表示、分析、および管理する方法については、Amazon CloudWatch Logs ユーザーガイドを参照してください。

CloudWatch コンソールでクラスターのコントロールプレーンログを表示するには
  1. CloudWatch コンソールを開きます。このリンクでは、現在使用可能なロググループが表示され、プレフィックス /aws/eks でフィルタリングされます。

  2. ログを表示するクラスターを選択します。ロググループの名前の形式は /aws/eks/my-cluster/cluster です。

  3. 表示するログストリームを選択します。次のリストで、各ログタイプのログストリーム名の形式について説明します。

    注記

    ログストリームデータが大きくなるにつれて、ログストリーム名のローテーションが行われます。特定のログタイプのログストリームが複数存在する場合、最新のログストリームを表示するには、[最終のイベント時刻] が最新のログストリーム名を見つけ出します。

    • Kubernetes API サーバーコンポーネントログ (api) - kube-apiserver-1234567890abcdef01234567890abcde

    • 監査 (audit)kube-apiserver-audit-1234567890abcdef01234567890abcde

    • 認証システム (authenticator)authenticator-1234567890abcdef01234567890abcde

    • コントローラーマネージャー (controllerManager)kube-controller-manager-1234567890abcdef01234567890abcde

    • スケジューラ (scheduler)kube-scheduler-1234567890abcdef01234567890abcde

  4. ログストリームのイベントを確認してください。

    たとえば、kube-apiserver-1234567890abcdef01234567890abcde のトップを表示すると、クラスターの初期 API サーバーが表示されます。

    注記

    ログストリームの先頭に API サーバーログが表示されない場合は、サーバーで API サーバーログ記録を有効にする前に API サーバーのログファイルがローテーションされた可能性があります。API サーバーのログ記録が有効になる前にローテーションされたログファイルは、CloudWatch にエクスポートできません。

    ただし、同じ Kubernetes バージョンで新しいクラスターを作成し、クラスターの作成時に API サーバーログを有効にすることができます。同じプラットフォームバージョンを持つクラスターでは、同じフラグが有効になるため、フラグは新しいクラスターのフラグと一致する必要があります。CloudWatch で新しいクラスターのフラグを確認し終えたら、新しいクラスターを削除します。