Una ventana de mantenimiento es un periodo de tiempo en el que un servidor va a estar caÃdo de forma controlada por una tarea administrativa, ya sea sustituir alguna pieza de hardware, actualizar algún software que precise de un reinicio o incluso puede deberse a alguna operación realizada en la electrónica de red que conecta el servidor.
Durante estos periodos de tiempo debemos deshabilitar las alarmas del servidor intervenido para que no moleste mientras se realizan las tareas, en este artÃculo programaremos un pequeño script para generar dichas ventanas de mantenimiento en AlertManager de forma rápida y sencilla.
El script en cuestión es el siguiente:
#!/usr/bin/env bash
# https://github.com/prometheus/alertmanager/blob/master/api/v2/openapi.yaml
if [ "$#" -ne 2 ]; then
echo "ERROR: Instance and manteinance window time in minutes must be indicated!"
exit
fi
URL='http://pmm.alfaexploit.com:9093/api/v2/silences'
USERNAME='admin'
PASSWORD='XXXXX'
SERVER=$1
# Convert to seconds
MANTEINANCE_WINDOW=$(($2 * 60))
#echo MANTEINANCE_WINDOW: $MANTEINANCE_WINDOW's'
uname -a|grep FreeBSD 1>/dev/null
if [ $? -eq 0 ]; then
OS=FREEBSD
else
OS=LINUX
fi
currentEpochDate=$(date +%s)
if [ $OS == "FREEBSD" ]; then
startsAt=$(date -u -r $currentEpochDate +%Y-%m-%dT%H:%M:%S)
else
startsAt=$(date -u -d @$currentEpochDate +%Y-%m-%dT%H:%M:%S)
fi
echo "startsAt-UTC: $startsAt"
finalEpochDate=$((currentEpochDate + MANTEINANCE_WINDOW))
if [ $OS == "FREEBSD" ]; then
endsAt=$(date -u -r $finalEpochDate +%Y-%m-%dT%H:%M:%S)
else
endsAt=$(date -u -d @$finalEpochDate +%Y-%m-%dT%H:%M:%S)
fi
echo "endsAt-UTC: $endsAt"
curl -sS -H "Content-Type: application/json" -u $USERNAME:$PASSWORD $URL -X POST -d '{"comment": "Kr0m-manteinanceWindow","createdBy": "Kr0m-manteinanceWindow","startsAt": "'"$startsAt"'", "endsAt": "'"$endsAt"'","matchers": [{"isRegex": false,"name": "instance","value": "'"$SERVER"'"}]}'
Le asignamos los permisos necesarios:
Probamos a generar un silencio de mantenimiento de 2h:
startsAt-UTC: 2020-11-21T10:21:31
endsAt-UTC: 2020-11-21T12:21:31
{"silenceID":"1288e299-096c-419a-8285-5f5bbec2ceae"}
Si accedemos a la interfaz del AlertManager podemos ver el silencio:
http://pmm.alfaexploit.com:9093/#/alerts
Podemos ver las 2h de mantenimiento en los detalles:
Cuando terminemos con las tareas de mantenimiento simplemente debemos expirar el silencio presionando el botón Expire.