PMM2: Ventana de mantenimiento API AlertManager


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:

vi Mantenimiento.sh
#!/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:

chmod 700 ./Mantenimiento.sh

Probamos a generar un silencio de mantenimiento de 2h:

./Mantenimiento.sh kr0mtest 120
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.

Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 21/11/2020 11:12:42 -- Categoria: Monitoring