Crea políticas de alertas con una condición basada en PromQL (API)

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

Para obtener información general, consulta Políticas de alertas con PromQL.

Si trabajas en un entorno de Prometheus fuera de Cloud Monitoring y tienes reglas de alertas de Prometheus, puedes usar Google Cloud CLI para migrarlas a las políticas de alertas de Monitoring con una consulta de PromQL. Para obtener más información, consulta Migra reglas de alertas y receptores de Prometheus.

Crea políticas de alertas con consultas de PromQL

Usa el método alertPolicies.create para crear políticas de alertas de manera programática.

La única diferencia entre crear políticas de alertas con condiciones basadas en PromQL y otras políticas de alertas es que tu tipo de 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 política de alertas que usa una métrica del exportador kube-state para encontrar la cantidad de veces que se reinició un contenedor en los últimos 30 minutos:

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

Cómo crear la política de alertas

Para compilar una política de alertas con una condición basada en PromQL, usa el tipo de condición AlertPolicy PrometheusQueryLanguageCondition. 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: Es la expresión PromQL que se evaluará. Equivale al campo expr de una regla de alerta estándar de Prometheus.
  • duration: Especifica el tiempo durante el cual cada evaluación de la consulta debe generar un valor true antes de que se active la política de alertas. El valor debe ser una cantidad de minutos, expresada en segundos; por ejemplo, 600s para una duración de 10 minutos. Para obtener más información, consulta Comportamiento de las políticas de alertas basadas en métricas.
  • evaluationInterval: Es el intervalo de tiempo, en segundos, entre las evaluaciones de PromQL de la consulta. El valor predeterminado es 30 segundos. Si se creó PrometheusQueryLanguageCondition migrando una regla de alertas de Prometheus, este valor proviene del grupo de reglas de Prometheus que contenía la regla de alertas de Prometheus.

  • labels: Es una forma opcional de agregar o reemplazar etiquetas en el resultado de la expresión de PromQL.

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

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

Por ejemplo, la siguiente condición usa una consulta de PromQL para encontrar la cantidad de veces que se reinició 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 el valor de un campo conditionPrometheusQueryLanguage en una condición, que a su vez está incorporada 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
}

Crea 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, luego, 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 de Monitoring para las políticas de alertas, consulta Administra las políticas de alertas con la API.

Para obtener más información sobre el uso de curl, consulta Invoca curl.

Usa 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 registro de Terraform de google_monitoring_alert_policy.

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

Invoca curl

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

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

Cada invocación 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 del proyecto y un token de acceso. Para reducir la escritura y los errores, puedes colocarlos en variables de entorno a fin de pasarlos a curl de esa manera.

Para configurar estas variables, haz lo siguiente:

  1. Crea una variable de entorno para guardar el ID de tu proyecto de permisos de un permiso de métricas. Mediante estos pasos, se llama a la variable PROJECT_ID:

    PROJECT_ID=a-sample-project
    
  2. Autentica en la CLI de Google Cloud:

    gcloud auth login
    
  3. Opcional. Para evitar tener que especificar el ID de tu proyecto con cada comando gcloud, configúralo como predeterminado con gcloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Crea un token de autorización y captúralo en una variable de entorno. Mediante estos pasos, se llama a la variable TOKEN:

    TOKEN=`gcloud auth print-access-token`
    

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

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

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