トラブルシューティング

このページでは、Cloud Storage の使用中に発生する可能性のある一般的なエラーをトラブルシューティングする方法について説明します。

Cloud Storage などの Google Cloud サービスに影響するインシデントについては、Google Cloud Service Health ダッシュボードをご覧ください。

未加工リクエストのロギング

gcloud や Cloud Storage クライアント ライブラリなどのツールを使用する場合、リクエストとレスポンスの情報の多くはツールで処理されます。ただし、トラブルシューティングや、Stack Overflow などのフォーラムに質問を投稿する際に役立つ情報があると便利な場合があります。ツールのリクエスト ヘッダーとレスポンス ヘッダーを返すには、次の手順を使用します。

コンソール

リクエストとレスポンスの情報を表示する方法は、 Google Cloud コンソールへのアクセスに使用しているブラウザによって異なります。Google Chrome ブラウザの場合:

  1. Chrome のメインメニュー ボタン()をクリックします。

  2. [その他のツール] を選択します。

  3. [デベロッパー ツール] をクリックします。

  4. 表示されたペインで [Network] タブをクリックします。

コマンドライン

リクエストでグローバル デバッグフラグを使用します。次に例を示します。

gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug

クライアント ライブラリ

C++

  • HTTP トラフィック全体を取得するには、環境変数 CLOUD_STORAGE_ENABLE_TRACING=http を設定します。

  • RPC ごとにログを取得するには、環境変数 CLOUD_STORAGE_ENABLE_CLOG=yes を設定します。

C#

ApplicationContext.RegisterLogger を使用してロガーを追加し、HttpClient メッセージ ハンドラでロギング オプションを設定します。詳細については、C# クライアント ライブラリのリファレンス ドキュメントをご覧ください。

Go

環境変数 GODEBUG=http2debug=1 を設定します。詳しくは、Go パッケージ net/http をご覧ください。

リクエスト本文もロギングする場合は、カスタム HTTP クライアントを使用します。

Java

  1. 次の内容のファイルを「logging.properties」という名前で作成します。

    # Properties file which configures the operation of the JDK logging facility.
    # The system will look for this config file to be specified as a system property:
    # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties
    
    # Set up the console handler (uncomment "level" to show more fine-grained messages)
    handlers = java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level = CONFIG
    
    # Set up logging of HTTP requests and responses (uncomment "level" to show)
    com.google.api.client.http.level = CONFIG
  2. Maven で logging.properties を使用します。

    mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command

詳細については、プラガブル HTTP トランスポートをご覧ください。

Node.js

Node スクリプトを呼び出す前に、環境変数 NODE_DEBUG=https を設定します。

PHP

httpHandler を使用して独自の HTTP ハンドラをクライアントに提供し、リクエストとレスポンスをロギングするためのミドルウェアを設定します。

Python

ロギング モジュールを使用します。次に例を示します。

import logging
import http.client

logging.basicConfig(level=logging.DEBUG)
http.client.HTTPConnection.debuglevel=5

Ruby

.rb file の先頭、require "google/cloud/storage" の後に以下を追加します。

ruby
Google::Apis.logger.level = Logger::DEBUG

カスタム ヘッダーの追加

カスタム ヘッダーをリクエストに追加することは、デバッグ ヘッダーの有効化やリクエストのトレースなど、デバッグを目的とした一般的な方法です。次の例は、さまざまな Cloud Storage ツールでリクエスト ヘッダーを設定する方法を示しています。

コマンドライン

--additional-headers フラグを使用します。このフラグはほとんどのコマンドで使用できます。次に例を示します。

gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE

ここで、HEADER_NAMEHEADER_VALUE はリクエストに追加するヘッダーを定義します。

クライアント ライブラリ

C++

namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));

C#

次のサンプルでは、クライアント ライブラリから送信されるすべてのリクエストにカスタム ヘッダーを追加します。

using Google.Cloud.Storage.V1;

var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");

var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)

{
  Console.WriteLine(bucket.Name);
}

Go

Storage パッケージによって行われた API 呼び出しにカスタム ヘッダーを追加するには、メソッドに渡されるコンテキストで callctx.SetHeaders を使用します。

package main

import (
  "context"

  "cloud.google.com/go/storage"
  "github.com/googleapis/gax-go/v2/callctx"
)

func main() {
  ctx := context.Background()

  client, err := storage.NewClient(ctx)
  if err != nil {
    // Handle error.
  }
  ctx = callctx.SetHeaders(ctx, "X-Custom-Header", "value")

  // Use client as usual with the context and the additional headers will be sent.
  _, err = client.Bucket("my-bucket").Attrs(ctx)
  if err != nil {
    // Handle error.
  }
}

Java

import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;

public class Example {

  public void main(String args[]) throws IOException {
    HeaderProvider headerProvider =
            FixedHeaderProvider.create("custom-header", "custom-value");
    Storage storage = StorageOptions.getDefaultInstance()
            .toBuilder()
            .setHeaderProvider(headerProvider)
            .build().getService();
    String bucketName = "example-bucket";