シリアルポート出力の表示

仮想マシン(VM)インスタンスには 4 つの仮想シリアルポートがあります。インスタンスのオペレーティング システム、BIOS、その他のシステムレベルのエンティティは多くの場合、シリアルポートに出力を書き込みます。これにより、クラッシュ、ブートの失敗、起動の問題、シャットダウンの問題などのトラブルシューティングにシリアルポートの出力を活用できます。

このページでは、インスタンスが停止または削除された後でも、Cloud Logging を使用してシリアルポートの出力を保持するなど、シリアルポートの出力を表示する方法について説明します。インスタンスの実行中にコマンドをシリアルポートに送信する必要がある場合は、シリアル コンソールとのやり取りをご覧ください。

シリアルポート出力には、 Google Cloud コンソール、gcloud CLI、REST からアクセスできます。ただし、アクセスできるのは VM インスタンスが実行されている間のみです。ログは、ポートごとに最新の 1 MB の出力に制限されます。

シリアルポート出力のロギングを有効にすると、Cloud Logging は毎月 50 ギビバイト(GiB)のロギングを無償で提供し、ログを 30 日間保持します。

始める前に

  • Cloud Logging でシリアルポート出力をロギングする場合は、Cloud Logging に習熟します。
  • まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    2. Set a default region and zone.

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

シリアルポート出力のロギングを有効または無効にする

インスタンスがシリアルポートの出力を Cloud Logging に送信するかどうかを制御するには、プロジェクトまたはインスタンス レベルでメタデータを設定します。また、組織ポリシーを設定すると、組織内のすべてのユーザーでこの機能を無効にできます。

プロジェクトとインスタンス メタデータの設定

デフォルトでは、Cloud Logging へのシリアルポート出力のロギングは無効になっています。Cloud Logging へのシリアルポート出力のロギングが組織で制約されていない場合は、serial-port-logging-enable メタデータ エントリを true または false に設定して、プロジェクトと個別の VM インスタンスでこの機能を有効または無効にできます。

プロジェクト全体のメタデータ エントリを設定している場合は、プロジェクト内のすべての VM インスタンスがその設定を暗黙的に継承します。インスタンス メタデータ エントリを設定すると、プロジェクトの設定に関係なく、対象の VM でのみメタデータ エントリが有効になります。

メタデータ エントリを設定するには、 Google Cloud コンソール、gcloud CLI、Compute Engine API のいずれかを使用します。詳細については、カスタム メタデータの設定をご覧ください。

たとえば、次の gcloud CLI コマンドを使用すると、プロジェクトの Cloud Logging へのシリアルポート出力のロギングが有効になります。

gcloud compute project-info add-metadata \
    --metadata serial-port-logging-enable=true

同様に、次の gcloud CLI コマンドを使用すると、特定のインスタンスで Cloud Logging へのシリアルポート出力のロギングが有効になります。

gcloud compute instances add-metadata INSTANCE_NAME \
    --metadata serial-port-logging-enable=true

Cloud Logging へのシリアルポート出力のロギングを無効にするには、serial-port-logging-enablefalse に設定します。

gcloud compute instances add-metadata INSTANCE_NAME \
    --metadata serial-port-logging-enable=false

除外フィルタ

Cloud Logging で除外フィルタを作成して、ログ エクスプローラから特定のシリアルポートのエントリを削除できます。たとえば、プロジェクト全体のメタデータ エントリが serial-port-logging-enable=true に設定されている場合は、高度なフィルタを使用して、特定の VM インスタンスでシリアルポート出力のロギングを無効にできます。

logName = "projects/PROJECT_ID/logs/serialconsole.googleapis.com%2Fserial_port_1_output"
resource.type = "gce_instance"
resource.labels.instance_id != "INSTANCE_1_ID"
resource.labels.instance_id != "INSTANCE_2_ID"

組織ポリシーの設定

組織全体で Cloud Logging へのシリアルポート出力のロギングを無効にするには、 Google Cloud リソースの特定の構成を制限する組織のポリシーを設定します。具体的には、ブール型制約 constraints/compute.disableSerialPortLogging を設定します。詳細については、組織のポリシーの作成と管理をご覧ください。

constraints/compute.disableSerialPortLoggingtrue に設定してシリアルポート ロギングを無効にする処理が遡って適用されることはありません。メタデータ エントリで Cloud Logging へのシリアルポート ロギングが有効になっている既存の VM インスタンスでは、それらのインスタンスのメタデータをリセットしない限り、引き続き Cloud Logging にログが記録されます。

この組織の制約を true に設定すると、組織内のどのインスタンスでも、Cloud Logging へのシリアルポート出力のロギングを有効にするようにインスタンスまたはプロジェクトのメタデータを設定できなくなります。

シリアルポート出力の表示

コンソール

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

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

  2. シリアルポート出力を表示する VM インスタンスを選択します。

  3. [ログ] で、[シリアルポート 1]、[2]、[3]、[4] をクリックします。システムレベルのエンティティは通常、シリアル コンソールとも呼ばれる最初のシリアルポート(ポート 1)を使用します。

gcloud

gcloud compute instances get-serial-port-output コマンドを使用します。

gcloud compute instances get-serial-port-output INSTANCE_NAME \
  --port PORT \
  --start START \
  --zone ZONE

以下を置き換えます。

  • INSTANCE_NAME: インスタンスの名前。
  • PORT: 出力を表示する対象のポート番号(1234 のいずれか)。システムレベルのエンティティは通常、シリアル コンソールとも呼ばれる最初のシリアルポート(ポート 1)を使用します。デフォルトでは、最初のシリアルポートの出力が返されます。
  • START: 取得する最初のバイトのバイト インデックス(0 ベース)。前のリクエストの出力が長いために 1 回の試行で返されなかった場合に、その出力の取得を続行するには、このフラグを使用します。
  • ZONE: インスタンスのゾーン。

REST

API で、instances.getSerialPortOutput メソッドに対する get リクエストを作成します。

GET https://compute.googleapis.com/compute/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/serialPort

Cloud Logging

  1. Cloud Logging のシリアルポート ロギングを有効にします
  2. [VM インスタンス] ページに移動します。

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

  3. 起動エージェントのログを表示する VM インスタンスを選択します。

  4. [ログ] で [Cloud Logging] をクリックして、Cloud Logging のログを表示します。

    [Cloud Logging] をクリックして、Cloud Logging のログを表示します。

詳細(フィルタリングに関する情報など)については、ログ エクスプローラの使用をご覧ください。

非 UTF8 文字の処理

シリアルポート出力は、オープンソースの Abseil C ++ ライブラリの CHexEscape() メソッドを使用してエスケープされます。このため非 UTF8 文字は 16 進文字列としてエンコードされます。対応する CUnescape() メソッドを使用すると、シリアルポートに送信された出力をエンコードされていない状態で取得できます。