API を使用して指標スコープを構成する

このドキュメントでは、Google Cloud CLI または Cloud Monitoring API を使用して Google Cloud プロジェクトの指標スコープを構成する方法について説明します。このページは、デベロッパーとシステム管理者を対象としています。

このページのコマンドは、リソース コンテナを参照します。リソース コンテナは常に Google Cloud プロジェクトです。

始める前に

  • 指標スコープスコープ対象プロジェクトの詳細については、指標スコープをご覧ください。

  • スコープ プロジェクトとモニタリング対象プロジェクトとして追加する各プロジェクトの Identity and Access Management(IAM)ロールに、Monitoring 管理者(roles/monitoring.admin)ロールのすべての権限が含まれていることを確認します。詳細については、指標スコープ構成をご覧ください。

  • 情報を取得する Cloud Monitoring API の指標スコープ メソッドは同期的です。ただし、状態を変更する API は非同期です。 Google Cloud CLI コマンドは、非同期オペレーションが完了するまでブロックされます。非同期 API メソッドが完了したタイミングとそのステータスの判定方法については、非同期 API メソッドをご覧ください。

  • curl を使用して Cloud Monitoring API を呼び出す場合、またはこのページのサンプルを使用する場合は、curl コマンドの設定手順を完了してください。

プロジェクトが含まれるすべての指標スコープを一覧表示する

gcloud

Google Cloud プロジェクトなどのリソース コンテナの指標を表示できる指標スコープのリストを取得するには、gcloud beta monitoring metrics-scopes list コマンドを実行します。

gcloud beta monitoring metrics-scopes list MONITORED_RESOURCE_CONTAINER_NAME

コマンドを実行する前に、リソース コンテナの ID を変数 MONITORED_RESOURCE_CONTAINER_NAME に入力します。リソース コンテナが Google Cloud プロジェクトの場合は、projects/PROJECT_ID_OR_NUMBER と入力します。

たとえば、プロジェクト my-project を含む指標スコープを一覧表示するには、次のコマンドを実行します。

gcloud beta monitoring metrics-scopes list projects/my-project

次のレスポンスは、プロジェクト my-project が 2 つの指標スコープに含まれていることを示しています。

metricsScopes:
- createTime: '2018-08-06T17:13:42Z'
  name: locations/global/metricsScopes/012345012345
  updateTime: '2018-08-18T16:20:37.032928Z'
- createTime: '2021-04-13T15:37:26.869Z'
  name: locations/global/metricsScopes/9876543210
  updateTime: '2021-04-13T15:37:27.284239Z'

指標スコープの詳細情報を取得するには、gcloud beta monitoring metrics-scopes describe コマンドを実行します。

curl

プロジェクトの指標を表示できる指標スコープのリストを取得するには、locations.global.metricsScopes.listMetricsScopesByMonitoredProject エンドポイントに GET リクエストを送信し、クエリを含めます。パラメータを指定します。

curl -H "Authorization: Bearer ${TOKEN}" \
https://monitoring.googleapis.com/v1/locations/global/metricsScopes:listMetricsScopesByMonitoredProject?monitored_resource_container=projects/${PROJECT_ID_OR_NUMBER}

成功した場合、レスポンスは MetricsScope オブジェクトの配列です。

この方法でスコープ プロジェクトの監査ログにエントリは書き込まれません。これらのアクションを監査ログに記録するには、Cloud Resource Manager API の [データ読み取り] を有効にします。詳細については、データアクセス監査ログの構成をご覧ください。

指標のスコープに関する詳細情報を取得する

gcloud

指標スコープに関する詳細情報を取得するには、gcloud beta monitoring metrics-scopes describe コマンドを実行します。

gcloud beta monitoring metrics-scopes describe METRICS_SCOPE_ID

コマンドを実行する前に、指標スコープの完全修飾名を変数 METRICS_SCOPE_ID に入力します。完全修飾名の例を次に示します。

locations/global/metricsScopes/012345012345

レスポンスの例を次に示します。この例では、指標スコープに 1 つのプロジェクトが含まれており、指標スコープとプロジェクトの ID は同じです。

createTime: '2018-08-06T17:13:42Z'
monitoredProjects:
- createTime: '2018-08-06T17:13:42Z'
  name: locations/global/metricsScopes/012345012345/projects/012345012345
name: locations/global/metricsScopes/012345012345
updateTime: '2018-08-18T16:20:37.032928Z'

ID から Google Cloud プロジェクトを識別するには、gcloud projects list コマンドを実行して、プロジェクト ID でフィルタします。 たとえば、プロジェクト 012345012345 の名前を取得するには、次のコマンドを実行します。

gcloud projects list --filter="012345012345" --format="value(NAME)"

curl

指標のスコープに関する情報を取得するには、GET リクエストを locations.global.metricsScopes.get エンドポイントに送信します。

curl -H "Authorization: Bearer ${TOKEN}" \
https://monitoring.googleapis.com/v1/locations/global/metricsScopes/${SCOPING_PROJECT_ID_OR_NUMBER}

正常な場合は、レスポンスが MetricsScope オブジェクトになります。

この方法でスコープ プロジェクトの監査ログにエントリは書き込まれません。これらのアクションを監査ログに記録するには、Cloud Resource Manager API の [データ読み取り] を有効にします。詳細については、データアクセス監査ログの構成をご覧ください。

プロジェクトを指標スコープに追加する

App Hub を使用している場合、App Hub からシステム指標を表示するには、App Hub ホスト プロジェクトと指標スコープの両方を構成する必要があります。App Hub サービス プロジェクトを App Hub ホスト プロジェクトに追加しても、プロジェクトの指標スコープは変更されません。同様に、指標スコープにプロジェクトを追加しても、App Hub ホスト プロジェクトに接続されている App Hub サービス プロジェクトのリストは変更されません。App Hub ホスト プロジェクトの構成については、サービス プロジェクトを追加または削除するをご覧ください。

gcloud

Google Cloud プロジェクトなどのリソース コンテナを指標スコープに追加するには、gcloud beta monitoring metrics-scopes create コマンドを実行します。

gcloud beta monitoring metrics-scopes create MONITORED_RESOURCE_CONTAINER_NAME --project=SCOPING_PROJECT_ID_OR_NUMBER

前述のコマンドを実行する前に、次のようにしてください。

  • 指標スコープを変更する Google Cloud プロジェクトの名前または ID を変数 SCOPING_PROJECT_ID_OR_NUMBER に入力します。

  • リソース コンテナの ID を変数 MONITORED_RESOURCE_CONTAINER_NAME に入力します。リソース コンテナが Google Cloud プロジェクトの場合は、projects/PROJECT_ID_OR_NUMBER と入力します。

たとえば、次のコマンドは、プロジェクト my-monitored-projectmy-staging-projects という名前のプロジェクトの指標スコープに追加します。

gcloud beta monitoring metrics-scopes create projects/my-monitored-project --project=my-staging-projects

上記のコマンドに対するレスポンスにより、コマンドが正常に完了したことが確認できます。

Created monitored project [locations/global/metricsScopes/my-staging-projects/projects/my-monitored-project].

curl

Google Cloud プロジェクトを指標スコープに追加するには、POST リクエストを locations.global.metricsScopes.projects.create エンドポイントに送信します。次の例では、環境変数 MONITORED_PROJECT_ID_OR_NUMBER で識別されたプロジェクトがモニタリング対象プロジェクトとして追加されます。

curl -H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" -X POST \
-d "{'name': 'locations/global/metricsScopes/${SCOPING_PROJECT_ID_OR_NUMBER}/projects/${MONITORED_PROJECT_ID_OR_NUMBER}'}" \
https://monitoring.googleapis.com/v1/locations/global/metricsScopes/${SCOPING_PROJECT_ID_OR_NUMBER}/projects

この非同期メソッドのレスポンスは Operation オブジェクトです。

このメソッドを呼び出すアプリケーションは、Operation.done フィールドの値が true になるまで、operation.get エンドポイントをポーリングする必要があります。 Operation.done フィールドが false に設定されている場合、オペレーションが進行中であることを示します。詳細については、非同期 API コマンドをご覧ください。

次の例では、モニタリング対象プロジェクトの追加が成功した場合のレスポンスを示します。

{
  "name": "operations/6915efde-1915-400a-ad49-7b62041d9bd2",
  "metadata": {
    "@type": "type.googleapis.com/google.monitoring.metricsscope.v1.OperationMetadata",
    "state": "DONE",
    ...
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.monitoring.metricsscope.v1.MonitoredProject",
    "name": "locations/global/metricsScopes/012012012012/projects/678678678678",
    "provider": "G​C​P",
    "providerAccountId": "...",
    ...
  }
}

上記のレスポンスでは、Operation.done フィールドが true に設定されています。この値は、コマンドが完了したことを示します。コマンドが正常に完了したため、Operation.response フィールドが設定され、その値は MonitoredProject オブジェクトになります。response.name フィールドには、スコープ対象プロジェクトとモニタリング対象プロジェクトの識別子が含まれます。providerAccountId フィールドには、モニタリング対象プロジェクトの名前が列挙されます。

このメソッドを呼び出すと、スコープ プロジェクトの監査ログにエントリが作成されます。Google Cloud コンソールがこの API メソッドを呼び出すことはありません。したがって、Google Cloud コンソールの使用時に指標スコープに加えた変更は、監査ログに記録されません。

指標スコープからプロジェクトを削除する

App Hub を使用している場合は、指標スコープからプロジェクトを削除する前に、そのプロジェクトが App Hub アプリケーションで使用されていないことを確認してください。指標スコープからプロジェクトを削除しても、アプリケーションには影響しません。ただし、App Hub ホスト プロジェクトのコンテキストから、そのアプリケーションのシステム指標を表示することはできません。App Hub ホスト プロジェクトの構成については、サービス プロジェクトを追加または削除するをご覧ください。

gcloud

Google Cloud プロジェクトなどのリソース コンテナを指標スコープから削除するには、gcloud beta monitoring metrics-scopes delete コマンドを実行します。

gcloud beta monitoring metrics-scopes delete MONITORED_RESOURCE_CONTAINER_NAME --project=SCOPING_PROJECT_ID_OR_NUMBER

前述のコマンドを実行する前に、次のようにしてください。

  • 指標スコープを変更する Google Cloud プロジェクトの名前または ID を変数 SCOPING_PROJECT_ID_OR_NUMBER に入力します。

  • リソース コンテナの ID を変数 MONITORED_RESOURCE_CONTAINER_NAME に入力します。リソース コンテナが Google Cloud プロジェクトの場合は、projects/PROJECT_ID_OR_NUMBER と入力します。

たとえば、次のコマンドは、my-staging-projects という名前のプロジェクトの指標スコープからプロジェクト my-monitored-project を削除します。

gcloud beta monitoring metrics-scopes delete projects/my-monitored-project --project=my-staging-projects

上記のコマンドに対するレスポンスにより、コマンドが正常に完了したことが確認できます。

Deleted monitored project [locations/global/metricsScopes/my-staging-projects/projects/my-monitored-project].

スコーピング プロジェクトが MONITORED_RESOURCE_CONTAINER_NAME 変数で指定されたプロジェクトをモニタリングしていない場合は、次のエラーが報告されます。

NOT_FOUND: Requested entity was not found.

curl

指標スコープから Google Cloud プロジェクトを削除するには、locations.global.metricsScopes.projects.delete エンドポイントに DELETE リクエストを送信します。

curl -H "Authorization: Bearer ${TOKEN}" -X DELETE \
https://monitoring.googleapis.com/v1/locations/global/metricsScopes/${SCOPING_PROJECT_ID_OR_NUMBER}/projects/${MONITORED_PROJECT_ID_OR_NUMBER}

この非同期メソッドに対するレスポンスは、Operation オブジェクトです。

このメソッドを呼び出すアプリケーションは、Operation.done フィールドの値が true になるまで、operation.get エンドポイントをポーリングする必要があります。 Operation.done フィールドが false に設定されている場合、オペレーションが進行中であることを示します。詳細については、非同期 API コマンドをご覧ください。

次の例では、モニタリング対象プロジェクトの削除が成功した場合のレスポンスを示します。

{
  "name": "operations/4367ff34-0ff0-4767-b8d3-0638e30f077c",
  "metadata": {
    "@type": "type.googleapis.com/google.monitoring.metricsscope.v1.OperationMetadata",
    "state": "DONE",
    ...
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

上記のレスポンスでは、Operation.done フィールドが true に設定されています。この値は、コマンドが完了したことを示します。コマンドは正常に完了したため、Operation.response フィールドが設定され、@type フィールドが含まれています。

このメソッドを呼び出すと、スコープ プロジェクトの監査ログにエントリが記録されます。Google Cloud コンソールがこの API メソッドを呼び出すことはありません。したがって、Google Cloud コンソールの使用時に指標スコープに加えた変更は、監査ログに記録されません。

非同期 API メソッド

システムの状態を変更する Cloud Monitoring API のすべての指標スコープ メソッド(モニタリング対象プロジェクトに指標スコープを追加するコマンドなど)は非同期です。これらのコマンドでは、コマンド レスポンスが Operation オブジェクトです。

非同期 API メソッドを呼び出すアプリは、Operation.done フィールドの値が true になるまで operation.get エンドポイントをポーリングする必要があります。

  • donefalse の場合は、オペレーションが進行中です。

    ステータス情報を更新するには、operation.get エンドポイントに GET リクエストを送信します。

    curl -H "Authorization: Bearer ${TOKEN}" \
    https://monitoring.googleapis.com/v1/${OPERATION_NAME}

    上記のコマンドでの OPERATION_NAME は、Operation.name フィールドの値を格納する環境変数です。

  • donetrue の場合、オペレーションは完了し、error フィールドまたは response フィールドが設定されます。

    • error: 設定された場合、非同期処理が失敗しました。このフィールドの値は、gRPC エラーコードとエラー メッセージを含む Status オブジェクトです。
    • response: 設定すると、非同期オペレーションが正常に完了し、値が結果に反映されます。

curl コマンドの設定

このセクションでは、このドキュメントで curl コマンドを作成するために使用する設定について説明します。このページの各 curl コマンドには一連の引数が含まれ、API リソースの URL がそれに続きます。

curl -H "Authorization: Bearer ${TOKEN}" <other_args> \
https://monitoring.googleapis.com/v1/locations/global/metricsScopes/<resource>

curl コマンドを簡単に作成できるように、次の環境変数を設定します。

  1. スコープ プロジェクト ID や番号を格納する環境変数を作成します。

    SCOPING_PROJECT_ID_OR_NUMBER=SCOPING_PROJECT_ID_OR_NUMBER
    
  2. 省略可。モニタリング対象プロジェクトを追加または削除する場合は、モニタリング対象プロジェクトの ID または番号を使用して環境変数を構成します。

    MONITORED_PROJECT_ID_OR_NUMBER=MONITORED_PROJECT_ID_OR_NUMBER
    
  3. Google Cloud CLI に対して認証を行います。

    gcloud auth login
    
  4. 省略可。各 gcloud コマンドでのプロジェクト ID の指定を不要にするには、gcloud CLI を使用してプロジェクト ID をデフォルトとして設定します。

    gcloud config set project ${SCOPING_PROJECT_ID_OR_NUMBER}
    
  5. 認証トークンを作成し、環境変数にキャプチャします。

    TOKEN=`gcloud auth print-access-token`
    

    トークンは期間限定で有効です。動作していたコマンドが急に未認証と報告された場合は、このコマンドを再発行します。

  6. アクセス トークンがあることを確認するには、TOKEN 変数をエコーします。

    echo ${TOKEN}
    ya29.GluiBj8o....
    

HTTP リクエストのタイプ(たとえば、-X DELETE)を指定する場合など、他の引数を指定する必要がある場合もあります。デフォルトのリクエストは GET であるため、例では指定していません。

次のステップ

Terraform と Google Cloud の使用方法については、次のリソースをご覧ください。