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

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

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

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

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

始める前に

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

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

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

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

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

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

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

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

同様に、次の gcloud ツールコマンドを使用すると、特定のインスタンスで 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 へのシリアルポート出力のロギングを有効にするようにインスタンスまたはプロジェクトのメタデータを設定できなくなります。

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

Console

  1. Google Cloud Console で、[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: インスタンスのゾーン。

API

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 のログを表示します。

  5. [すべてのログ] プルダウン メニューを展開し、表示するシリアルポート出力を選択します。システムレベルのエンティティは通常、シリアル コンソールとも呼ばれる最初のシリアルポート(ポート 1)を使用します。ポートがプルダウン メニューに表示されない場合、使用可能な出力はありません。

  6. 必要であれば、[すべて] プルダウン メニューを展開して、表示したい重大度以下のログを非表示にします。たとえば、情報レベルを選択すると、デバッグレベルのログは表示されません。デバッグレベルのエントリは通常、起動時の BIOS で使用されます。

基本フィルタと高度なフィルタに関する情報など、詳細については、ログの表示をご覧ください。

非 UTF8 文字の処理

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