Recording Rules
Estas reglas nos sirven para ir almacenando resultados que pueden tener un alto coste computacional, así se irán ejecutando periodicamente y guardando como una métrica que podemos usar, lo cual hará que sea mucho mas rápido a la hora de consultarla o usarla en cálculo de otras consultas. Són muy útiles para usar en paneles que se refrescan automáticamente, ya que se generará el calculo por detrás y no tendrá que ser el panel el que espere a la ejecución del cálculo.
Crear una Recording Rule
Para crear reglas debemos crear un fichero yaml y añadirlo en nuestro fichero de configuración de Prometheus, en
rule_files
. En mi fichero de configuración podemos ver como tengo añadido un fichero
prometheus.rules.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
- 'prometheus.rules.yml'
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'system'
static_configs:
- targets: ['192.168.1.30:9100', '192.168.1.31:9100', '192.168.1.32:9100']
labels:
group: "production"
Dentro de este fichero nuevo, prometheus.rules.yml, almacenaremos nuestras reglas de la siguiente forma:
groups:
- name: nombre del grupo
rules:
- record: nombre:de:la:regla
expr: expresión de consulta.
Ejemplo de Recording Rule
Os dejo un ejemplo sencillo y como se usa. Este ejemplo lo que hace es calcular el porcentaje de uso de CPU de todas las instancias para poder consultarlo luego, no es una consulta pesada pero como ejemplo es bastante útil.
La consulta que devuelve el valor es:
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
, podemos ejecutarla dentro de Prometheus para ver qué es lo que devuelve.
<div style="text-align: center;"> <a href="/prometheus/recording_rule_1.png"><img src="/prometheus/recording_rule_1.png" alt="prometheus recording rule" title="prometheus recording rule" /></a> </div>
Creamos el fichero de rutas. Este es el contenido de la prueba que he estado haciendo.
groups:
- name: Systems CPU Percentage
rules:
- record: systems:cpu_percentage_usage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
Posteriormente hay que añadir este fichero en el de configuración de Prometheus y reiniciamos el servicio de Prometheus.
Con esto ya tenemos la regla como una métrica mas para consultar en nuestro servidor.
Alerting Rules
Son reglas que queremos que lancen alertas si se cumplen las condiciones que establezcamos. Para crear estas reglas se hace de la misma forma que con las recording, con un fichero de reglas y añadiéndolo al fichero de configuración de Prometheus.
El formato de estas reglas es el siguiente:
- name: Nombre
rules:
- alert: NombreAlerta
expr: Expresión de consulta
for: 5m #tiempo en el que tiene que cumplirse la regla para saltar
labels:
severity: page
annotations:
summary: Texto de resumen
Y aquí va un ejemplo sobre la regla anterior, voy a hacer que salte una alerta si durante un minuto alguna CPU está a mas del 30% durante 5 minutos. Es una alerta tonta, pero es para ver el ejemplo rápidamente.
groups:
- name: Systems CPU Percentage
rules:
- record: systems:cpu_percentage_usage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
- alert: HighCPUUsage
expr: systems:cpu_percentage_usage > 30
for: 5m
labels:
severity: page
annotations:
summary: High CPU Usage
Cómo veis se puede usar la recording rule en la expresión.
Una vez reiniciamos el servicio podemos consultar nuestras alertas en http://192.168.1.31:9090/alerts, en la pestaña alerts.
En la siguiente imagen podemos ver la alerta creada
Si pinchamos en ella podremos ver que está en amarillo porque está pendiente. Ha encontrado una instancia que cumple la condición y está esperando los 5 minutos que le hemos dicho para ver si dispararse o no.
Si durante los 5 minutos se ha mantenido la condición la alerta se disparará, cambiando su color a rojo.
Validar el fichero de reglas
Si el fichero de reglas no es válido nos dará un error y no podremos ejecutar el servidor de Prometheus, así que existe una herramienta para validar los ficheros, eso si, necesitaremos tener go instalado en la máquina en la que la ejecutemos. Se usa de la siguiente manera:
go get github.com/prometheus/prometheus/cmd/promtool
promtool check rules /path/to/example.rules.yml
Yo no he sido capaz de hacerla funcionar en Raspbian, aunque tampoco lo he intentado demasiado.
Mas Info
Todo lo que cuento aquí es una base sobre la que empezar a trabajar, por ahora es lo único que he probado sobre reglas y alertas así que lo mejor es que sigáis investigando por vuestra cuenta si queréis saber mas sobre el tema. Para mas ejemplos y todas las opciones posibles lo mejor es leer la documentación oficial.
Cualquier duda puedes preguntarme por gnusocial.net.