FastNetMon

Wednesday 2 May 2012

Использование Zabbix External checks

Что это и зачем: http://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/external

Создаем папку под скрипты:
mkdir -p /etc/zabbix/externalscripts
vi /etc/zabbix/externalscripts/check_https.sh

Создаем тестовый скрипт для проверки https (стандартно Zabbix это не умеет):
#!/bin/bash
curl --connect-timeout 3 -3 -k https://$1 > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
    # ERROR
    echo "0"
else
    # OK
    echo "1"
fi


Активируем флаг исполнения:
chmod +x /etc/zabbix/externalscripts 
Проверяем (в случае успеха должна выдаваться 1, в случае неудачи - 0):
 /etc/zabbix/externalscripts/check_https.sh paypal.com
0

Далее создаем item со следующими параметрами:
Description: https check
Type: External check
Key: check_https.sh["{HOST.CONN}"]
Type of information: Numeric unsigned
Data type: Decimal
И теперь идем в раздел: Latest Data и ждем метрик. После этого не забываем сделать триггер.

4 comments :

  1. Спасибо, помог ваш пост ;)

    ReplyDelete
  2. 1097:20160325:145334.391 error reason for "billing checks:script2.sh" changed: Received value [/usr/bin/iconv: illegal input sequence at position 311/usr/bin/iconv: illegal input sequence at position 311awk: cmd. line:1: BEGIN{print int(/)}awk: cmd. line:1: ^ unterminated regexpawk: cmd. line:2: BEGIN{print int(/)}awk: cmd. line:2: ^ unexpected newline or end of string/usr/bin/iconv: illegal input sequence at position 311/usr/lib/zabbix/externalscripts/script2.sh: line 7: [: : integer expression expected] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]
    Проверка падает раз в 1-2 месяца с такой ошибкой. Помогает перезагрузка заббикс-сервера. Конечно это не выход, как понять почему со временем проверка перестаёт проходить. держать дебаг лог 2 месяца включённым это через чур как и ребут сервера.

    ReplyDelete
  3. Падает потому, что в условии if [ "$?" -ne "0" ]; then используется проверка INT значений "-ne", но если присмотреться внимательно, то станет понятно, что в условии допущена ошибка! В условии сравниваются 2 строки оператором, который сравнивает цифры INT :)

    Правильно будет так:
    if [ $? -ne 0 ]; then

    $? - никогда не будет пустой.

    Есть конечно альтернативный вариант:
    if [ "$?" != "0" ]; then
    Но я бы оставил сравнение цифр.

    P.S. Кстати zabbix 2.4 и выше вполне умеет такое проверять штатными средствами через "Web scenarios": https://www.zabbix.com/documentation/2.4/manual/web_monitoring

    ReplyDelete
  4. По поводу дебага, можно же stderr отправить в файл и получить желанную проблему, для этого нужно изменить код скрипта:
    curl --silent --connect-timeout 3 -3 -k https://$1 1>/dev/null 2>/var/log/zabbix/${0}.log

    --silent - уберет лишнюю "говорливость" curl
    1>/dev/null - stdout отправится в /dev/null
    2>/var/log/zabbix/${0}.log - stderr отправится в файл.

    ReplyDelete

Note: only a member of this blog may post a comment.