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

En esta página, se describe cómo crear una política de alertas con un enfoque con la API de Cloud Monitoring. Puedes usar PromQL en tus políticas de alertas para crear condiciones complejas con como razones, umbrales 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 reglas de alerta de Prometheus, puedes usar la Google Cloud CLI migrarlas a las políticas de alertas de Monitoring con PromQL para cada búsqueda. Para obtener más información, consulta Migra las reglas de alerta y los 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 forma programática.

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

A continuación, se muestra una consulta de PromQL para una política de alertas condición que usa una métrica del exportador de kube-state para encontrar la cantidad de las veces que se reinició un contenedor en los últimos 30 minutos:

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

Construye la política de alertas

Para crear una política de alertas con una condición basada en PromQL, usa el comando AlertPolicy tipo de condición 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 de PromQL que se evaluará. Equivale al Campo expr de una regla de alertas estándar de Prometheus.
  • duration: Especifica la cantidad de tiempo durante que cada evaluación de la consulta debe generar un valor true antes de se activa la política de alertas. El valor debe ser una cantidad de minutos expresada en segundos; por ejemplo, 600s por 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: El intervalo de tiempo, en segundos, entre PromQL y evaluaciones de la consulta. El valor predeterminado es 30 segundos. Si el botón PrometheusQueryLanguageCondition se creó a través de la migración de una instancia de Prometheus regla de alerta, 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 PromQL. de expresión de entrada de texto.

  • ruleGroup: Si la política de alertas se migró desde un Prometheus archivo de configuración, este campo contiene el valor del campo name del grupo de reglas en la consola de Terraform. 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 Prometheus archivo de configuración, este campo contiene el valor del campo alert desde la regla de alerta en la consola de Terraform. 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 buscar 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 de 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 un 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 la política de alertas JSON 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

Si deseas 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 Cómo invocar curl.

Con Terraform

Si deseas obtener instrucciones para configurar las políticas de alertas basadas en PromQL con Terraform, consulta la sección condition_prometheus_query_language de la google_monitoring_alert_policy Terraform de registros.

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 del proyecto con cada gcloud establece tu ID del proyecto 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....