Introducción a la monitorización de BigQuery

La monitorización y el registro son fundamentales para ejecutar aplicaciones fiables en la nube. Las cargas de trabajo de BigQuery no son una excepción, sobre todo si tu carga de trabajo tiene volúmenes elevados o es esencial. En este documento se proporciona una descripción general de los datos de monitorización disponibles en BigQuery.

Las fuentes de monitorización y registro pueden variar en función de la frecuencia de muestreo o agregación. Por ejemplo, los datos del esquema de información pueden estar disponibles con un nivel de granularidad superior al de los datos de métricas de Cloud Monitoring.

Por lo tanto, es posible que los gráficos de métricas con una granularidad inferior parezcan desviarse de las estadísticas comparables del esquema de información. La agregación tiende a suavizar las discrepancias. Cuando diseñes una solución de monitorización, evalúa el tiempo de respuesta de las solicitudes, la precisión y la exactitud de las métricas en función de tus requisitos.

Métricas

Las métricas son valores numéricos que se recogen a intervalos regulares y se ponen a disposición para su análisis. Puedes usar las métricas para lo siguiente:

  • Crea gráficos y paneles de control.
  • Activa alertas en condiciones o situaciones que requieran la intervención humana.
  • Analizar el historial de rendimiento.

En el caso de BigQuery, las métricas disponibles incluyen el número de tareas que se están ejecutando, cuántos bytes se han analizado durante una consulta y la distribución de los tiempos de consulta. Las métricas de una consulta solo están disponibles cuando la consulta se completa correctamente y pueden tardar hasta siete minutos en generarse. No se registran las métricas de las consultas que fallan. Para ver una lista completa de las métricas disponibles, incluidas sus tasas de muestreo, visibilidad y limitaciones, consulta bigquery en Google Cloud Métricas.

Usa Cloud Monitoring para ver las métricas de BigQuery y crear gráficos y alertas. Cada métrica tiene un tipo de recurso (bigquery_dataset, bigquery_project o global) y un conjunto de etiquetas. Puedes agrupar o filtrar cada métrica mediante las etiquetas.

Por ejemplo, para representar gráficamente el número de consultas interactivas en curso, usa la siguiente instrucción de PromQL, que filtra por priority igual a interactive:

{"bigquery.googleapis.com/query/count", monitored_resource="global", priority="interactive"}

En el siguiente ejemplo se obtiene el número de tareas de carga en curso, agrupadas en intervalos de 10 minutos:

avg_over_time({"bigquery.googleapis.com/job/num_in_flight",
  monitored_resource="bigquery_project",
  job_type="load"
}[10m])

Para obtener más información, consulta el artículo sobre cómo crear gráficos y alertas de BigQuery.

Registros

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

Un registro es una colección de entradas de registro a la que solo se pueden añadir elementos. Por ejemplo, puedes escribir tus propias entradas de registro en un registro llamado projects/PROJECT_ID/logs/my-test-log. MuchosGoogle Cloud servicios, incluido BigQuery, crean un tipo de registro llamado registros de auditoría. En estos registros se incluye la siguiente información:

  • Actividad administrativa, como crear o modificar recursos.
  • Acceso a los datos, como la lectura de datos proporcionados por el usuario de un recurso.
  • Eventos del sistema generados por los sistemas de Google, en lugar de por las acciones de los usuarios.

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

Los detalles del evento registrado se encuentran en un subcampo llamado carga útil. En 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 es type.googleapis.com/google.cloud.audit.AuditLog.

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

En el formato antiguo:

  • 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 puede ser bigquery_project o bigquery_dataset. El recurso bigquery_project tiene entradas de registro sobre trabajos, mientras que el recurso bigquery_dataset tiene entradas de registro sobre almacenamiento.
  • Los detalles de la operación se escriben en el campo protoPayload.metadata. El valor de este campo es una estructura BigQueryAuditMetadata.

Te recomendamos que uses los 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.

Aquí tienes un ejemplo abreviado de una entrada de registro que muestra una operación fallida:

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

En las operaciones de reservas de BigQuery, protoPayload es una estructura AuditLog y los campos protoPayload.request y protoPayload.response contienen más información. Puede consultar las definiciones de los campos en la API de reserva de BigQuery. Para obtener más información, consulta el artículo sobre cómo monitorizar reservas de BigQuery.

Vistas de BigQuery INFORMATION_SCHEMA

Las vistas de INFORMATION_SCHEMA son otra fuente de información valiosa en BigQuery, que puedes usar junto con métricas y registros.

Estas vistas contienen metadatos sobre tareas, conjuntos de datos, tablas y otras entidades de BigQuery. Por ejemplo, puedes obtener metadatos en tiempo real sobre las tareas de BigQuery que se han ejecutado durante un periodo específico y, a continuación, agrupar o filtrar los resultados por proyecto, usuario, tablas a las que se hace referencia y otras dimensiones.

Puede usar esta información para llevar a cabo análisis más detallados sobre sus cargas de trabajo de BigQuery y responder a preguntas como las siguientes:

  • ¿Cuál es la utilización media de las ranuras de todas las consultas de un proyecto concreto en los últimos 7 días?
  • ¿Qué usuarios han enviado una tarea de carga por lotes para un proyecto concreto?
  • ¿Qué errores de streaming se han producido en los últimos 30 minutos, agrupados por código de error?

En concreto, consulta los metadatos de los trabajos, los metadatos de la transmisión y los metadatos de las reservas para obtener información valiosa sobre el rendimiento de tus cargas de trabajo de BigQuery.

En GitHub puedes encontrar INFORMATION_SCHEMAconsultas de ejemplo que muestran la utilización de ranuras y reservas, la ejecución de trabajos y los errores de trabajos de una organización. Por ejemplo, la siguiente consulta proporciona una lista de consultas pendientes o en curso. Estas consultas se ordenan por el tiempo transcurrido 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 el artículo sobre cómo solucionar problemas de rendimiento de BigQuery con estos paneles de control.

Si tienes reservas de ranuras, además de escribir tu propia consulta, puedes usar los gráficos de recursos de administrador de BigQuery para ver gráficos que muestren el uso de las ranuras, la simultaneidad de las tareas y el tiempo de ejecución de las tareas. Para obtener más información, consulta Monitorizar el estado, el uso de recursos y los trabajos.

Siguientes pasos