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

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

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

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

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

始める前に

Stackdriver のシリアルポート ロギングの有効化と無効化

この機能を有効にするには、serial-port-logging-enable メタデータ属性を true に設定します。この Key-Value メタデータをプロジェクト レベルで設定すると、プロジェクト内のすべてのインスタンスで、Stackdriver のシリアルポート出力ロギングが有効になります。VM インスタンス レベルで設定すると、プロジェクト設定にかかわらず、その 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-enable を false に設定します。

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]"

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

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

非 UTF8 文字の処理

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

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

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

Compute Engine ドキュメント