Container-Optimized OS での Cloud Logging の使用

Container-Optimized OS には、一部のシステムログとコンテナログを Cloud Logging にエクスポートする Logging エージェントが含まれています。Container-Optimized OS 101 まで、x86 ベースの Container-Optimized OS イメージは、fluentd に基づくコンテナ化されたロギング エージェントを使用していました。Container-Optimized OS 105 は、代替ロギング エージェントの実装である fluent-bit の配布を開始しました。Container-Optimized OS 109 では、fluent-bit ロギング エージェントがデフォルトです。Container-Optimized OS 113 では、以前の Logging エージェント fluentd が削除されます。

Arm ベースの Container-Optimized OS イメージのすべてのバージョンで、fluent-bit ロギング エージェントが配布されます。

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

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

Access Requirements

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-family cos-stable \
    --image-project cos-cloud \
    --zone compute-zone \
    --metadata google-logging-enabled=true

以下を置き換えます。

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

ロギング エージェントの選択

x86 ベースの Container-Optimized OS 105 イメージと 109 イメージには、ロギング エージェントの 2 つの実装(fluentd(レガシー)と fluent-bit)が含まれています。Container-Optimized OS 105 はデフォルトで fluentd を使用し、Container-Optimized OS 109 はデフォルトで fluent-bit を使用しています。google-logging-use-fluentbit メタデータ エントリを使用して、デフォルトの動作を変更できます。

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

Container-Optimized OS 109 で fluentd ロギング エージェントを使用するには、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 ディレクトリに定義されています。

Container-Optimized OS 109 以降のすべてのバージョンの Arm イメージと 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 イメージの fluentd ビットのバイナリです。2 つのエージェントの構成に互換性はありません。OS イメージに組み込まれているデフォルトのロギング構成のみを使用している場合、これは問題になりません。ただし、カスタム ロギング構成では、別のアーキテクチャまたは Container-Optimized OS の新しいバージョンに基づいてワークロードを移行する際に、障害が発生する可能性があります。

リファレンス

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