Envía alertas por correo electrónico sin licencia (Gold) de Kibana
Las notificaciones en Elastic Kibana Free edition, están restringidas a solo la creación de índice y registro en log, usar otro tipos de conectores, requiere una licencia Gold.
Nuestro objetivo es enviar correo, incluso mensaje de texto con cada alerta que se generan en kibana, para ello vamos apoyarnos de librerías y utilitarios en linux, en este post se ha realizado el envío desde un Linux Ubuntu 22.04.
Instalamos requeridas:
apt-get install swatch apt-get install jq apt-get install mailutils
Ahora debemos identificar la ruta de log de kibana, normalmente es:
/log/kibana/kibana.log
Cada vez que se genera una alerta, se registrará en el log, un mensaje similar a esta:
{"service":{"node":{"roles":["background_tasks","ui"]}},"ecs":{"version":"8.4.0"},"@timestamp":"2023-06-04T22:20:32.081+00:00","message":"Server log: Monitor (Nombre del monitor XXX) with url https://api.miempresa.com/api/clientes has recovered with status Up","log":{"level":"INFO","logger":"plugins.actions.server-log"},"process":{"pid":543029},"trace":{"id":"4c78054535a5a5fa47375001a7c3a01d"},"transaction":{"id":"ca3102c7e809fce5"}}
Ahora creamos el archivo .swatchdogrc:
vi /root/.swatchdogrc
watchfor /Server log/ exec /root/scripts/swatchdog-notify.sh '$_'
Creamos el archivo swatchdog-notify.sh
#!/bin/bash echo $1 > message.txt mensaje=$(jq ".message" message.txt) if [[ $(echo "$mensaje" | grep -i "Monitor") ]]; then if [[ $(echo "$mensaje" | grep -i "Up") ]]; then monitor=$(echo "$mensaje" | grep -oP '\((.*?)\)' | head -1 | tr -d '()') CONTENT=$(sed -e 's/{{monitor}}/'"$monitor"'/g' -e 's|{{status}}|'"$mensaje"'|g' -e 's/{{mensaje}}/DISPONIBLE/g' -e 's/{{color}}/green/g' -e 's/{{color2}}/green/g' /opt/elastic/template/template_email_alert.html) mail -a "Content-Type: text/html" -s "Alerta - Monitoreo $monitor" -a "From: alerts_elastic@midomain.com" $(cat /opt/elastic/notificacion/list_emails_alerts.txt) <<< $CONTENT /opt/elastic/scripts/script_enviar_sms.sh "$monitor" "DISPONIBLE" echo "Correo enviado correctamente STATUS ..." else monitor=$(echo "$mensaje" | grep -oP '\((.*?)\)' | head -1 | tr -d '()') CONTENT=$(sed -e 's/{{monitor}}/'"$monitor"'/g' -e 's|{{status}}|'"$mensaje"'|g' -e 's/{{mensaje}}/NO DISPONIBLE/g' -e 's/{{color}}/red/g' -e 's/{{color2}}/red/g' /opt/elastic/template/template_email_alert.html) mail -a "Content-Type: text/html" -s "Alerta - Monitoreo $monitor" -a "From: alerts_elastic@midomain.com" $(cat /opt/elastic/notificacion/list_emails_alerts.txt) <<< $CONTENT /opt/elastic/scripts/script_enviar_sms.sh "$monitor" "NO DISPONIBLE" echo "Correo enviado correctamente ERROR ..." fi else echo "No tiene formato de monitoreao elastic" fi
[Unit]
Description=Swatchdog Service
After=network.target
[Service]
Type=forking
User=root
ExecStart=/usr/bin/swatchdog --daemon -c /root/.swatchdogrc -t '/var/log/kibana/kibana.log'
[Install]
WantedBy=multi-user.target
0 comments:
Publicar un comentario