Crear políticas de alertas basadas en PromQL (API)

En esta página se describe cómo crear una política de alertas basada en PromQL mediante la API Cloud Monitoring. Puede usar consultas de PromQL en sus políticas de alertas para crear condiciones complejas con funciones como ratios, umbrales dinámicos y evaluación de métricas.

Para obtener información general, consulta la descripción general de las alertas basadas en PromQL.

Si trabajas en un entorno de Prometheus fuera de Cloud Monitoring y tienes reglas de alertas de Prometheus, puedes usar la CLI de Google Cloud para migrarlas a políticas de alertas basadas en PromQL en Monitoring. Para obtener más información, consulta el artículo sobre cómo migrar reglas de alertas y receptores de Prometheus.

Crear políticas de alertas con consultas de PromQL

Puedes usar el método alertPolicies.create para crear políticas de alertas mediante programación.

La única diferencia entre crear políticas de alertas basadas en PromQL y otras políticas de alertas es que el tipo Condition debe ser PrometheusQueryLanguageCondition. Este tipo de condición permite definir políticas de alertas con PromQL.

A continuación, se muestra una consulta de PromQL para una condición de una política de alertas que usa una métrica del exportador kube-state para buscar el número de veces que se ha reiniciado un contenedor en los últimos 30 minutos:

rate(kube_pod_container_status_restarts[30m]) * 1800 > 1

Crear la política de alertas

Para crear una política de alertas basada en PromQL, usa el tipo de condición AlertPolicy PrometheusQueryLanguageCondition. El PrometheusQueryLanguageCondition tiene la siguiente estructura:

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "alertRule": string
}

Los campos PrometheusQueryLanguageCondition tienen las siguientes definiciones:

  • query: expresión de PromQL que se va a evaluar. Equivalente al campo expr de una regla de alerta estándar de Prometheus.
  • duration: especifica el periodo durante el cual cada evaluación de la consulta debe generar un valor true antes de que se cumpla la condición de la política de alertas. El valor debe ser un número de minutos expresado en segundos. Por ejemplo, 600s para una duración de 10 minutos. Para obtener más información, consulta el artículo sobre el comportamiento de las políticas de alertas basadas en métricas.
  • evaluationInterval: intervalo de tiempo, en segundos, entre las evaluaciones de PromQL de la consulta. El valor predeterminado es de 30 segundos. Si el PrometheusQueryLanguageCondition se ha creado migrando una regla de alertas de Prometheus, este valor procede del grupo de reglas de Prometheus que contenía la regla de alertas de Prometheus.

  • labels: una forma opcional de añadir o sobrescribir etiquetas en el resultado de la expresión PromQL.

  • ruleGroup: si la política de alertas se ha migrado desde un archivo de configuración de Prometheus, este campo contiene el valor del campo name del grupo de reglas del archivo de configuración de Prometheus. Este campo no es obligatorio cuando creas una política de alertas de PromQL en la API Cloud Monitoring.

  • alertRule: Si la política de alertas se ha migrado desde un archivo de configuración de Prometheus, este campo contiene el valor del campo alert de la regla de alerta del archivo de configuración de Prometheus. Este campo no es obligatorio cuando creas una política de alertas de PromQL en la API Cloud Monitoring.

Por ejemplo, la siguiente condición usa una consulta PromQL para buscar el número de veces que se ha reiniciado un contenedor en los últimos 30 minutos:

"conditionPrometheusQueryLanguage": {
  "query": "rate(kube_pod_container_status_restarts[30m]) * 1800 > 1",
  "duration": "600s",
  evaluationInterval: "60s",
  "alertRule": "ContainerRestartCount",
  "labels": {
    "action_required":"true",
    "severity":"critical/warning/info"}
}

Usa esta estructura como valor de un campo conditionPrometheusQueryLanguage en una condición, que a su vez está insertada en una estructura de política de alertas. Para obtener más información sobre estas estructuras, consulta AlertPolicy.

A continuación, se muestra una política completa con una condición PrometheusQueryLanguageCondition en JSON:

{
  "displayName": "Container Restarts",
  "documentation": {
    "content": "Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes.",
    "mimeType": "text/markdown",
    "subject": "Container ${resource.label.container_name} in Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes."
  },
  "userLabels": {},
  "conditions": [
    {
      "displayName": "Container has restarted",
      "conditionPrometheusQueryLanguage": {
        "query": "rate(kubernetes_io:container_restart_count[30m]) * 1800",
        "duration": "600s",
        evaluationInterval: "60s",
        "alertRule": "ContainerRestart",
        "labels": {
          "action_required":"true",
          "severity":"critical/warning/info"}
      }
    }
  ],
  "combiner": "OR",
  "enabled": true
}

Crear una política de alertas

Para crear la política de alertas, coloca el JSON de la política de alertas en un archivo llamado POLICY_NAME.json y, a continuación, ejecuta el siguiente comando:

curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN"
-H 'Content-Type: application/json'
-X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies

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

Para obtener más información sobre cómo usar curl, consulta Invocar curl.

Inhabilitar la comprobación de la existencia de métricas

Cuando creas una política de alertas basada en PromQL, Google Cloud se ejecuta una validación para comprobar que las métricas a las que se hace referencia en la condición ya existen en Monitoring. Sin embargo, puedes anular esta validación si necesitas crear una política de alertas antes de que existan las métricas. Por ejemplo, puede que quieras hacerlo cuando uses la automatización para crear proyectos nuevos que incluyan un conjunto estándar de políticas de alertas predefinidas. Si no inhabilitas la validación, no podrás crear la política de alertas hasta que se creen las métricas subyacentes.

Para inhabilitar la comprobación de la existencia de métricas, añade el campo "disableMetricValidation": true a tu archivo PrometheusQueryLanguageCondition:

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "disableMetricValidation": true,
  "alertRule": string
}

Si la condición de una política de alertas hace referencia a una métrica que no existe, la condición se sigue ejecutando según su intervalo de evaluación. Sin embargo, el resultado de la consulta siempre está vacío. Una vez que exista la métrica subyacente, la consulta devolverá datos.

Usar Terraform

Para obtener instrucciones sobre cómo configurar políticas de alertas basadas en PromQL con Terraform, consulta la sección condition_prometheus_query_language del google_monitoring_alert_policyregistro de Terraform.

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

Invocando curl

Cada invocación de curl incluye un conjunto de argumentos, seguido de la URL de un recurso de la API. Entre los argumentos habituales se incluyen a Google Cloud un ID de proyecto y un token de autenticación. Estos valores se representan aquí mediante las variables de entorno PROJECT_ID y TOKEN.

También es posible que tengas que especificar otros argumentos, como el tipo de solicitud HTTP (por ejemplo, -X DELETE). La solicitud predeterminada es GET, por lo que no se especifica en los ejemplos.

Cada invocación de curl tiene esta estructura general:

curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>

Para usar curl, debes especificar el ID de tu proyecto y un token de acceso. Para reducir la escritura y los errores, puedes ponerlos en variables de entorno o pasarlos a curl de esa forma.

Para definir estas variables, haz lo siguiente:

  1. Crea una variable de entorno que contenga el ID del proyecto de ámbito de un ámbito de métricas. En estos pasos se llama a la variable PROJECT_ID:

    PROJECT_ID=a-sample-project
    
  2. Autentícate en Google Cloud CLI:

    gcloud auth login
    
  3. Opcional. Para no tener que especificar el ID de proyecto con cada comando gcloud, puedes definirlo como predeterminado mediante la CLI de gcloud:

    gcloud config set project ${PROJECT_ID}
    
  4. Crea un token de autorización y guárdalo en una variable de entorno. En estos pasos se llama a la variable TOKEN:

    TOKEN=`gcloud auth print-access-token`
    

    Debes actualizar periódicamente el token de acceso. Si los comandos que funcionaban de repente informan de que no estás autenticado, vuelve a emitir este comando.

  5. Para verificar que has obtenido un token de acceso, muestra la variable TOKEN:

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