Monitorizar los resultados de una consulta de SQL con una política de alertas

En este documento se explica cómo crear una política de alertas para monitorizar los resultados de una consulta que ejecutes en Log Analytics. Estas consultas se escriben en SQL y deben consultar una vista de registro. La política de alertas te avisa cuando el resultado de la consulta cumple las condiciones que especifiques. Por ejemplo, puedes configurar una política de alertas para que se te notifique cuando al menos el 25% de las entradas de registro de un periodo determinado tengan una gravedad de ERROR.

Las políticas de alertas que creas en la página Analíticas de registros se ejecutan en un motor de BigQuery. Por lo tanto, los datos que se consulten deben ser accesibles a través de un conjunto de datos de BigQuery vinculado. Por este motivo, estas consultas de SQL solo pueden consultar vistas de registro. No pueden consultar vistas de Analytics.

Para obtener información general sobre Analíticas de registros, consulta Consultar y analizar registros con Analíticas de registros.

Cómo funcionan las políticas de alertas

Una política de alertas describe las circunstancias en las que quieres recibir alertas y cómo quieres que se te notifique un incidente. Hay tres enfoques diferentes que puedes usar para recibir notificaciones cuando aparezcan contenido o patrones en tus datos de registro:

  • Para analizar entradas de registro individuales en busca de una frase específica, crea una política de alertas basada en registros. Usa estas políticas de alertas cuando quieras recibir notificaciones sobre eventos relacionados con la seguridad, por ejemplo.

  • Para monitorizar los eventos de los datos de entrada de registro, puedes crear una métrica basada en registros y, a continuación, crear una política de alertas para monitorizar la métrica. Estos tipos de políticas de alertas son útiles cuando quieres monitorizar las tendencias de los datos de las entradas de registro a lo largo del tiempo. Sin embargo, no son tan eficaces si solo esperas unos pocos eventos.

  • Para monitorizar el análisis agregado de los datos de las entradas de registro, combina Log Analytics con políticas de alertas. En este caso, actualizas un segmento de registro para usar Analíticas de registros y creas un conjunto de datos de BigQuery vinculado para ese segmento de registro. A continuación, usa Analíticas de registros, que admite consultas de SQL, para consultar una vista de registro en el contenedor de registros. Por último, crea la política de alertas para monitorizar los resultados de la consulta de SQL. Este tipo de política de alertas se denomina política de alertas basada en SQL.

Las políticas de alertas basadas en SQL son más eficaces para evaluar valores exactos en varias entradas de registro. Si quieres evaluar entradas de registro concretas, crea una política de alertas basada en registros.

En el resto de este documento se describe cómo usar las políticas de alertas basadas en SQL.

Componentes de las políticas de alertas

Una política de alertas basada en SQL contiene una condición y una programación:

  • La condición contiene la consulta, que es una consulta de SQL que consulta una vista de registro. La condición también define las circunstancias en las que el resultado de la consulta provoca que Monitoring cree un incidente.

  • La programación define la frecuencia con la que la política de alertas ejecuta su consulta. La programación también define el tamaño de la ventana retrospectiva, que es un filtro que selecciona solo las entradas de registro que se han recibido desde la última vez que se evaluó la consulta. Por ejemplo, si define la programación en 60 minutos, la consulta se ejecutará cada 60 minutos con una ventana retrospectiva que seleccionará los 60 minutos más recientes de las entradas de registro.

Las políticas de alertas también contienen una lista de canales de notificación. Cuando se cumple la condición de la política de alertas, Cloud Monitoring crea un incidente y, a continuación, envía notificaciones sobre el incidente a través de estos canales. Un incidente es un registro de los datos que han provocado que se cumpla la condición, junto con otra información relevante. Esta información puede ayudarte a solucionar los problemas que han provocado el incidente. Para ver el incidente, usa la Google Cloud consola.

Tipos de evaluación de las políticas de alertas basadas en SQL

Las condiciones que monitorizan el resultado de una consulta SQL admiten dos tipos de evaluación:

  • Umbral de recuento de filas: la condición se cumple cuando el número de filas del resultado de la consulta es mayor, igual o menor que un valor de umbral.

    Por ejemplo, supongamos que quiere recibir una notificación cuando más de 50 entradas de registro de la ventana retrospectiva tengan una gravedad superior a 200. Crea una consulta que genere un informe de las entradas de registro cuya gravedad sea superior a 200. A continuación, configura una condición, selecciona el Umbral de recuento de filas y establece el umbral en 50.

  • Booleano: la condición se cumple cuando una columna booleana específica de la tabla de resultados de la consulta contiene alguna fila con el valor true.

    Por ejemplo, supongamos que quiere recibir una notificación cuando más del 25% de las entradas de registro de la ventana retrospectiva tengan una gravedad de ERROR. Crea una consulta que calcule el porcentaje de entradas de registro cuyo nivel de gravedad sea ERROR. La consulta escribe los resultados true en la columna notify cuando ese porcentaje supera el 25%. A continuación, crea una condición, define el tipo como Booleano y configura la condición para monitorizar la columna notify.

Las políticas de alertas que monitorizan el resultado de una consulta de SQL solo pueden tener una condición.

Políticas de alertas y BigQuery

Cuando una política de alertas ejecuta una consulta SQL, esta se ejecuta con los slots de BigQuery reservados en el Google Cloud proyecto en el que se define la política de alertas. Para obtener más información, consulta Trabajar con reservas de ranuras.

Para que una política de alertas use ranuras de BigQuery reservadas para consultar una vista de registro, el bucket de registro que aloja la vista de registro debe configurarse para que tenga un conjunto de datos de BigQuery vinculado. Los conjuntos de datos vinculados permiten que BigQuery lea los datos del contenedor de registros y que puedas usar funciones de BigQuery en los datos devueltos por tu consulta SQL.

Entradas de registro evaluadas

Para que una entrada de registro se evalúe mediante la consulta SQL de una política de alertas, deben cumplirse las dos condiciones siguientes:

  • La marca de tiempo de recepción de la entrada de registro, que registra cuándo recibió Cloud Logging la entrada de registro, debe estar dentro del periodo retrospectivo de la política de alertas.
  • La marca de tiempo de la entrada de registro, que registra cuándo se generó la entrada de registro, debe estar dentro de los 15 minutos de la ventana retrospectiva.

Por ejemplo, tu política de alertas basada en SQL tiene una ventana retrospectiva de 60 minutos. Analíticas de registros ejecuta la consulta de SQL de la política de alertas a las 13:30. Para incluirse en la consulta, una entrada de registro debe cumplir los dos criterios siguientes:

  • La marca de tiempo recibida debe estar entre las 12:30 y las 13:30.
  • La marca de tiempo debe estar entre las 12:15 y las 13:45.

Cuando ejecutas una consulta desde la interfaz de Log Analytics, todas las entradas de registro del intervalo de tiempo seleccionado se evalúan en función de la marca de tiempo de la entrada de registro.

Ventana retrospectiva y tiempo de propagación de incidentes

Cuando se programa una política de alertas para evaluar su condición, Analíticas de registros retrasa la ejecución de la consulta de SQL cinco minutos para dar tiempo a Cloud Logging a indexar las entradas de registro recibidas durante el periodo retrospectivo. Por ejemplo, si la política de alertas usa un periodo retrospectivo que termina a las 14:00, Analíticas de registros no ejecuta la consulta de SQL hasta las 14:05.

Si se cumple la condición de la alerta después de ejecutar la consulta, el incidente puede tardar hasta dos minutos más en propagarse por el sistema.

Errores de consulta

Las consultas emitidas por políticas de alertas basadas en SQL pueden fallar por varios motivos, entre los que se incluyen los siguientes:

  • La cuenta de servicio de Monitoring ya no existe o ya no tiene los permisos necesarios para leer los datos de registro que se están consultando.

  • El tiempo de ejecución de la consulta supera los cinco minutos.

  • Se produce un error interno.

Si una consulta falla, se genera una entrada de registro que contiene el ID de la política de alertas y el estado del error. Puedes usar una política de alertas basada en registros para crear una alerta cuando se registre un error.

Antes de empezar

En esta sección se da por hecho que has actualizado tu contenedor de registros para usar Analíticas de registros y que puedes consultar y ver tus datos de registro en la página Analíticas de registros. También se da por hecho que ya has creado un conjunto de datos de BigQuery vinculado para tu segmento de registro.

Antes de crear una política de alertas basada en SQL, sigue estos pasos:

  1. Para obtener los permisos que necesitas para crear y gestionar políticas de alertas basadas en SQL, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

  2. Comprueba que la cuenta de servicio de monitorización exista y que tenga los siguientes roles:

    1. Agente del servicio de monitorización (roles/monitoring.notificationServiceAgent) en tu proyecto.
    2. Lector de datos de BigQuery (roles/bigquery.dataViewer) en el conjunto de datos vinculado.

    Si la cuenta de servicio de monitorización no existe, consulta Solucionar problemas: no hay cuenta de servicio de monitorización.

  3. Para habilitar que tus políticas de alertas basadas en SQL se ejecuten en slots de BigQuery reservados, haz lo siguiente:
    1. Configurar slots de BigQuery reservados.
    2. Asigna las ranuras reservadas a tu Google Cloud proyecto.
  4. Configura los canales de notificaciones que quieras usar para recibir notificaciones de incidentes. Por motivos de redundancia, te recomendamos que crees varios tipos de canales de notificación. Para obtener más información, consulta Crear y gestionar canales de notificación.

Crear una política de alertas basada en SQL

Para crear una política de alertas basada en SQL, haz lo siguiente:

Google Cloud consola

  1. En la Google Cloud consola, ve a la página Analíticas de registros:

    Vaya a Analíticas de registros.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.

  2. En la página Analíticas de registros, en el editor de consultas, introduce una consulta de SQL para una vista de registro.

    Para obtener más información sobre cómo escribir consultas de SQL para vistas de registro, consulta Consultar una vista de registro.

  3. En la barra de herramientas, haz clic en Ejecutar en BigQuery.

    Analíticas de registros ejecuta la consulta en el motor de BigQuery y muestra los resultados en la tabla Resultados.

    Si no se muestra la opción Ejecutar en BigQuery, haz clic en Seleccionar motor de consulta y, a continuación, en BigQuery. El botón Ejecutar consulta cambia a Ejecutar en BigQuery.

  4. En la tabla Resultados de la página Analíticas de registros, haga clic en  Crear alerta.

    En la página Analíticas de registros, se muestra la ventana Crear política de alertas de SQL, en la que se muestra tu consulta en la sección Consulta de SQL.

  5. En la sección Condición de alerta, configura la condición y la programación de tu política de alertas.

  6. Configura los detalles de la alerta de tu política de alertas.

    1. Añade canales de notificaciones y configura el contenido de las notificaciones, como una línea de asunto personalizada.

    2. Opcional: Añade etiquetas de política de alertas y documentación.

    3. Haz clic en Siguiente.

  7. Revisa la política de alertas y, a continuación, haz clic en Guardar para crearla.

API de Cloud Monitoring

Usa el método alertPolicies.create para crear políticas de alertas mediante programación. El Condition tipo de tu política de alertas debe ser conditionSql, que es una instancia de SqlCondition. Este tipo de condición permite definir las condiciones de tu política de alertas con SQL.

Para definir la programación, asigna un valor periodicity a uno de los campos minutes, hours o days. Por ejemplo, si quieres que la consulta se ejecute cada 12 horas, asigna el valor 12 al campo hours.

Para definir la condición, usa los siguientes campos:

  • boolean_test: configura la política de alertas para que se cumpla su condición cuando una fila de una columna booleana de la tabla de resultados de la consulta contenga un valor true.
  • row_count_test: configura la política de alertas para que se cumpla su condición cuando el número de filas de la tabla de resultados de la consulta alcance un determinado umbral.

Para ver una lista completa de los campos y sus definiciones, consulta SqlCondition en la documentación de la API Cloud Monitoring.

Para obtener más información sobre la API Monitoring para políticas de alertas, consulta Gestionar políticas de alertas mediante la API.

Terraform

  1. Instala y configura Terraform para tu proyecto. En el caso de las configuraciones de App Hub, seleccione el proyecto host de App Hub o el proyecto de gestión de la carpeta habilitada para aplicaciones.

  2. En Cloud Shell, ve al directorio que contiene tu configuración de Terraform.

  3. En tu configuración de Terraform, configura una instancia del recurso google_monitoring_alert_policy, incluido condition_sql.

  4. En Cloud Shell, escribe terraform apply.

Para modificar tu política de alertas, haz los cambios que quieras y vuelve a aplicar la configuración de Terraform. Para obtener más información, consulta Gestionar políticas de alertas con Terraform.

Para obtener información general sobre el uso de Google Cloud con Terraform, consulta Terraform con Google Cloud.

Limitaciones

  • Puedes tener una condición por política de alertas basada en SQL.

  • Las políticas de alertas basadas en SQL no pueden consultar una vista de analíticas.

  • Las consultas emitidas por políticas de alertas basadas en SQL fallan cuando su tiempo de ejecución supera los cinco minutos.

  • Hay un retraso de hasta siete minutos, más el tiempo de ejecución de la consulta, entre el momento en que se programa una consulta y el momento en que se crea un incidente.

Para ver una lista completa de los límites asociados a las políticas de alertas, consulta Límites de Monitoring.

Precios

Para obtener información sobre los precios, consulte los siguientes documentos:

Siguientes pasos