メインコンテンツまでスキップ

Podロギング

始める前に

このセクションの環境を準備してください:

~$prepare-environment observability/logging/pods

これにより、ラボ環境に以下の変更が適用されます:

  • Amazon EKSクラスターにAWS for Fluent Bitをインストール

これらの変更を適用するTerraformはこちらで確認できます。

モダンアプリケーションの設計原則を提供するTwelve-Factor Appマニフェストによれば、コンテナ化されたアプリケーションはログをstdoutとstderrに出力するべきです。これはKubernetesでもベストプラクティスとされており、クラスターレベルのログ収集システムはこの前提に基づいて構築されています。

Kubernetesのロギングアーキテクチャは、3つの異なるレベルを定義しています:

  • 基本レベルのロギング:kubectlを使用してPodのログを取得する機能(例:kubectl logs myapp - myappはクラスターで実行されているPod)
  • ノードレベルのロギング:コンテナエンジンがアプリケーションのstdoutstderrからログをキャプチャし、ログファイルに書き込みます。
  • クラスターレベルのロギング:ノードレベルのロギングを基盤として、各ノードでログキャプチャエージェントが実行されます。エージェントはローカルファイルシステムからログを収集し、ElasticsearchやCloudWatchなどの集中ログ保存先に送信します。エージェントは次の2種類のログを収集します:
    • ノード上のコンテナエンジンによってキャプチャされたコンテナログ。
    • システムログ。

Kubernetes自体は、ログを収集して保存するためのネイティブソリューションを提供していません。コンテナランタイムを設定して、ローカルファイルシステム上にJSON形式でログを保存します。Dockerのようなコンテナランタイムはコンテナのstdoutとstderrストリームをロギングドライバーにリダイレクトします。Kubernetesでは、コンテナログはノード上の/var/log/pods/*.logに書き込まれます。Kubeletとコンテナランタイムは独自のログを/var/logsまたはsystemdを使用するオペレーティングシステムではjournaldに書き込みます。その後、Fluentdのようなクラスター全体のログコレクターシステムがノード上のこれらのログファイルを監視し、保存のためにログを送信できます。これらのログコレクターシステムは通常、ワーカーノード上でDaemonSetとして実行されます。

このラボでは、EKSのノードからログを収集してCloudWatch Logsに送信するためのログエージェントの設定方法を示します。

備考

CDK Observability Acceleratorを使用している場合は、AWS for Fluent Bit Addonをチェックしてください。AWS for FluentBitアドオンは、CloudWatch、Amazon Kinesis、およびAWS OpenSearchを含む複数のAWS送信先にログを転送するように構成できます。