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 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 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 que las políticas de alertas se definan 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 de PromQL que se evaluará. Equivale al Campoexpr
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 valortrue
antes de se activa 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
: El intervalo de tiempo, en segundos, entre PromQL y evaluaciones 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
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 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
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 Invoca curl
.
Usa Terraform
Si deseas obtener instrucciones para configurar 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:
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 del proyecto con cada
gcloud
establece tu ID del proyecto 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....