Container-Optimized OS での Cloud Logging の使用

Container-Optimized OS には、一部のシステムログとコンテナログを Cloud Logging にエクスポートする Logging エージェントが含まれています。Container-Optimized OS 101 までは、x86 ベースの Container-Optimized OS イメージで、Fluentd をベースとするコンテナ化された Logging エージェントが使用されていました。Container-Optimized OS 105 では、代替の Logging エージェント実装である Fluent Bit の提供が開始されました。現行の Container-Optimized OS 109 では、Fluent Bit の Logging エージェントがデフォルトで使用されます。以前の Logging エージェント(Fluentd)は、Container-Optimized OS 113 から除外されます。

Arm ベースの Container-Optimized OS イメージのすべてのバージョンには Fluent Bit Logging エージェントが提供されます。

Logging エージェントを有効にする

Logging エージェントはデフォルトで無効になっています。この機能は、新しいインスタンスの作成時や既存のインスタンスの更新時に有効にできます。

アクセスの要件

Cloud Logging では、適切なアクセス権を付与するために使用できる IAM ロールが用意されています。プロジェクトのログを表示するには、roles/logging.viewer ロールを保持し、アプリケーションにログの書き込み権限を付与する必要があります。この権限を付与するには、IAM ロール roles/logging.logWriter をアプリケーションのサービス アカウントに割り当てます。

権限とロールの詳細については、事前定義ロールをご覧ください。

Logging エージェントを有効にしたインスタンスを作成する

コンソール

fluent-bit Logging エージェントを有効にして Container-Optimized OS で Compute Engine インスタンスを実行するには、次の手順を行います。

  1. Google Cloud コンソールで Compute Engine インスタンス作成ページを開きます。

    新しい Compute Engine インスタンスの作成

  2. [名前] でインスタンスの名前を指定します。

  3. [ブートディスク] セクションで、Container-Optimized OS イメージを選択します。

  4. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、追加のオプションを展開します。

  5. [管理] タブで、[メタデータ] セクションまでスクロールします。キーgoogle-logging-enabled に、true に設定して、新しいメタデータ エントリを追加します。

  6. 必要に応じて、ユースケースにその他のオプションを指定します。詳細については、インスタンスの作成と構成をご覧ください。

  7. [作成] をクリックし、インスタンスを作成して起動します。

gcloud

Logging エージェントを有効にして Container-Optimized OS で Compute Engine インスタンスを実行するには、gcloud compute instances create コマンドを使用して、メタデータに google-logging-enabled=true を含めます。次に例を示します。

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --zone compute-zone \
    --metadata google-logging-enabled=true

以下のように置き換えます。

  • instance-name: VM インスタンスの名前。
  • image-name: インスタンスの Container-Optimized OS イメージの名前。たとえば、--image=cos-113-18244-85-29 です。
  • compute-zone:インスタンスのコンピューティング ゾーン

gcloud コマンドの詳細については、gcloud compute instances create のリファレンス ドキュメントをご覧ください。 Container-Optimized OS インスタンスの作成の詳細については、インスタンスの作成と構成をご覧ください。

Logging エージェントを選択する

x86 ベースの Container-Optimized OS 105 イメージと Container-Optimized OS 109 イメージでは、それぞれ 2 種類の Logging エージェント実装(Fluentd(旧バージョンの場合)と Fluent Bit)を使用します。Container-Optimized OS 105 ではデフォルトで Fluentd を使用し、Container-Optimized OS 109 ではデフォルトで Fluent Bit を使用します。google-logging-use-fluentbit のメタデータ エントリを使用するとデフォルトの動作を変更できます。

Container-Optimized OS 105 で Fluent bit Logging エージェントを使用するには、google-logging-use-fluentbit の値を true に設定します。

Container-Optimized OS 109 で Fluentd Logging エージェントを使用するには、google-logging-use-fluentbit の値を false に設定します。

プロジェクト メタデータで Logging エージェントを有効にする

マイルストーン 97 以降、Logging はプロジェクト メタデータで有効にできます。

  gcloud compute project-info add-metadata \
    --metadata google-logging-enabled=true

アクセスログ

コンソール

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. ログのアクセス元である Container-Optimized OS インスタンスの名前をクリックします。

  3. [ログ] セクションで、Cloud Logging をクリックします。

  4. これによって、指定したインスタンスのログ エクスプローラが開きます。詳細については、ログ エクスプローラの使用をご覧ください。

gcloud

ログにアクセスするには、gcloud logging read コマンドを使用します。次に例を示します。

gcloud logging read \
"resource.type=gce_instance AND resource.labels.instance_id=instance-id" \
    --limit 10 \
    --format json \
    --freshness 30d

以下のように置き換えます。

  • instance-id: VM インスタンスの ID。

このコマンドは、instance-id を使用して VM インスタンスからログを読み取ろうとします。この際、過去 30 日間の JSON 形式の 10 件のログに限定されます。

gcloud コマンドの詳細については、gcloud logging read のリファレンス ドキュメントをご覧ください。

どのように機能するのか?

このロギング エージェントは、デフォルトで特定のシステム クリティカル サービスやユーザー アプリケーション コンテナから Cloud Logging バックエンドにログを送信するよう構成されています。たとえば、Docker コンテナのログ、選択した systemd サービス、監査ログ、ジャーナル ログエラーなどです。デフォルトの完全なロギング構成については、Container-Optimized OS 固有の構成ソース(x86 イメージArm イメージ)をご覧ください。

Container-Optimized OS 105 以前の x86 イメージの場合、ロギング エージェントは Google Cloud Observability の以前のコンテナ化 Logging エージェントです。ロギング エージェントを起動する Docker コマンドは、Container-Optimized OS ソースの stackdriver-logging.service で定義されています。実行されるコンテナ化されたエージェントのバージョンは、Container-Optimized OS ソースの app-admin/stackdriver ディレクトリに定義されています。

すべてのバージョンの ARM イメージと Container-Optimized OS 109 以降の x86 イメージの場合、Logging エージェントは Fluent Bit という組み込みの OS パッケージになります。エージェントは OS に組み込まれ、OS イメージとともに更新されます。

既知の制限事項

gcplogs ドライバとの互換性

milestone 89 以降、Container-Optimized OS に含まれている Logging エージェントが有効で、1 つ以上のコンテナに対して Docker gcplogs ロギング ドライバが有効になっている場合は、含まれている Logging エージェントによって過度の警告ログが出力される場合があります。これにより、ログノイズが発生したり、Cloud Logging 関連の料金が増加する場合があります。

回避手段は、gcplogs を Docker ロギング ドライバとして使用せず、Container-Optimized OS で構成されたデフォルトのドライバを使用することです。Container-Optimized OS に含まれている Logging エージェントはコンテナログを Cloud Logging にエクスポートするため、両方のソリューションを同時に使用する必要はないことに留意してください。

Logging エージェント構成の互換性

Logging エージェントは x86 ベースの Container-Optimized OS イメージでは Fluentd ベースのコンテナとなり、Arm ベースの Container-Optimized OS イメージでは Fluent Bit バイナリとなります。2 つのエージェントの構成に互換性はありません。OS イメージに組み込まれているデフォルトのロギング構成のみを使用している場合、これは問題になりません。ただし、カスタム ロギング構成を使用している場合は、異なるアーキテクチャ ベースのイメージや、新しいバージョンの Container-Optimized OS にワークロードを移行する際に、中断が発生する可能性があります。

リファレンス

  • Google Cloud Observability の以前の Logging エージェントのドキュメント。Container-Optimized OS に含まれるコンテナ化された Logging エージェントは従来の Logging エージェントのサブセットであるため、このドキュメントでは Container-Optimized OS の範囲外にエージェントに関する一般的なコンテキストを説明しています。
  • Google Cloud Observability のドキュメント。Google Cloud Observability のドキュメントのホームページ。コンテキストとして便利です。