Compute Engine を使用する場合の一般的なヒント


このページでは、Compute Engine を使用して問題が発生した場合に役立つヒントについて説明します。

特定の問題のトラブルシューティングのヘルプについては、次のいずれかのセクションをご覧ください。

別のレスポンス形式を表示する

Google Cloud CLI では、REST API 呼び出しを行うことにより、ほとんどのアクションが行われます。pretty 形式の結果には、特定のコマンドから返されたレスポンスの最も重要な情報しか表示されません。さまざまなレスポンス形式を表示するには、jsonyamltext などのさまざまな出力形式でレスポンスを表示する --format フラグを使用します。たとえば、インスタンスのリストを JSON 形式で表示するには以下のように --format json を使用します。

gcloud compute instances list --format json

gcloud compute のログを表示する

gcloud CLI は、$HOME/.config/gcloud/logs にあるクエリ可能なログファイルにログを作成して保存します。Linux ベースのオペレーティング システムで最新のログファイルを表示するには、次のコマンドを実行します。

$ less $(find ~/.config/gcloud/logs | sort | tail -n 1)

ログファイルには、gcloud CLI ツールを使用して送信されたすべてのリクエストとそのレスポンスに関する情報が含まれています。

gcloud CLI によって作成されたログファイルを自動的にパージするには、max_log_days プロパティを使用します。このプロパティは、削除するまでにログファイルを保持する最大日数を設定します。デフォルトの設定は 30 日間です。このプロパティ値を 0 に設定すると、ログのガベージ コレクションはオフになり、ログファイルは削除されません。

 gcloud config set core/max_log_days DAYS_TO_RETAIN_LOGS

gcloud CLI ファイル ロギングを無効にします。

ファイル $HOME/.config/gcloud/logs は、ローカル ファイル システム上のスペースを消費します。生成されるログの量により、ローカル ファイル システムの空きスペースが圧迫され、次のような問題が発生する可能性があります。

  • スペースの使用率がインスタンスで 100% に達する。
  • ローカル ファイル システムに新しいファイルを作成するためのスペースが残っていないため、gcloud CLI ロギング コマンドを実行できない。

gcloud CLI の動作を変更し、ファイルのロギングを無効にするには、次のように disable_file_logging プロパティを使用します。

 gcloud config set core/disable_file_logging True

リソース名を選択する

リソースの名前を選択する際には、Compute Engine のサポート ダッシュボードやオペレーション ダッシュボードにそれらの名前が表示される可能性があるので注意してください。そのため、リソース名には機密情報を含めないようにすることをおすすめします。

インターネットとの通信

以下の両方の条件が満たされる場合のみ、インスタンスはインターネットに直接アクセスできます。

Cloud NAT またはインスタンス ベースのプロキシ経由で接続することで、インターネットに間接的にアクセスすることもできます。ファイアウォール ルールの構成など、その他の考慮事項については、インターネット アクセスの要件をご覧ください。

アイドル状態の接続

Google Cloud VPC ネットワークでは、接続のコンセプトを持つ IP プロトコル(TCP など)に対して 10 分間の接続トラッキングが実装されます。確立済みの接続で 10 分以内にパケットの送受信が発生していれば、その接続に関連付けられた受信パケットは許可されます。接続のパケットが 10 分以上送受信されていない場合、アイドル状態の接続のトラッキング エントリが削除されます。接続のトラッキング エントリが削除された後、少なくとも 1 つの新しい送信パケットが送信されるまで、Google Cloud は追加の受信パケットを許可しません。この接続トラッキングは、すべての送信元と宛先(内部 IP アドレスと外部 IP アドレスの両方)に適用されます。

アイドル状態の接続を防ぐには、次の操作を行います。

  • オペレーティング システムの TCP keep-alive パラメータに 10 分未満の間隔を設定します。これにより、時間枠内に少なくとも 1 つのパケットが送信されます。

  • TCP 接続を開くアプリケーションで SO_KEEPALIVE オプションを有効にしても同じ結果になります。

次の例では、オペレーティング システムの TCP keep-alive パラメータを 1 分に設定しています。SO_KEEPALIVE を使用するように構成する方法については、ご使用のアプリケーションまたはソフトウェア ライブラリのドキュメントをご確認ください。

Linux


次のコマンドを実行します。

$ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5
再起動しても設定が失われないようにするには、設定を /etc/sysctl.conf ファイルに追加します。

追加情報については、Linux TCP Keepalive HOWTO をご覧ください。

macOS


次のコマンドを実行します。

$ sudo sysctl -w net.inet.tcp.always_keepalive=1 net.inet.tcp.keepidle=60000 net.inet.tcp.keepinit=60000 net.inet.tcp.keepintvl=60000

Windows


レジストリパス HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ で、DWORD データ型を使用して次の設定を追加します。設定がすでに存在する場合は値を編集します。

KeepAliveInterval: 1000
KeepAliveTime: 60000
TcpMaxDataRetransmissions: 10

Compute Engine に別の SSH ユーザーとしてアクセスする

gcloud compute では、既定で $USER 変数を使用して /etc/passwd ファイルにユーザーが追加されます。追加されたユーザーは、SSH を使用して仮想マシン インスタンスに接続できます。別のユーザーを指定するには、gcloud compute ssh コマンドを実行するときに --ssh-key-file PRIVATE_KEY_FILE フラグを使用します。次に例を示します。

gcloud compute ssh example-instance --ssh-key-file my-private-key-file

詳細については、gcloud リファレンス ドキュメントをご覧ください。

シリアル コンソールとのやり取り

インスタンスのシリアル コンソールへのインタラクティブ アクセスを有効にすると、シリアル コンソールからインスタンスに接続してトラブルシューティングを行うことができます。

詳しくは、シリアル コンソールとのやり取りをご覧ください。

カスタム イメージから作成されたインスタンスでパケットの断片化を回避する

Linux イメージと Windows Server イメージの場合、VPC ネットワークの最大伝送単位(Maximum Transmission Unit、MTU)は 1460 バイトです。ただし、ネットワーク MTU は変更できます。 詳細については、VPC のドキュメントの最大伝送単位の概要をご覧ください。

UDP ソケットで Compute Engine インスタンスと通信するクライアント アプリケーションを作成する際に、UDP データグラムのデータ最大サイズがネットワーク MTU よりも 28 バイト少なく設定されている場合、断片化を回避できます。たとえば、ネットワークの MTU が 1,460 バイトの場合は、パケットあたり 1,432 バイトまでの UDP データは断片化することなく送信できます。ネットワークの MTU が 1,500 バイトの場合は、断片化なしで最大 1,472 バイトの UDP データを送信できます。28 バイトは IPv4 パケット ヘッダー(20 バイト)と UDP データグラム ヘッダー(8 バイト)に使用されます。ネットワークの MTU は最大 8,896 バイトに設定できます。