zabbix shablon note

Запуск скрипта zabbix агентом

nano /etc/zabbix/zabbix_agentd.conf

UserParameter=check.hpasm[*],/usr/bin/sudo /etc/zabbix/scripts/check_hpasm

 

visudo

%zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/scripts/check_hpasm

 

Заходим в шаблон или узел, который мы будем мониторить, Элементы данных -> Создать Элемент данных -> Имя :check_hpasm , Тип -> Zabbix агент, Ключ -> check.hpasm ->...

Внешняя обработка.

Для того чтобы расширить функционал zabbix можно использовать свои скрипты, которые будут выполнять нужные нам действия и отдавать результат серверу zabbix.

В моем случае мне захотелось использовать плагины написанные для nagios

Создадим папку для скриптов и назначим ей права

mkdir -p /etc/zabbix/externalscripts

chmod 0570 /etc/zabbix/externalscripts/

chown -R zabbix:root /etc/zabbix/externalscripts/

Укажем нашему zabbix папку где лежат скрипты

nano /etc/zabbix/zabbix_server.conf
ExternalScripts=/etc/zabbix/externalscripts
systemctl restart zabbix-server

скачаем и скопируем туда наш плагин

cp /home/leash/check_insight_log.sh /etc/zabbix/externalscripts/

chmod 0570 /etc/zabbix/externalscripts/*

chown zabbix:root /etc/zabbix/externalscripts/*

Заходим в шаблон или узел, который мы будем мониторить, Элементы данных -> Создать Элемент данных -> Имя : HP Hardware Insight Log State -> Тип : Внешняя проверка -> Ключ : check_insight_log.sh["-H","{HOST.CONN}","-C","public"] -> Тип информации : текст -> ....

Пояснение ключа; Скрипт запускается командой /etc/zabbix/externalscripts/check_insight_log.sh -H 192.168.21.119 -C public

Подключим плагин Compaq-HP Proliant Server and Blade Checks к серверу zabbix

Скачиваем последнюю стабильную версию агента

https://www.crowdedplace.com/2015/02/compaq-hp-proliant-server-and-blade-checks-v2-20/

Разархивируем

tar -xzvf check_hp-2.19.tar.gz

Переместим файл check_hp и папку mibs в нашу папку с плагинами для забикса

cd check_hp-2.19
mv /home/leash/check_hp /etc/zabbix/externalscripts/

также нам понадобится плагин от нагиос utils.pm, у меня был установлен нагиос поэтому я его просто перетянул

cp /usr/lib/nagios/plugins/utils.pm /etc/zabbix/externalscripts/

Поправим пути в плагине check_hp

nano /etc/zabbix/externalscripts/check_hp

добавим путь к utils.pm

my @lib_folders = qw(/etc/zabbix/externalscripts/ /usr/local/nagios/libexec/ /usr/lib/nagios/plugins/ /usr/lib64/nagios/plugins/);

Проверим

./check_hp -H 192.168.1.12 -C rdon

Пример вывода

Compaq/HP Agent Check: ProLiant ML110 G7 (tower) S/N CZ2221062W overall system state OK

Прикручиваем плагин как внешнюю обработку к zabbix.

Создаем триггер

Название:HP Hardware State : {ITEM.VALUE}   ->  Выажение: {HP SNMP nagios plugin:check_hp["-H","{HOST.CONN}","-C","{$SNMP_COMMUNITY}"].str(overall system state OK)}=0   ->...

Мониторинг программного RAID на Linux (mdadm) в zabbix

Настроим агент

Узнать состояние рейда можно командой в консоли:

cat /proc/mdstat

Заглавные буквы U означают, что все жесткие диски на месте, с рейдом все в порядке. Если какой-то из них выйдет из строя, то вместо буквы будет стоять знак _ . По этому значению мы и будем определять статус рейд массива mdadm — если знака _ нет, то все в порядке.

nano /etc/zabbix/zabbix_agentd.conf
UserParameter=mdadm.status,egrep -c "\[.*_.*\]" /proc/mdstat

Перезапустим агент

Проверим наш ключ

zabbix_agentd -t mdadm.status
mdadm.status [t|0]

Настроим сервер

Настройка ->  Узлы сети -> Элементы дааных -> Создать элемент данных -> Имя : Mdadm status -> Ключ : mdadm.status -> Тип информации : Числовой (целое положительное)...

Настройка ->  Узлы сети -> Триггеры -> Создать триггер ->  Имя : Status RAID mdadm is fail -> Важность : Высокая -> Выражение:{backup:mdadm.status.last()}>0 ->...

Запуск скрипта при срабатывание триггера

Добавим наш скрипт в заббикс

Администрирование -> Скрипты -> Создать скрипт -> Имя:reboot ADSL modem -> Тип:Скрипт-> Выполнять на:Zabbix Server(прокси) -> Команды: sudo /etc/zabbix/externalscripts/adsl.sh -> Требуемые права доступа:Чтение

Настроем запуск скрипта

Настройка -> Действия -> Создать действие -> Имя : reboot ADSL modem -> Новое условие (Выбираем - Триггер, Равно, Выбираем имя нашего триггера) -> Добавить -> Переходим во вкладку Операции -> Длительность шага 1h -> Операции ->  Новый -> Тип операции : Удаленная команда -> Список целей -> Новый (Выбираем наш сервер zabbix) -> Тип : Глобальный скрипт -> Выбираем имя нашего скрипта (reboot ADSL modem)

visudo
%zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/externalscripts/adsl.sh

 Мониторинг SMART HDD с помощью zabbix-agent.

  • Для Windows

Тут щаблон для заббикса:

https://onedayadmin.sytes.net/wp-content/uploads/Template_HDD_SMARTMONTOOLS_2_WITH_LLD.xml

Ссылка на GitHab:

https://github.com/v-zhuravlev/zbx-smartctl

Тут smartmontools:

https://builds.smartmontools.org/

И так, есть железка с Windows Server 2008 R2 на борту, но это не серверное железо и никаких raid контроллеров там нет. Поэтому мониторить hdd будем при помощи обычного агента zabbix.

Приступим.

Скачиваем по ссылкке выше smartmontools и устанавливаем на сервере который будем мониторить.

Предполагаю что клиент zabbix уже  там установлен.

Скачиваем и ложим в папку C:\Program Files\Zabbix Agent повершел-скрипт для автоопределения дисков которые поддерживают опрос RAID:

https://onedayadmin.sytes.net/wp-content/uploads/smartctl-disks-discovery.ps1

Редактируем C:\Program Files\Zabbix Agent\zabbix_agentd.conf

В конец допишем, и проверяем пути к smartctl.exe и скрипту smartctl-disks-discovery.ps1

UserParameter=uHDD.A[*], for /F "tokens=* usebackq" %a in (`""%ProgramFiles%\smartmontools\bin\smartctl.exe" -A $1"`) do @echo %a

UserParameter=uHDD.i[*], for /F "tokens=* usebackq" %a in (`""%ProgramFiles%\smartmontools\bin\smartctl.exe" -i $1"`) do @echo %a

UserParameter=uHDD.health[*], for /F "tokens=* usebackq" %a in (`""%ProgramFiles%\smartmontools\bin\smartctl.exe" -H $1"`) do @echo %a
### Discovery

UserParameter=uHDD.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent\smartctl-disks-discovery.ps1"

Проверим запускается ли наш повершел-скрипт

powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent\smartctl-disks-discovery.ps1"

Скачиваем по ссылке вначале шаблон и добавляем его в zabbix,  далее применяем его к нашему узлу сети.

  • Для Linux.

Установим smartmontools:

apt-get install smartmontools

Скачаем скрипт автоопределения smartctl-disks-discovery.pl

https://onedayadmin.sytes.net//wp-content/uploads/smartctl-disks-discovery.pl

И положим его в директорию /etc/zabbix/scripts/

Дадим права на исполнение без запроса рутового пароля на  скрипт и smartmontools:

visudo
zabbix ALL=(ALL) NOPASSWD:/usr/sbin/smartctl,/etc/zabbix/scripts/smartctl-disks-discovery.pl

Проверим наш скрипт:

/etc/zabbix/scripts/smartctl-disks-discovery.pl

Вывод будет примерно такой:

{

"data":[

{

"{#DISKMODEL}":"WDC WD2003FYYS-02W0B1",

"{#DISKSN}":"WD-WCAY01033219",

"{#DISKNAME}":"/dev/sda",

"{#DISKCMD}":"/dev/sda -d sat",

"{#SMART_ENABLED}":"1",

"{#DISKTYPE}":"0"

},

{

"{#DISKMODEL}":"WDC WD2003FYYS-02W0B1",

"{#DISKSN}":"WD-WCAY01011157",

"{#DISKNAME}":"/dev/sdb",

"{#DISKCMD}":"/dev/sdb -d sat",

"{#SMART_ENABLED}":"1",

"{#DISKTYPE}":"0"

},

]

}

 Правим конфиг клиента  zabbix

nano /etc/zabbix/zabbix_agentd.conf

Добавим в конец

UserParameter=uHDD.A[*],sudo smartctl -A $1

UserParameter=uHDD.i[*],sudo smartctl -i $1

UserParameter=uHDD.health[*],sudo smartctl -H $1 || true

UserParameter=uHDD.discovery,sudo /etc/zabbix/scripts/smartctl-disks-discovery.pl

Рестартуем агент

/etc/init.d/zabbix-agent restart

Добавляем xml шаблон в заббикс сервер(если еще не добавлен).

Применяем его к узлу сети на котором производили все эти действия.

Проверка порта с помощью zabbix-client, машина с клиентом за натом.

Задача проверить доступность порта из вне. Есть сервис проброшенный на реальный адрес, будем проверять его доступность  для клиентов из другого филлиала который подключен по VPN в нашу сеть. Наша сеть 192.168.1.0/24 сеть филлиала 192.168.2.0/24, сервер zabbix 192.168.1.1

Установим и настроим zabbix-client на машину в сети филлиала.

Скачиваем по своей платформе и разрядности https://www.zabbix.com/download_agents

Разархивируем и скопируем по пути C:\Program Files\zabbix_agents\

Переименуем конфигурационный файл   C:\Program Files\zabbix_agents\conf\zabbix_agentd_windows.conf  в zabbix_agentd.conf и отредактируем.

LogFile=C:\Program Files\zabbix_agents\zabbix_agentd.log

Server=192.168.1.1

ServerActive=192.168.1.1

Hostname=home

UserParameter=port_scan[*],"C:\Program Files\nmap-7.70\nmap.exe" -p $1 $2

cd "C:\Program Files\zabbix_agents\bin"

zabbix_agentd.exe -c "C:\Program Files\zabbix_agents\conf\zabbix_agentd.conf" --install

При ошибках проверяем пути конфига, лога..., корректность конфига.

Заходим в службы и находим zabbix-agent, если не запущен - стартуем.

Смотрим логи, на наявность ошибок.

Теперь нам понадобится nmap чтобы сканировать удаленный порт. Качаем и устанавливаем в папку C:\Program Files\nmap-7.70

https://nmap.org/download.html

Проверяем работу nmap

"C:\Program Files\nmap-7.70\nmap.exe" -p 3128 192.168.1.1

Шаблон для заббикс сервера:

https://onedayadmin.sytes.net/wp-content/uploads/Template_scan_port_zabbix-agent.xml

Автообнаружение файлов в директории, контроль их даты создания и размера.

nano /etc/zabbix/zabbix_agentd.conf

UserParameter=File.discovery[*],/usr/bin/sudo /etc/zabbix/scripts/file-directory-discovery.sh $1

UserParameter=files.check.age[*],/usr/bin/sudo /etc/zabbix/scripts/file_age.sh $1

UserParameter=files.check.size[*],/usr/bin/sudo /etc/zabbix/scripts/file_size.sh $1

nano /etc/zabbix/scripts/file-directory-discovery.sh

#!/bin/bash

list_file=(`ls -l $1 | grep ^- | awk '{print $9}' | tr -s '\r\n' ' '`)

size_file=(`ls -l $1 | grep ^- | awk '{print $5}' | tr -s '\r\n' ' '`)

nummas=${#list_file[@]}

let andmass=nummas-1

echo "{

\"data\":[

"

for ((i=0;i<$nummas;i++))

do

if [ "$i" -lt "$andmass" ]

then

echo "{ \"{#FILECMD}\":\""${list_file[$i]}"\"",

echo "\"{#SIZEFLAG}\":\""`echo "scale=0; (${size_file[$i]} - ${size_file[$i]} "*" 0.3)/1" | bc -l`"\""},

else

echo "{ \"{#FILECMD}\":\""${list_file[$i]}"\"",

echo "\"{#SIZEFLAG}\":\""`echo "scale=0; (${size_file[$i]} - ${size_file[$i]} "*" 0.3)/1" | bc -l`"\""}

fi

done

echo "]

}"

nano /etc/zabbix/scripts/file_age.sh

#!/bin/bash

age=$[`date +%s`-`stat --format='+%Y' $1 | sed -e 's/^.//'`]

echo $age

nano /etc/zabbix/scripts/file_size.sh

#!/bin/bash

size=`stat $1 -c %s`

echo $size

visudo

zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/scripts/file-directory-discovery.sh

zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/scripts/file_age.sh

zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/scripts/file_size.sh

Сам шаблон:

https://onedayadmin.sytes.net/wp-content/uploads/Template_scan_file.xml

Мониторинг RAID массива HP Array ( hpacucli ).

Ставим и ознакомимся с утилитой:

https://onedayadmin.sytes.net/ubuntu-i-hpacucli-upravlenie-raid-na-hp-proliant/

mkdir /etc/zabbix/scripts/

chown root:zabbix -R /etc/zabbix/scripts/

chmod 750 /etc/zabbix/scripts/

nano /etc/zabbix/scripts/hpsmartarray.sh

#!/bin/bash
export LC_ALL=""
export LANG="en_US.UTF-8"
#
HPACUCLI="sudo /usr/sbin/hpacucli"
SLOT="0"
#
if [[ -n "$1" && -n "$2" && -z "$3" ]]; then
##### DISCOVERY #####
TYPE="$2"
if [[ "${TYPE}" == "ldiscovery" ]]; then
DRIVES=`${HPACUCLI} ctrl slot=${SLOT} ld all show status | awk '/logicaldrive/ {printf("Logical_%s\n", $2)}' | sed 's/:/./g'`
if [[ -n ${DRIVES} ]]; then
JSON="{ \"data\":["
SEP=""
for DRIVE in ${DRIVES}; do
JSON=${JSON}"$SEP{\"{#LD}\":\"${DRIVE}\"}"
SEP=", "
done
JSON=${JSON}"]}"
echo ${JSON}
fi
exit 0
elif [[ ${TYPE} == "pdiscovery" ]]; then
DRIVES=`${HPACUCLI} ctrl slot=${SLOT} pd all show status | awk '/physicaldrive/ {printf("Physical_%s\n", $2)}' | sed 's/:/./g'`
if [[ -n ${DRIVES} ]]; then
JSON="{ \"data\":["
SEP=""
for DRIVE in ${DRIVES}; do
JSON=${JSON}"$SEP{\"{#PD}\":\"${DRIVE}\"}"
SEP=", "
done
JSON=${JSON}"]}"
echo ${JSON}
fi
exit 0
else
exit 1
fi
elif [[ -n "$1" && -n "$2" && -n "$3" ]]; then
##### PARAMETERS #####
RESERVED="$1"
DRIVE="$2"
METRIC="$3"
CACHE_TTL="50"
CACHE_FILE="/tmp/zabbix.hpsmartarray.cache"
EXEC_TIMEOUT="5"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ -s "${CACHE_FILE}" ]; then
CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
else
CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
echo "" >> "${CACHE_FILE}" # !!!
DATACACHE=`${HPACUCLI} ctrl slot=${SLOT} ld all show status | awk '{print $1,$2,$NF}' | awk '/logicaldrive/ {printf("Logical_%s Status:%s\n", $2, $3)}';
${HPACUCLI} ctrl slot=${SLOT} pd all show detail | sed '/physicaldrive/ s/:/./g; s/\(physicaldrive\)/\1:/g' | awk -F':' '
function ltrim(s) { sub(/^[ \t]+/, "", s); return s }
function rtrim(s) { sub(/[ \t]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
/physicaldrive/ {fd_counter+=1; fd[fd_counter]=trim($2)}
/^[ \t]+Status/ {status[fd_counter]=trim($2)}
/Serial Number/ {serial[fd_counter]=trim($2)}
/Current Temperature/ {temperature[fd_counter]=trim($2)}
END {
for (i=1; i<=fd_counter; i+=1) {
printf ( "Physical_%s Status:%s\n", fd[i], status[i]);
printf ( "Physical_%s Serial:%s\n", fd[i], serial[i]);
printf ( "Physical_%s Temperature:%s\n", fd[i], temperature[i]);
}
}'`
echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
chmod 640 "${CACHE_FILE}"
fi
#
cat "${CACHE_FILE}" | grep -iw "${DRIVE}" | awk -F':' 'BEGIN{IGNORECASE=1} /'${METRIC}'/ {print $2}' | head -n1
exit 0

#
else
exit 1
fi

Пеоеменная SLOT определял подбором

sudo /usr/sbin/hpacucli ctrl slot=0 ld all show status

sudo /usr/sbin/hpacucli ctrl slot=1 ld all show status

....

Скрипт поддерживает обнаружение (discovery) логических и физических дисков.
Скрипт предусматривает кеш, что позволяет сократить количество реальных обращений к серверу.
Время действия кеша в секундах должно устанавливается чуть меньше чем минимальный период опроса элементов (CACHE_TTL + EXEC_TIMEOUT < T).
Т.к. hpacucli работает медленно, необходимо увеличить Timeout Zabbix Agent'a, и при необходимости увеличить EXEC_TIMEOUT в скрипте 

chown root:zabbix /etc/zabbix/scripts/hpsmartarray.sh

chmod 700 /etc/zabbix/scripts/hpsmartarray.sh

visudo
zabbix ALL=(ALL) NOPASSWD:/etc/zabbix/scripts/hpsmartarray.sh

Проверить работу скрипта для zabbix:

sudo -u zabbix /usr/bin/sudo /etc/zabbix/scripts/hpsmartarray.sh none pdiscovery

sudo -u zabbix /usr/bin/sudo /etc/zabbix/scripts/hpsmartarray.sh none ldiscovery

sudo -u zabbix /usr/bin/sudo /etc/zabbix/scripts/hpsmartarray.sh none "Physical_1I.1.1" status

sudo -u zabbix /usr/bin/sudo /etc/zabbix/scripts/hpsmartarray.sh none "Physical_1I.1.1" temp

Настроим клиента

nano /etc/zabbix/zabbix_agentd.conf

#SMART hpacucli

UserParameter=hpsmartarray[*],/usr/bin/sudo /etc/zabbix/scripts/hpsmartarray.sh "none" "$1" "$2"

systemctl restart zabbix-agent

Вот шаблон:

https://onedayadmin.sytes.net/wp-content/uploads/Atlant_Template_HP_Smart_Array_hpacucli.xml

Шаблон для мониторинга RAID HP Smart Array по SNMP

https://onedayadmin.sytes.net/wp-content/uploads/Template_Atlant_HP_SNMP.xml