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

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

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

VM インスタンスが実行中であり、ログがシリアルポートごとに最新の 1 MB の出力に制限されている場合のみ、GCP Console、gcloud ツール、API からシリアルポートの出力にアクセスできます。

Stackdriver でシリアルポート出力ロギングを有効にすると、ログは 30 日間保持されます。また Stackdriver では、毎月最初の 50 GB のロギングが無料で提供されます。詳細については、Stackdriver の料金をご覧ください。

始める前に

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

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

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

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

プロジェクト レベルでserial-port-logging-enabletrue に設定されている場合、プロジェクト内のすべての VM インスタンスはその設定を継承します。VM インスタンス レベルで true に設定されている場合は、プロジェクトの設定に関係なく、その VM でのみこの機能が有効になります。

逆に、プロジェクトまたはインスタンスでシリアルポート出力のロギングを無効にするには、serial-port-logging-enable メタデータ値を false に設定します。このメタデータがプロジェクト レベルで false に設定されている場合、プロジェクト内のすべてのインスタンスで、Stackdriver へのシリアルポート出力のロギングが無効になります。インスタンス レベルで false に設定すると、プロジェクトの設定にかかわらず、その VM でのみシリアルポートのロギングが無効になります。

メタデータの設定は Google Cloud Platform Console、gcloud ツールまたは API で行います。詳しくは、カスタム メタデータの設定をご覧ください。

たとえば、次の gcloud コマンドを使用すると、既存のインスタンスで Stackdriver のシリアルポート出力ロギングを有効にできます。組織ポリシーでこの構成が許可されていない場合、コマンドは失敗します。

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

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

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

除外フィルタ

Stackdriver で除外フィルタを作成して、ログビューアから特定のシリアルポートのエントリを削除できます。たとえば、プロジェクト レベルで serial-port-logging-enable=true を指定すると、次のような高度なフィルタを使用して、特定の VM インスタンスのシリアルポート出力ロギングを無効にできます。

logName = "projects/google.com:serial-output-logging-demo/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]"

組織ポリシーの設定

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

constraints/compute.disableSerialPortLoggingtrue に設定してシリアルポートのロギングを無効にしても、遡って適用することはできません。メタデータで Stackdriver へのシリアルポート ロギングが有効になっている既存の VM インスタンスは、メタデータをリセットするまで、Stackdriver へのロギングを継続します。

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

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

Console

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

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

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

gcloud

gcloud 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 回の試行で返せないほど長かったときに、その出力を継続して取得するには、このフラグを使用します。

API

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

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

Stackdriver

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

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

  3. 起動エージェントのログを表示する VM インスタンスを選択します。
  4. [ログ] で、[Stackdriver Logging] をクリックして Stackdriver のログを表示します。

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

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

  7. 基本的なフィルタリングや高度なフィルタリングなど、詳細については、ログの表示に関する Stackdriver のドキュメントをご覧ください。

非 UTF8 文字の処理

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

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント