Запуск скрипта zabbix агентом
UserParameter=check.hpasm[*],/usr/bin/sudo /etc/zabbix/scripts/check_hpasm
%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 папку где лежат скрипты
скачаем и скопируем туда наш плагин
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/
Разархивируем
Переместим файл check_hp и папку mibs в нашу папку с плагинами для забикса
также нам понадобится плагин от нагиос utils.pm, у меня был установлен нагиос поэтому я его просто перетянул
Поправим пути в плагине check_hp
добавим путь к utils.pm
Проверим
Пример вывода
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
Настроим агент
Узнать состояние рейда можно командой в консоли:
Заглавные буквы U означают, что все жесткие диски на месте, с рейдом все в порядке. Если какой-то из них выйдет из строя, то вместо буквы будет стоять знак _ . По этому значению мы и будем определять статус рейд массива mdadm — если знака _ нет, то все в порядке.
Перезапустим агент
Проверим наш ключ
Настроим сервер
Настройка -> Узлы сети -> Элементы дааных -> Создать элемент данных -> Имя : 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)
Мониторинг 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:
Скачаем скрипт автоопределения smartctl-disks-discovery.pl
https://onedayadmin.sytes.net//wp-content/uploads/smartctl-disks-discovery.pl
И положим его в директорию /etc/zabbix/scripts/
Дадим права на исполнение без запроса рутового пароля на скрипт и smartmontools:
Проверим наш скрипт:
Вывод будет примерно такой:
{
"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
Рестартуем агент
Добавляем 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
Шаблон для заббикс сервера:
https://onedayadmin.sytes.net/wp-content/uploads/Template_scan_port_zabbix-agent.xml
Автообнаружение файлов в директории, контроль их даты создания и размера.
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
#!/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 "]
}"
#!/bin/bash
age=$[`date +%s`-`stat --format='+%Y' $1 | sed -e 's/^.//'`]
echo $age
#!/bin/bash
size=`stat $1 -c %s`
echo $size
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/
#!/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
Проверить работу скрипта для 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