Configura un permiso de métricas con la API

En este documento, se describe cómo usar Google Cloud CLI o la API de Cloud Monitoring para configurar el permiso de métricas de un proyecto de Google Cloud. Esta página está dirigida a desarrolladores y administradores del sistema.

Los comandos de esta página hacen referencia a un "contenedor de recursos". Si bien un contenedor de recursos puede ser una organización, una carpeta o un proyecto, los comandos que se describen en esta página solo admiten proyectos de Google Cloud.

Antes de comenzar

  • Si no estás familiarizado con los términos alcance de las métricas y proyecto de alcance, consulta alcances de métricas.

  • Asegúrate de que las funciones de Identity and Access Management (IAM) en el proyecto de permisos y en cada proyecto que desees agregar como proyecto supervisado incluyan todos los permisos de la función de administrador de Monitoring (roles/monitoring.admin). Para obtener más información, consulta Configuración de los permisos de métricas.

  • Los métodos de alcance de métricas de la API de Cloud Monitoring que recuperan información son síncronos. Sin embargo, las API que cambian de estado son asíncronas. Los comandos de Google Cloud CLI se bloquean hasta que se complete la operación asíncrona. Para obtener más información sobre cómo determinar cuándo se completa un método de la API asíncrono y cómo determinar su estado, consulta Métodos de la API asíncrona.

  • Si planeas invocar la API de Cloud Monitoring mediante curl o si deseas usar las muestras de esta página, completa los pasos de la configuración del comando curl.

Enumera todos los permisos de las métricas que incluyen un proyecto

gcloud

Para obtener una lista de los permisos de métricas que pueden ver las métricas de un contenedor de recursos, como un proyecto de Google Cloud, ejecuta el comando gcloud beta monitoring metrics-scopes list:

gcloud beta monitoring metrics-scopes list MONITORED_RESOURCE_CONTAINER_NAME

Antes de ejecutar el comando, ingresa el identificador del contenedor de recursos en la variable MONITORED_RESOURCE_CONTAINER_NAME. Cuando el contenedor de recursos sea un proyecto de Google Cloud, ingresa projects/PROJECT_ID_OR_NUMBER.

Por ejemplo, para obtener una lista de los permisos de métricas que incluyen el proyecto my-project, ejecuta el siguiente comando:

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

La siguiente respuesta indica que el proyecto my-project está incluido en dos permisos de métricas:

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'

Para obtener información detallada sobre un permiso de métricas, ejecuta el comando gcloud beta monitoring metrics-scopes describe.

curl

Para obtener una lista de los alcances de métricas que pueden ver las métricas de un proyecto, envía una solicitud GET al extremo locations.global.metricsScopes.listMetricsScopesByMonitoredProject y, luego, incluye la consulta. que especifica el proyecto.

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

Cuando se ejecuta de forma correcta, la respuesta es un array de objetos MetricsScope.

Este método no hace que se escriba una entrada en los registros de auditoría del proyecto de alcance. Para registrar estas acciones en el registro de auditoría, habilita Lectura de datos en la API de Cloud Resource Manager. Para obtener más información, consulta el artículo Configuración de registros de auditoría de acceso a los datos.

Obtén detalles sobre un permiso de métricas

gcloud

Para obtener información detallada sobre un permiso de métricas, ejecuta el comando gcloud beta monitoring metrics-scopes describe:

gcloud beta monitoring metrics-scopes describe METRICS_SCOPE_ID

Antes de ejecutar el comando, ingresa el nombre del nombre completamente calificado de un permiso de métricas en la variable METRICS_SCOPE_ID. El siguiente es un ejemplo de un nombre completamente calificado:

locations/global/metricsScopes/012345012345

El siguiente es un ejemplo de respuesta. En este ejemplo, el permiso de métricas contiene un proyecto, y el ID del permiso y del proyecto de métricas es el mismo:

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'

Para identificar el proyecto de Google Cloud a partir de su ID, ejecuta el comando gcloud projects list y filtra por el ID del proyecto. Por ejemplo, para obtener el nombre del proyecto 012345012345, ejecuta el siguiente comando:

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

curl

Para obtener información sobre el alcance de una métrica, envía una solicitud GET al extremo locations.global.metricsScopes.get:

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

Cuando se ejecuta de forma correcta, la respuesta es un objeto MetricsScope.

Este método no hace que se escriba una entrada en los registros de auditoría del proyecto de alcance. Para registrar estas acciones en el registro de auditoría, habilita Lectura de datos en la API de Cloud Resource Manager. Para obtener más información, consulta el artículo Configuración de registros de auditoría de acceso a los datos.

Agrega un proyecto a un permiso de métricas

gcloud

Para agregar un contenedor de recursos, como un proyecto de Google Cloud, a un permiso de métricas, ejecuta el comando gcloud beta monitoring metrics-scopes create:

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

Antes de ejecutar el comando anterior, haz lo siguiente:

  • Ingresa el nombre o el ID del proyecto de Google Cloud cuyo permiso de métricas se modificará en la variable SCOPING_PROJECT_ID_OR_NUMBER.

  • Ingresa el identificador de tu contenedor de recursos en la variable MONITORED_RESOURCE_CONTAINER_NAME. Cuando el contenedor de recursos sea un proyecto de Google Cloud, ingresa projects/PROJECT_ID_OR_NUMBER.

Por ejemplo, con el siguiente comando, se agrega el proyecto my-monitored-project al permiso de métricas del proyecto llamado my-staging-projects:

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

La respuesta al comando anterior proporciona confirmación de que el comando se completó correctamente:

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

curl

Para agregar un proyecto de Google Cloud a un permiso de métricas, envía una solicitud POST al extremo locations.global.metricsScopes.projects.create. En el siguiente ejemplo, el proyecto identificado por la variable de entorno MONITORED_PROJECT_ID_OR_NUMBER se agrega como proyecto supervisado:

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

La respuesta de este método asíncrono es un objeto Operation.

Las aplicaciones que llaman a este método deben sondear el extremo operation.get hasta que el valor del campo Operation.done sea true. Cuando el campo Operation.done se establece en false, eso indica que la operación está en progreso. Para obtener más información, consulta Comandos de la API asíncronos.

El siguiente es un ejemplo de la respuesta cuando se agrega un proyecto supervisado:

{
  "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": "...",
    ...
  }
}

En la respuesta anterior, el campo Operation.done se establece en true. Este valor indica que el comando está completo. Debido a que el comando se completó con éxito, el campo Operation.response se establece y su valor es un objeto MonitoredProject. El campo response.name incluye el identificador del proyecto de alcance y del proyecto supervisado. El campo providerAccountId muestra el nombre del proyecto supervisado.

Invocar este método da como resultado una entrada en los registros de auditoría del proyecto de alcance. La consola de Google Cloud no invoca este método de la API. Por lo tanto, las modificaciones realizadas en un permiso de métricas cuando se usa la consola de Google Cloud no se registran en los registros de auditoría.

Quita un proyecto de un permiso de métricas

gcloud

Para quitar un contenedor de recursos, como un proyecto de Google Cloud, de un permiso de métricas, ejecuta el comando gcloud beta monitoring metrics-scopes delete:

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

Antes de ejecutar el comando anterior, haz lo siguiente:

  • Ingresa el nombre o el ID del proyecto de Google Cloud cuyo permiso de métricas se modificará en la variable SCOPING_PROJECT_ID_OR_NUMBER.

  • Ingresa el identificador de tu contenedor de recursos en la variable MONITORED_RESOURCE_CONTAINER_NAME. Cuando el contenedor de recursos sea un proyecto de Google Cloud, ingresa projects/PROJECT_ID_OR_NUMBER.

Por ejemplo, el siguiente comando quita el proyecto my-monitored-project del permiso de métricas del proyecto llamado my-staging-projects:

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

La respuesta al comando anterior proporciona confirmación de que el comando se completó correctamente:

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

El siguiente error se informa cuando el proyecto de permisos no supervisa el proyecto que especifica la variable MONITORED_RESOURCE_CONTAINER_NAME:

NOT_FOUND: Requested entity was not found.

curl

Para quitar un proyecto de Google Cloud de un permiso de métricas, envía una solicitud DELETE al extremo locations.global.metricsScopes.projects.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}

La respuesta de este método asíncrono es un objeto Operation.

Las aplicaciones que llaman a este método deben sondear el extremo operation.get hasta que el valor del campo Operation.done sea true. Cuando el campo Operation.done se establece en false, eso indica que la operación está en progreso. Para obtener más información, consulta Comandos de la API asíncronos.

El siguiente es un ejemplo de la respuesta cuando la eliminación de un proyecto supervisado se realiza de forma correcta:

{
  "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"
  }
}

En la respuesta anterior, el campo Operation.done se establece en true. Este valor indica que el comando está completo. Debido a que el comando se completó con éxito, el campo Operation.response se establece y contiene un campo @type.

Invocar este método da como resultado una entrada en los registros de auditoría del proyecto de alcance. La consola de Google Cloud no invoca este método de la API. Por lo tanto, las modificaciones realizadas en un permiso de métricas cuando se usa la consola de Google Cloud no se registran en los registros de auditoría.

Métodos de la API asíncronos

Todos los métodos de alcance de métricas de la API de Cloud Monitoring que cambian el estado del sistema, por ejemplo, el comando para agregar un proyecto supervisado a un alcance de métricas, son asíncronos. Para estos comandos, la respuesta del comando es un objeto Operation.

Las aplicaciones que llaman a un método de API asíncrono deben sondear el extremo operation.get hasta que el valor del campo Operation.done sea true:

  • Cuando done está false, la operación está en progreso.

    Para actualizar la información de estado, envía una solicitud GET al extremo operation.get:

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

    En el comando anterior, OPERATION_NAME es una variable de entorno que almacena el valor del campo Operation.name.

  • Cuando done es true, la operación está completa y el campo error o response está configurado:

    • error: Cuando se configura, falla la operación asíncrona. El valor de este campo es un objeto Status que contiene un código de error de gRPC y un mensaje de error.
    • response: Cuando se establece, la operación asíncrona se completó de forma correcta y el valor refleja el resultado.

Configuración del comando curl

En esta sección, se describe la configuración que se usó para crear los comandos curl en este documento. Cada comando curl de esta página incluye un conjunto de argumentos seguidos de la URL de un recurso de API:

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

Configura estas variables de entorno para simplificar la creación de los comandos curl:

  1. Crea la variable de entorno para almacenar el ID o el número del proyecto de alcance:

    SCOPING_PROJECT_ID_OR_NUMBER=SCOPING_PROJECT_ID_OR_NUMBER
    
  2. Opcional. Si planeas agregar o quitar proyectos supervisados, configura la variable de entorno con el ID o el número del proyecto supervisado:

    MONITORED_PROJECT_ID_OR_NUMBER=MONITORED_PROJECT_ID_OR_NUMBER
    
  3. Autentica en la CLI de Google Cloud:

    gcloud auth login
    
  4. Opcional. Para evitar tener que especificar el ID del proyecto con cada comando gcloud, establece el ID del proyecto como predeterminado con gcloud CLI:

    gcloud config set project ${SCOPING_PROJECT_ID_OR_NUMBER}
    
  5. Crea un token de autorización y captúralo en una variable de entorno:

    TOKEN=`gcloud auth print-access-token`
    

    Los tokens son válidos por tiempo limitado. Si los comandos que funcionaban de repente informan que no estás autenticado, entonces vuelve a emitir este comando.

  6. Para verificar que cuentas con un token de acceso, reproduce la variable TOKEN:

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

Es posible que también debas especificar otros argumentos, por ejemplo, para especificar el tipo de solicitud HTTP (por ejemplo, -X DELETE). La solicitud predeterminada es GET, por lo que los ejemplos no la especifican.

¿Qué sigue?

Para obtener información sobre el uso de Google Cloud con Terraform, consulta los siguientes recursos: