Introducción a la supervisión de BigQuery

La supervisión y el registro son fundamentales para ejecutar aplicaciones confiables en la nube. Las cargas de trabajo de BigQuery no son la excepción, en especial si la tuya tiene volúmenes altos o es crítica. En este documento, se proporciona una descripción general de alto nivel de los datos de supervisión disponibles para BigQuery.

Las fuentes de supervisión y registro pueden variar según la frecuencia de muestreo o agregación. Por ejemplo, los datos del esquema de información pueden estar disponibles en un nivel de detalle mayor que los datos de las métricas de supervisión en la nube.

Como resultado, los grafos de métricas con un nivel de detalle menor pueden parecer diferentes de las estadísticas de esquema de información comparables. La agregación tiende a suavizar las discrepancias. Cuando diseñes una solución de supervisión, evalúa el tiempo de respuesta, la precisión y la exactitud de la solicitud de las métricas según tus requisitos.

Métricas

Las métricas son valores numéricos que se recopilan a intervalos periódicos y están disponibles para el análisis. Puedes usar métricas para lo siguiente:

  • Crear gráficos y paneles.
  • Activar alertas para condiciones o situaciones que necesiten intervenciones humanas.
  • Analizar el historial de rendimiento.

En el caso de BigQuery, las métricas disponibles incluyen la cantidad de trabajos que se ejecutan, cuántos bytes se analizaron durante una consulta y la distribución de los tiempos de consulta. Las métricas de una consulta solo estarán disponibles después de que se completen de forma correcta y podrían tardar hasta siete minutos en informarse. Las métricas de las consultas que fallan no se informan. Para obtener una lista completa de las métricas disponibles, incluidas las tasas de muestreo, la visibilidad y las limitaciones, consulta bigquery en Métricas de Google Cloud.

Usa Cloud Monitoring para ver las métricas de BigQuery y crear gráficos y alertas. Cada métrica tiene un tipo de recurso, ya sea bigquery_dataset, bigquery_project o global, y un conjunto de etiquetas. Usa esta información para compilar búsquedas en el lenguaje de consultas de Monitoring (MQL). Puedes agrupar o filtrar cada métrica con las etiquetas.

Por ejemplo, para graficar la cantidad de búsquedas interactivas en tránsito, usa la siguiente declaración MQL, que filtra por priority igual a interactive:

fetch global
| metric 'bigquery.googleapis.com/query/count'
| filter metric.priority = 'interactive'

En el siguiente ejemplo, se obtiene la cantidad de trabajos de carga en tránsito, agrupados en intervalos de 10 minutos:

fetch bigquery_project
| metric 'bigquery.googleapis.com/job/num_in_flight'
| filter metric.job_type = 'load'
| group_by 10m

A fin de obtener más información, consulta la sección sobre cómo crear gráficos y alertas para BigQuery.

Registros

Los registros son registros de texto que se generan en respuesta a eventos o acciones particulares. BigQuery crea entradas de registro para acciones como crear o borrar una tabla, comprar ranuras o ejecutar un trabajo de carga. Para obtener más información sobre el acceso en Google Cloud, consulta Cloud Logging.

Un registro es una colección de solo entrada de entradas de registro. Por ejemplo, puedes escribir tus propias entradas de registro en un registro llamado projects/PROJECT_ID/logs/my-test-log. Muchos servicios de Google Cloud, incluido BigQuery, crean un tipo de registro llamado registros de auditoría. Esto es lo que registran:

  • La actividad administrativa, como crear o modificar recursos
  • El acceso a datos, como la lectura de datos proporcionados por el usuario de un recurso
  • Los eventos del sistema que generan los sistemas de Google, en lugar de las acciones del usuario

Los registros de auditoría se escriben en formato JSON estructurado. El tipo de datos base para las entradas de registro de Google Cloud es la estructura LogEntry. Esta estructura contiene el nombre del registro, el recurso que generó la entrada de registro, la marca de tiempo (UTC) y otro tipo de información básica.

Los detalles del evento registrado se incluyen en un subcampo llamado carga útil. Para los registros de auditoría, el campo de carga útil se llama protoPayload. El valor de este campo es una estructura AuditLog, indicada por el valor del campo protoPayload.@type, que se configura como type.googleapis.com/google.cloud.audit.AuditLog.

Para las operaciones en conjuntos de datos, tablas y trabajos, BigQuery escribe registros de auditoría en dos formatos diferentes, aunque ambos comparten el tipo de base AuditLog.

En el formato anterior:

  • El campo resource.type es bigquery_resource.
  • Los detalles de la operación se escriben en el campo protoPayload.serviceData. El valor de este campo es una estructura AuditData.

En el formato más reciente:

  • El campo resource.type es bigquery_project o bigquery_dataset. El recurso bigquery_project tiene entradas de registro sobre los trabajos, mientras que el recurso bigquery_dataset tiene entradas de registro sobre el almacenamiento.
  • Los detalles de la operación se escriben en el campo protoPayload.metadata. El valor de este campo es una estructura BigQueryAuditMetadata.

Recomendamos consumir registros en el formato más reciente. Para obtener más información, consulta la guía de migración de registros de auditoría.

A continuación, se muestra un ejemplo abreviado de una entrada de registro que muestra una operación con errores:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset my-project:my-dataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

Para las operaciones en BigQuery Reservations, protoPayload es una estructura AuditLog y los campos protoPayload.request y protoPayload.response contienen más información para crear el adjunto de VLAN de supervisión. Puedes encontrar las definiciones de campo en la API de BigQuery Reservation. Para obtener más información, consulta Supervisa BigQuery Reservations.

INFORMATION_SCHEMA vistas

Las vistas INFORMATION_SCHEMA son otra fuente de estadísticas en BigQuery, que puedes usar junto con las métricas y los registros.

Estas vistas contienen metadatos sobre trabajos, conjuntos de datos, tablas y otras entidades de BigQuery. Por ejemplo, puedes obtener metadatos en tiempo real sobre qué trabajos de BigQuery se ejecutaron durante un período específico y, luego, agrupar o filtrar los resultados por proyecto, usuario, tablas a las que se hace referencia y otras dimensiones.

Puedes usar esta información para realizar un análisis más detallado sobre tus cargas de trabajo de BigQuery y responder preguntas como las siguientes:

  • ¿Cuál es el uso promedio de las ranuras de todas las búsquedas de los últimos 7 días de un proyecto determinado?
  • ¿Qué usuarios enviaron un trabajo de carga por lotes para un proyecto determinado?
  • ¿Qué errores de transmisión ocurrieron en los últimos 30 minutos, agrupados por código de error?

En particular, consulta los metadatos de trabajos, los metadatos de transmisión y los metadatos de reservas para obtener estadísticas sobre el rendimiento de tus cargas de trabajo de BigQuery.

Puedes encontrar ejemplos de consultas de INFORMATION_SCHEMA en GitHub que muestran el uso de ranuras y reservas de una organización, así como la ejecución de los trabajos y los errores de estos. Por ejemplo, mediante la siguiente consulta, se proporciona una lista de consultas que están pendientes o en ejecución. Estas consultas se ordenan por la cantidad de tiempo desde que se crearon en la región us:

SELECT
    creation_time,
    project_id,
    user_email,
    job_id,
    job_type,
    priority,
    state,
    TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), start_time,second) as running_time_sec
 FROM
   `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
 WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    AND state != "DONE"
ORDER BY
    running_time_sec DESC

Para obtener más información, consulta Soluciona problemas de rendimiento de BigQuery con estos paneles.

Si tienes reservas de ranuras, además de escribir tu propia consulta, puedes usar los gráficos de recursos de administración de BigQuery para ver los gráficos que muestran el uso de las ranuras, la simultaneidad y el tiempo de ejecución del trabajo. Si deseas obtener más información, consulta Introducción a los gráficos de recursos del administrador de BigQuery (vista previa).

¿Qué sigue?