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 campoexpr
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 valortrue
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 elPrometheusQueryLanguageCondition
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 camponame
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 campoalert
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_policy
registro 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:
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
Autentícate en Google Cloud CLI:
gcloud auth login
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}
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.
Para verificar que has obtenido un token de acceso, muestra la variable
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....