HAproxy: запустить скрипт при изменении проверки работоспособности
Я настроил конфигурацию haproxy с бэкендом, где два сервера выглядят так:
...
default
option log-health-checks
...
mailers mta
mailer smtp1 127.0.0.1:25
...
backend s_api
balance roundrobin
option httpchk GET /sites?site=q&limit=1
http-check expect rstatus (2|3)[0-9][0-9]
server s1_a 1.2.3.4:3600 check inter 5s fall 4 rise 1
server s2_b 1.2.3.5:3600 check backup
timeout queue 60s
timeout server 60s
timeout connect 60s
email-alert mailers mta
email-alert level notice
email-alert from haproxy@example.com
email-alert to ops@example.com
Теперь я получаю уведомление по электронной почте, когда сервер снова выходит из строя. Что я хотел бы заархивировать, так это запустить локальный скрипт bash, когда сервер работает, и еще один, когда сервер выходит из строя.
Как это могло быть сделано?
1 ответ
Я, вероятно, сделал бы это с помощью внешнего сценария проверки и использовал бы его для управления значениями взлета и падения. Затем, когда вы встретите значение повышения или понижения, вы можете запустить свой собственный скрипт. Установите взлет и падение в конфигурации haproxy равным 1 и измените проверку на внешнюю.
external-check command ping.sh
server s1_a 1.2.3.4:3600 check inter 5s fall 1 rise 1
server s2_b 1.2.3.5:3600 check backup
timeout queue 60s
timeout server 60s
timeout connect 60s
Затем в качестве грубого примера с проверкой внешнего пинга
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# Set the maximum time in seconds to allow ping to run, 1-10 is a sensible range.
TMEOUT=1
# Interval between pings in seconds, 0.2-1 is a sensible range.
INT=1
# Number of pings to send.
NUM=1
RIP=$(echo ${3}))
VIP=$(echo ${1})
#Optionally provides source IP for Ping
SRC=
if [ "$SRC" != '' ]; then
SRC_IP="-I $SRC"
fi
if ping ${SRC_IP} -n -w${TMEOUT} -i${INT} -c${NUM} ${RIP} >& /dev/null; then
COUNTER="$(cat count)"
if [COUNTER != 0]; then
//run up script here
fi
echo 0 >> count
exit ${?}
else
COUNTER="$(cat count)"
if [COUNTER >= 3]; then
//run down script here
fi
COUNTER=$[COUNTER + 1]
echo COUNTER >> count
exit ${?}
fi
Вы также можете сделать это с Луа, но я не смотрел на это. Я сделал несколько других опций для оповещений по электронной почте, таких как опрос статистического сокета или хакерский хакрокси, которые могут быть адаптированы, но внешняя проверка, вероятно, будет работать лучше здесь. Однако, если вы хотите попробовать их, вы можете найти их здесь https://www.loadbalancer.org/blog/3-ways-to-send-haproxy-health-check-email-alerts/.