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


仮想マシン(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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、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 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: インスタンスのゾーン。

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

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

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

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

非 UTF8 文字の処理

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

一般的なシリアルポート エラー

シリアルポート出力で発生する可能性がある一般的なエラーの例を以下に示します。

IPv6 の構成でエラーが発生しました

IPv6 が構成されていない場合、OS ジャーナルログで次のエラーが発生することがあります。

ERROR addresses.go:301 Error configuring IPv6: Internet Systems Consortium DHCP Client 4.2.5

このエラーは無視してください。このエラーは VM に影響を与えません。