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 campoexpr
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 valortrue
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 camponame
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 campoalert
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:
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
Autentica en la CLI de Google Cloud:
gcloud auth login
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}
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.
Para verificar que cuentas con un token de acceso, reproduce la variable
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....