このページでは、Cloud Trace API と Google Cloud CLI を使用してトレースをエクスポートする方法について説明します。バージョン 274.0.0 以降の Google Cloud CLI を使用する必要があります。Google Cloud CLI を更新する方法については、gcloud components update
をご覧ください。
このページのサンプルの一部は curl
を使用して生成されました。このツールの構成については、curl
の使用をご覧ください。
Google Cloud CLI コマンドを使用してシンクを一覧表示、作成、記述、更新、削除する例については、エンドツーエンドの例をご覧ください。
用語
このページの例を簡潔にするために、環境変数が使用されています。
Google Cloud CLI の例では、次の環境変数を使用しています。
SINK_ID
: シンクの名前または識別子。例:my-sink
Google Cloud CLI では、Google Cloud プロジェクトを確認できるため、完全修飾コマンドを指定する必要はありません。DESTINATION
: 宛先の完全修飾名を保存します。これは BigQuery データセットである必要があります。たとえば、有効な Destination は次のようになります。bigquery.googleapis.com/projects/DESTINATION_PROJECT_NUMBER/datasets/DATASET_ID
ここで、
DESTINATION_PROJECT_NUMBER
は宛先の Google Cloud プロジェクト番号、DATASET_ID
は BigQuery のデータセット識別子です。
curl
の例では、次の環境変数を使用しています。
ACCESS_TOKEN
: 認証トークンを格納します。詳細については、curl
の使用をご覧ください。PROJECT_ID
: Google Cloud プロジェクト ID またはプロジェクト番号を格納します。PROJECT_NUMBER
: Google Cloud プロジェクト番号を保存します。SINK_ID
: シンクの名前または識別子。例:my-sink
SINK_BODY
:TraceSink
リソースの説明を格納します。TraceSink リソースには、名前とシンクのエクスポート先が含まれます。名前には Google Cloud プロジェクトの番号を指定する必要があります。DESTINATION
: 宛先の完全修飾名を保存します。これは BigQuery データセットである必要があります。
宛先の構成
トレースを BigQuery にエクスポートするには、次の手順を行います。
コピー先データセットを作成します。
Cloud Trace API または Google Cloud CLI を使用して、シンクを作成します。詳細については、シンクの作成をご覧ください。
BigQuery データセットに対する
dataEditor
のロールをシンクに付与します。シンクからライター ID を取得します。ライター ID の詳細については、シンクのプロパティと用語をご覧ください。
シンクの書き込み ID は、作成コマンドに対するレスポンス データに含まれます。また、list コマンドのレスポンス データにも含まれます。
シンクの書き込み ID をサービス アカウントとして BigQuery データセットに追加し、BigQuery データ編集者のロールを付与します。
Google Cloud Console を使用して権限を追加するには、データセットへのアクセス権限の制御をご覧ください。
Google Cloud CLI を使用して権限を追加するには、
add-iam-policy-binding
コマンドを使用して、Google Cloud プロジェクト ID とシンクの書き込み ID を指定します。gcloud projects add-iam-policy-binding ${DESTINATION_PROJECT_ID} \ --member serviceAccount:${WRITER_IDENTITY} \ --role roles/bigquery.dataEditor
前のコマンドでは、
WRITER_IDENTITY
はシンクの書き込み ID を格納する環境変数で、DESTINATION_PROJECT_ID
は BigQuery データセットの Google Cloud プロジェクト ID です。
シンクを一覧表示する
書き込み ID を含む Google Cloud プロジェクト内のすべてのシンクを一覧表示するには、traceSinks.list
メソッドを呼び出します。
gcloud
Google Cloud CLI を使用して、デフォルト プロジェクトで定義されたシンクを一覧表示するには、次のコマンドを実行します。
gcloud alpha trace sinks list
プロトコル
curl
を使用してシンクを一覧表示するには、GET
リクエストを次の宛先に送信します。
https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks
たとえば、次のリクエストではすべてのシンクを取得します。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks
特定のシンクの詳細を表示する
Google Cloud プロジェクト内の特定のシンクの詳細を表示するには、traceSinks.get
メソッドを呼び出します。
gcloud
Google Cloud CLI を使用して、識別子が SINK_ID
に格納されているシンクの詳細を表示するには、次のコマンドを実行します。
gcloud alpha trace sinks describe ${SINK_ID}
プロトコル
curl
を使用して識別子が SINK_ID
に格納されているシンクの詳細を表示するには、次の URL に GET
リクエストを送信します。
https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks/%{SINK_ID}
たとえば、次のリクエストでは、指定されたシンクの詳細を取得します。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks/${SINK_ID}
シンクの作成
Google Cloud プロジェクトでシンクを作成するには、traceSinks.create
メソッドを呼び出します。
シンクのエクスポート先は、BigQuery データセットにする必要があります。
シンクを作成する前に、このデータセットが存在している必要があります。Trace では宛先の存在を確認しません。BigQuery データセットの作成方法については、データセットの作成をご覧ください。
gcloud
Google Cloud CLI を使用してシンクを作成するには、次のコマンドを実行します。
gcloud alpha trace sinks create ${SINK_ID} ${DESTINATION}
プロトコル
CURL を使用してシンクを作成するには、次の URL に POST
リクエストを送信します。
https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks
たとえば、${PROJECT_NUMBER}
を使用して test_sink
という名前のシンクをプロジェクトの test_dataset
にトレーススパンをエクスポートするには、次のように環境変数 SINK_BODY
を定義します。
SINK_BODY='{"name":"projects/12345/traceSinks/test_sink","output_config":{"destination":"bigquery.googleapis.com/projects/12345/datasets/test_dataset"}}'
シンクを作成するには、次のコマンドを実行します。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d ${SINK_BODY} https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks
シンクを作成してから Trace でのスパンがエクスポート先にエクスポートされるまで、数分かかる場合があります。
シンクの削除
Google Cloud プロジェクト内のシンクを削除するには、traceSinks.delete
コマンドを呼び出します。
gcloud
Google Cloud CLI を使用して、識別子が SINK_ID
に格納されているシンクを削除するには、次のコマンドを実行します。
gcloud alpha trace sinks delete ${SINK_ID}
プロトコル
curl
を使用して識別子が SINK_ID
に格納されているシンクを削除するには、次の URL に DELETE
リクエストを送信します。
https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks/${SINK_ID}
たとえば、次のリクエストはシンクを削除します。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" -X DELETE https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks/${SINK_ID}
シンクの更新
Google Cloud プロジェクト内のシンクを更新するには、traceSinks.patch
コマンドを呼び出します。
シンクを作成する前に、このデータセットが存在している必要があります。Trace では宛先の存在を確認しません。
gcloud
Google Cloud CLI を使用して、識別子が SINK_ID
に格納されているシンクを更新するには、次のコマンドを実行します。
gcloud alpha trace sinks update ${SINK_ID} ${DESTINATION}
環境変数 DESTINATION
には、シンクの新しいエクスポート先が格納されます。
プロトコル
curl
を使用して識別子が SINK_ID
に格納されているシンクのエクスポート先を更新するには、次の URL に PATCH
リクエストを送信します。
https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks/${SINK_ID}
たとえば、次のリクエストはシンクのエクスポート先を更新します。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X PATCH -d ${SINK_BODY} https://cloudtrace.googleapis.com/v2beta1/projects/${PROJECT_NUMBER}/traceSinks/${SINK_ID}?update_mask=output_config.destination
SINK_BODY
の例については、シンクを作成する例をご覧ください。
シンクを更新してから、Trace でのスパンが新しいエクスポート先にエクスポートされるまでに数分かかることがあります。
エンドツーエンドの例
このセクションでは、Google Cloud CLI コマンドを使用してシンクを一覧表示、作成、記述、更新、削除する方法について説明します。このコマンドは、プロジェクト ID が a-sample-project
のプロジェクトに対して実行されました。このプロジェクトは、2 つの BigQuery データセットが含まれるように事前構成されています。最後に、これらの例では、シンクとエクスポート先が同じプロジェクトにあります。これは必須ではありません。シンクとエクスポート先は異なる Google Cloud プロジェクトに存在することもできます。
構成手順
デフォルトのプロジェクト設定を確認します。
$ gcloud config list
レスポンスの例:
[compute] zone = us-east1-b [core] account = user@example.com disable_usage_reporting = True project = a-sample-project Your active configuration is: [default]
Google Cloud CLI が 274.0.0 以降であることを確認します。
$ gcloud --version
レスポンスの例:
Google Cloud SDK 275.0.0 alpha 2020.01.03 beta 2020.01.03 bq 2.0.51 core 2020.01.03 gsutil 4.46 kubectl 2020.01.03
デフォルト プロジェクトで使用可能なデータセットを識別します。
$ bq ls
レスポンスの例:
datasetId --------------- dataset_1 dataset_other
初めて
bq
コマンドを使用する場合には、プロジェクトの選択が必要になる場合があります。
環境変数を設定する
Google Cloud CLI コマンドで使用される環境変数を設定します。
$ PROJECT_ID=a-sample-project $ PROJECT_NUMBER=123456789000 $ SINK_ID=a-sample-sink $ DATA_SET_NAME=dataset_1 $ DESTINATION=bigquery.googleapis.com/projects/${PROJECT_NUMBER}/datasets/${DATA_SET_NAME}
この例では、エクスポート先とシンクが同じプロジェクトにあります。これは必須ではありません。シンクとエクスポート先は異なる Google Cloud プロジェクトに存在することもできます。
設定を確認します。
$ echo $SINK_ID a-sample-sink $ echo $DATA_SET_NAME dataset_1 $ echo $DESTINATION bigquery.googleapis.com/projects/123456789000/datasets/dataset_1
シンクのリスト
すべてのシンクを一覧表示するには、次のコマンドを実行します。
$ gcloud alpha trace sinks list
このプロジェクトにはシンクがないため、レスポンスは次のようになります。
Listed 0 items.
シンクを作成する
シンクを作成するには、次のコマンドを実行します。
$ gcloud alpha trace sinks create ${SINK_ID} ${DESTINATION}
レスポンスの例:
You can give permission to the service account by running the following command. gcloud projects add-iam-policy-binding bigquery-project \ --member serviceAccount:export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com \ --role roles/bigquery.dataEditor
サービス アカウント名に
export-0000001cbe991a08-3434
が含まれていることに注意してください。 0000001cbe991a08 はPROJECT_NUMBER
を 16 進数で表したものです。値3434
はランダムな値です。上記のレスポンスで Google Cloud CLI を実行する前に、
bigquery-project
をプロジェクト ID に置き換える必要があります。シンクが作成されたことを確認します。
$ gcloud alpha trace sinks list
レスポンスの例:
NAME DESTINATION WRITER_IDENTITY a-sample-sink bigquery.googleapis.com/projects/123456789000/datasets/dataset_1 export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com
シンクについて詳しく説明します。
$ gcloud alpha trace sinks describe ${SINK_ID}
レスポンスの例:
destination: bigquery.googleapis.com/projects/123456789000/datasets/dataset_1 name: a-sample-sink writer_identity: export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com
シンクの書き込み ID に
bigquery.dataEditor
権限を付与します。シンクの作成コマンドは、権限の更新に使用できる Google Cloud CLI コマンドを返します。このコマンドを成功させるには、次の手順を実行します。
- 宛先の権限を変更する権限があることを確認します。
bigquery-project
を実際のプロジェクト ID に置き換えます。
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member serviceAccount:export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com --role roles/bigquery.dataEditor
このサンプル レスポンスの最初のエントリは、シンクの書き込み ID であるので注意してください。
Updated IAM policy for project [a-sample-project]. bindings: - members: - serviceAccount:export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com role: roles/bigquery.dataEditor - members: - user:user@example.com role: roles/cloudtrace.admin - members: - serviceAccount:service-123456789000@compute-system.iam.gserviceaccount.com role: roles/compute.serviceAgent - members: - serviceAccount:service-123456789000@container-engine-robot.iam.gserviceaccount.com role: roles/container.serviceAgent - members: - serviceAccount:service-123456789000@container-analysis.iam.gserviceaccount.com role: roles/containeranalysis.ServiceAgent - members: - serviceAccount:service-123456789000@containerregistry.iam.gserviceaccount.com role: roles/containerregistry.ServiceAgent - members: - serviceAccount:123456789000-compute@developer.gserviceaccount.com - serviceAccount:123456789000@cloudservices.gserviceaccount.com role: roles/editor - members: - user:user@example.com role: roles/owner etag: BwWbqGVnShQ= version: 1
シンクの宛先を変更する
この例では、宛先が dataset_1
から dataset_other
に変更されます。
環境変数
DATA_SET_NAME
とDESTINATION
を更新します。$ DATA_SET_NAME=dataset_other $ DESTINATION=bigquery.googleapis.com/projects/${PROJECT_NUMBER}/datasets/${DATA_SET_NAME} $ echo ${DESTINATION} bigquery.googleapis.com/projects/123456789000/datasets/dataset_other
DATA_SET_NAME
またはPROJECT_NUMBER
を変更した後は、必ずDESTINATION
の値を更新してください。シンクの宛先を変更します。
$ gcloud alpha trace sinks update ${SINK_ID} ${DESTINATION}
出力例は以下のとおりです。
Updated [https://cloudtrace.googleapis.com/v2beta1/projects/123456789000/traceSinks/a-sample-sink]. destination: bigquery.googleapis.com/projects/123456789000/datasets/dataset_other name: a-sample-sink writer_identity: export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com
describe コマンドを実行して、シンクの詳細を表示します。
$ gcloud alpha trace sinks describe ${SINK_ID} destination: bigquery.googleapis.com/projects/123456789000/datasets/dataset_other name: a-sample-sink writer_identity: export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com
シンクのエクスポート先を更新する場合、シンクの書き込み ID を変更しないため、シンクの権限を更新する必要はありません。
シンクを削除する
シンクを削除するには、次のコマンドを実行します。
$ gcloud alpha trace sinks delete ${SINK_ID}
出力例:
Really delete sink [a-sample-sink]? Do you want to continue (y/N)? y Deleted [https://cloudtrace.googleapis.com/v2beta1/projects/123456789000/traceSinks/a-sample-sink].
結果を確認するには、list
コマンドを実行します。
$ gcloud alpha trace sinks list Listed 0 items.
検証
トレースデータが BigQuery にエクスポートされたときにエラーを表示するグラフのベースとして、Cloud Monitoring exported_span_count
指標を使用できます。エクスポート エラーが発生した場合に通知するアラート ポリシーを作成することもできます。
グラフの作成
Metrics Explorer を使用してモニタリング対象リソースの指標を表示するには、次の操作を行います。
-
Google Cloud コンソールで、leaderboard[Metrics Explorer] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。
- [指標] 要素の [指標を選択] メニューを開いてフィルタバーに「
Spans Exported to BigQuery
」と入力し、サブメニューを使用して特定のリソースタイプと指標を選択します。- [Active resources] メニューで、[Cloud Trace] を選択します。
- [Active metric categories] メニューで、[BigQuery_explort] を選択します。
- [Active metrics] メニューで、[Spans Exported to BigQuery] を選択します。
- [適用] をクリックします。
- データの表示方法を構成します。
- [フィルタ] 要素は空のままにします。この選択では、グラフにすべてのステータス データが表示されます。
[集計方法] 要素で最初のメニューを [平均] に設定し、2 番目のメニューを [ステータス] に設定します。
これらの選択により、一意のステータス値ごとに 1 つの時系列が作成されます。次の表に、考えられるステータス値を示します。
ステータス値 意味と是正措置 ok
このデータ移管処理は正常に完了しました。 bigquery_permission_denied
宛先へのデータのエクスポートに失敗しました。次のいずれかの理由で、エクスポートに失敗する可能性があります。
bigquery_quota_exceeded
BigQuery プロジェクトが BigQuery ストリーミングの割り当てを超えています。割り当ての不足をご覧ください。 invalid_span
internal_errors
invalid_destination
BigQuery へのデータのエクスポートを妨げる不明なエラーが発生しました。この状態を解決するには、テクニカル サポートにお問い合わせいただくか、Stack Overflow でご質問ください。詳細については、サポートの利用をご覧ください。
グラフの構成の詳細については、Metrics Explorer 使用時の指標の選択をご覧ください。
トレースシンクが正常にデータをエクスポートすると、以前の設定で作成したグラフには、ステータス値が ok
の単一時系列が表示されます。 エクスポート中にエラーが発生した場合は、追加の時系列がグラフに表示されます。
アラート ポリシーの作成
BigQuery に Cloud Trace データをエクスポートする際にエラーが発生するとトリガーされるアラート ポリシーを作成するには、次の設定を使用します。
[新しい条件] フィールド |
値 |
---|---|
リソースと指標 | [リソース] メニューで、[Cloud Trace] を選択します。 [指標カテゴリ] メニューで、[BigQuery_export] を選択します。 [Metrics] メニューで、[Spans Exported to BigQuert] を選択します。 |
フィルタ | status != ok |
時系列全体 時系列のグループ化の基準 |
status |
時系列全体 時系列集計 |
sum |
ローリング ウィンドウ | 1 m |
ローリング ウィンドウ関数 | rate |
アラート・トリガーの構成 フィールド |
値 |
---|---|
条件タイプ | Threshold |
アラート トリガー | Any time series violates |
しきい値の位置 | Above threshold |
しきい値 | 0 |
再テスト ウィンドウ | 1 minute |
curl の使用
このセクションでは、curl
ツールを使用して Cloud Trace API を呼び出すための規則と設定について説明します。
認証
Google Cloud プロジェクト ID を保持する環境変数を作成します。
PROJECT_ID=my-project
Google Cloud プロジェクト番号を保持する環境変数を作成します。
PROJECT_NUMBER=12345
Google Cloud CLI を認証します。
gcloud auth login
デフォルトの Google Cloud プロジェクト ID を設定します。
gcloud config set project ${PROJECT_ID}
認証トークンを作成し、環境変数に保存します。
ACCESS_TOKEN=`gcloud auth print-access-token`
アクセス トークンを確認します。
echo ${ACCESS_TOKEN}
コマンドに対するレスポンスは長い文字列にする必要があります。たとえば、1 つのシステムでは、レスポンスの冒頭は次のようになります。
y29.GluiBjo....
curl
の呼び出し
各 curl
コマンドには、一連の引数とその後に続く Cloud Trace API リソースの URL が含まれます。一般的な引数には、PROJECT_ID
および ACCESS_TOKEN
環境変数で指定された値があります。
各 curl
呼び出しの一般的な形式は次のとおりです。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" [OTHER_ARGS] https://cloudtrace.googleapis.com/[API_VERSION]/projects/${PROJECT_ID}/[RESOURCE]
ここで:
[OTHER_ARGS]
(省略可):GET
リクエストを発行する場合は、このフィールドを省略します。他の種類の HTTP リクエストの場合、このプレイス ホルダーを、リクエストのリクエスト タイプとリクエストを満たすために必要な追加データに置き換えます。[API_VERSION]
: API のバージョンを指定します。[RESOURCE]
: Cloud Trace API リソース名を指定します。
たとえば、プロジェクトの最新の 1,000 個のトレースを一覧表示するには、次のコマンドを実行します。
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://cloudtrace.googleapis.com/v1/projects/${PROJECT_ID}/traces
トラブルシューティング
このセクションには、エクスポートを構成する際のエラーを解決するためのトラブルシューティングの情報が含まれています。
データセットの無効な引数エラー
次のエラーメッセージは、データセット名が無効であることを示しています。
ERROR: (gcloud.alpha.trace.sinks.create) INVALID_ARGUMENT: Request contains an invalid argument. - '@type': type.googleapis.com/google.rpc.DebugInfo detail: '[ORIGINAL ERROR] generic::invalid_argument: sink destination is malformed: bigquery.googleapis.com/projects/123456789000/datasets/a-sample-project:dataset_1.
エラーの原因は、データセット名の修飾子としての宛先(Google Cloud プロジェクト識別子 a-sample-project
)です。
このエラーを解決するには、a-sample-project:dataset_1
を dataset_1
に置き換えてから create コマンドを発行します。
データセットは bq ls
コマンドで一覧表示できます。
トレースデータを受信していない
BigQuery でトレースデータを受信できない理由はいくつかあります。
移動先が無効です
データセット名とプロジェクト番号が正しいことを確認します。
データセット名が正しいことを確認するには: 現在のプロジェクト内のデータセットを一覧表示するには、
bq ls
を実行します。環境変数を使用する場合は、echo コマンドを発行して、各変数の値が正しいことを確認します。たとえば、宛先が正しいことを確認します。
$ echo ${DESTINATION} bigquery.googleapis.com/projects/123456789000/datasets/dataset_other
DESTINATION
はPROJECT_NUMBER
とDATA_SET_NAME
の値に依存するため、これら 2 つの変数を最初に設定する必要があります。また、これら 2 つの変数のいずれかを変更する場合は、DESTINATION
に格納されている値を更新する必要があります。現在のプロジェクト番号を確定するには、以下を実行します。
gcloud projects list --filter="${PROJECT_ID}"
次のコマンドを使用して、
PROJECT_NUMBER
をプログラムで設定できます。$ PROJECT_NUMBER=`gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)"`
無効な権限
サービス アカウントに BigQuery 用の DataEditor
のロールが付与されていることを確認します。次のコマンドを実行すると、権限が確認できます。
$ gcloud projects get-iam-policy ${PROJECT_ID}
このコマンドのレスポンスでは、すべての IAM バインディングが記述されています。この場合、結果は次のようになります。シンク書き込み ID には dataEditor
のロールがあることに注目してください。
bindings: - members: - serviceAccount:export-0000001cbe991a08-3434@gcp-sa-cloud-trace.iam.gserviceaccount.com role: roles/bigquery.dataEditor - members: [Note, content truncated]
割り当てが残っていません
データの受信中に突然停止した場合や、データが不十分な場合は、BigQuery ストリーミングの割り当て上限に達した可能性があります。割り当て量を表示するには、[IAM と管理] ページに移動し、[割り当て] を選択します。BigQuery API を検索します。関連するエントリが 2 つあります。リソースごとに 1 分あたりのストリーミング行数と、リソースごとの 1 分あたりのストリーミング バイト数です。
次のステップ
BigQuery スキーマについては、BigQuery にエクスポートするをご覧ください。