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/.

Другие вопросы по тегам