Windows admin blog
Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver
Мониторинг в Zabbix через Powershell скрипты
Иногда может возникнуть необходимость мониторить такие параметры Windows, с которыми по умолчанию zabbix не умеет работать. Если нужное значение можно получить с помощью powershell команды или скрипта, то можно довольно просто научить zabbix это делать посредством функционала пользовательских параметров.
В общем виде задача состоит из трех этапов:
- создаем PS скрипт и сохраняем его
- настраиваем конфигурационный файл zabbix-агента (не забываем перезапустить агента)
- создаем необходимый item и триггер в zabbix
1) На первом шаге создаем и сохраняем скрипт. Возможно, потребуется настроить Powershell Execution Policy, но на серверных ОС она уже должна быть в нужном положении.
Подробно о Execution Policy я писал в данной статье.
2) В файле конфигурации агента (zabbix_agentd.win.conf или zabbix_agentd.conf) ищем закомментированный параметр #UserParameter, вместо него вставляем:
где parameter_name — произвольное имя вашего параметра, а ключ -File указывает путь к powershell скрипту
Для удобства правки, конфигурационный файл можно открыть в редакторе Notepad++ или подобном
По окончанию редактирования и сохранения файла, не забываем перезапустить zabbix-агент
3) В zabbix при создании нового элемента данных (item) имя пишем произвольное, а вот ключ должен совпадать с именем параметра из конфигурационного файла, который мы прописали ранее (в моем случае, я назвал параметр «tsdrainmode»)
Настраиваем поле «тип информации» исходя из наших потребностей (типа получаемых данных из скрипта).
Скрипты zabbix для windows
Zabbix в примерах
Zabbix. Получение и первичная настройка.
Zabbix можно получить по ссылке:
Системные требования: 2 ядра CPU / 2ГБ
Далее предполагается, что вы скачали с официального сайта образ виртуальной машины, либо ISO-файл и установили его в Ubuntu Server 16.04 LTS.
По умолчанию доступ к веб-интерфейсу разрешен отовсюду.
Инсталляция готового решения Zabbix имеет следующие пароли:
Доступ к веб-интерфейсу может быть получен с http:// /zabbix
SSH доступ логин.пароль:
Используйте “sudo su” команду вместе с паролем от “appliance” пользователя для получения привилегированных root прав.
Создание своего пользователя. adduser имя_пользователя
После того, как пользователь создан, добавляем его в группу sudo.
usermod -a -G sudo имя_пользователя Не забудьте отключить пользователя по умолчанию
passwd appliance –l
На все вопросы по работе сервера и клиента вам с удовольствием ответят логи. Логи сервера лежат по пути:
tail -f /путь/к/файлу
поможет в прямом эфире отслеживать, что же происходит.
На картинке пример просмотра логов агента.
Zabbix добавление узла сети вручную
Для того, чтобы добавить узел сети, необходимо перейти в меню настройка, подменю узлы сети и выбрить создать узел сети.
Присваиваем узлу сети имя, вводим его видимое имя, добавляем в существующую или создаем новую группу, задаем интерфейс, посредством которого будет осуществляться мониторинг.
Для получения информации по узлу сети необходимо добавить к нему шаблон(ы). Делается это так: выбираем узел сети, переходим на вкладку шаблоны, нажимаем кнопку выбрать, в открывшемся окне выбираем необходимый шаблон или шаблоны и нажимаем выбрать. Когда шаблоны выбраны, нажимаем на главной странице добавить и обновить. В результате получаемые с узла данные будут доступны в меню мониторинг, подменю последние данные.
Обнаружение узлов в сети.
Для того, чтобы не создавать все узлы сети вручную, полезно использовать функцию обнаружения. Она позволяет находить узлы и производить с ними различные действия: добавлять в определенные группы узлов привязывать шаблоны прочее. Чтобы создать правило обнаружения необходимо перейти в раздел обнаружение и выбрать пункт создать правило обнаружения. Дальнейшие действия будем производить на примере принтеров. Предполагается, что нам известен диапазон их адресов.
Установка Zabbix agent в CentOS 7
sudo bash rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
yum install zabbix-agent
По умолчанию в CentOS сервис не запускается автоматически при перезагрузке! Убеждаемся в этом: systemctl status zabbix-agent
И добавляем его в автозагрузку: systemctl enable zabbix-agent
Запускаем сервис: systemctl start zabbix-agent Проверяем, все ли в порядк: systemctl status zabbix-agent
Установка Zabbix agent в Ubuntu 16.04 LTS
dpkg -i zabbix-release_3.4-1+trusty_all.deb
apt-get install zabbix-agent
Установка Zabbix agent в Windows 7/8/2012 32-x/64-x
Для операционных систем семейства Windows на сайте представлены бинарники агента для 32-х и 64-х разрядных архитектур. http://www.zabbix.com/downloads/3.4.0/zabbix_agents_3.4.0.win.zip Установщик отсутствует. Для установки необходимо проделать несколько шагов:
- Открыть в файерволе TCP порт 10050, по которому агент общается с сервером
netsh advfirewall firewall add rule name=»Zabbix Agent» dir=out protocol=tcp localport=10050 action=allow
netsh advfirewall firewall add rule name=»Zabbix Agent» dir=in protocol=tcp localport=10050 action=allow
Переименовать папку в zabbix_agent
c:\zabbix_agent\bin\win64\zabbix_agentd.exe —config c:\zabbix_agent \conf\zabbix_agentd.conf —install
Где: c:\zabbix_agent\bin\win64\zabbix_agentd.exe – путь к исполняемому файлу тебуемой разрядности;
—config c:\zabbix_agent\conf\zabbix_agentd.conf – путь к конфигурационному файлу;
—install – команда для установки сервиса с указанными выше параметрами.
На 64-битных системах требуется 64-битная версия Zabbix агента, чтобы все проверки связанные с запущенными 64-битными процессами корректно работали.
Или возьмите готовое у меня:
Для облегчения задачи я написал скрипт, который автоматически создает конфигурационный файл, открывает порты и устанавливает сервис требуемой разрядности. Полный комплект (zabbix_agent) лежит на яндекс диске в папке soft Скрипт требует настройки SET String=%computername%.%userdomain%.local – заменяем на постфикс вашего домена (ru/loc/net) SET Zabbix=192.168.10.31 – заменяем на адрес вашего сервера Zabbix.
Настройка Zabbix agent (универсальная)
Zabbix agent хранит свои настройки в файле zabbix_agentd.conf . В ОС UNIX он хранится по пути /etc/zabbix/zabbix_agentd.conf В ОС Windows он хранится по пути zabbix_agent\conf\zabbix_agentd.conf Ниже приведена минимальная необходимая для работы конфигурация.
Server=192.168.10.31 – адрес сервера Zabbix
ServerActive=192.168.10.31 – адрес сервера Zabbix
Hostname=001-0036.et.local – полное имя хоста, в таком виде, каким его видит сервер.
ListenPort=10050 — порт, на котором будет работать агент.
LogFile=c:\zabbix_agent\zabbix_agentd.log — расположение файла журнала в Windows
LogFile=/var/log/zabbix/zabbix_agentd.log — расположение файла журнала в UNIX
LogFileSize=10 – размер файла журнала в мегабайтах.
Подробнее про настройку можно почитать тут: для Windows
Получение данных от агента.
В целях отладки очень удобно получать данные от агента в консоли. За это отвечает утилита zabbix_get. Синтаксис у нее такой: zabbix_get -s -p -k ключ Где: -s — адрес узла -p — порт, на котором слушает агент -k ключ – ключ, значение которого необходимо получить
В примере выше мы запросили у узла 192.168.10.30, агент у которого работает на порту 10050 значение ключа sip.status. .
Мониторинг журналов событий Windows
Для того, чтобы работать с журналом событий, достаточно создать элемент данных следующего вида: Тип: Zabbix агент (активный) Ключ: eventlog[System,,»Error|Information»,»^Zabbix test event$»] Тип информации: Журнал (лог) Затем создаем триггер с текстом <имя.хоста:eventlog[Application,,"Warning|Error|Failure". ].logseverity()>>1 and < имя.хоста:eventlog[Application,,"Warning|Error|Failure". ].nodata(60)><>1
Чтобы упростить себе мониторинг журналов Система и Приложения достаточно импортировать на сервер шаблон YandexDisk\soft\zabbix_templates\zbx_eventlog_template.xml Настройки-Шаблоны-Импорт
Затем выбираем файл и нажимаем импорт
После того, как шаблон добавлен, необходимо прикрепить его к нужному узлу сети. Проверить работу можно, зайдя в Мониторинг-Последние данные
Выбираем узел сети, или группу узлов и видим, какие ошибки и предупреждения поступали.
Проверить работу можно, выполнив на узле, в запущенной от имени администратора консоли PowerShell: eventcreate /t error /id 999 /l system /so «Zabbix test event» /d «Test ERROR event log by Zabbix» Которая создаст в журнале система тестовую ошибку. Сбор информации из системных журналов является активной проверкой, а потому в настройках агента должно быть указано его полное имя и сервер для активных проверок. Подробнее описано в разделе «Настройки Zabbix agent». Почитать подробнее о настройке логов можно тут: https://www.zabbix.com/documentation/3.0/ru/manual/config/items/itemtypes/zabbix_agent/win_keys
Мониторинг нестандартных журналов событий Windows
Тип — активный, Ключ eventlog[Microsoft-Windows-Hyper-V-VMMS-Admin,,»Error|Critical». 100,skip] тип информации: лог
Ищем ошибки, относящиеся к работе Windows Scheduler:
eventlog[Microsoft-Windows-TaskScheduler/Operational,,»Error|Critical». 100,skip] Основная проблема — что указать в качестве первого параметра ключа eventlog. Делаем так: открываем родной виндовый Event Viewer (например, right-click на MyComputer -> Manage, затем открываем System Tools -> Event Viewer); в Event Viewer-е находим нужный лог (например, в данном случае: Application and Services Logs -> Microsoft -> Windows -> TaskScheduler -> Operational), на нём RightClick -> Properties; в свойствах находим поле «Full Name» (самое первое), его содержимое и копипастим в качестве первого параметра ключа.
Мониторинг необходимости перезагрузки Windows.
Бывает полезно знать, каким серверам требуется перезагрузка, а когда их много, то удобно об этом узнавать, не заходя на сервер. Для мониторинга нам понадобится клиент, настроенный для активных проверок и соответствующий скрипт. Скрипт берем в галерее технета по ссылке ниже. https://gallery.technet.microsoft.com/scriptcenter/Get-PendingReboot-Query-bdb79542/view/Discussions set-executionpolicy remotesigned Полученный скрипт определяем в папку \zabbix_agent\scripts на клиенте, в конфигурации пишем: UserParameter=Reboot.IsNedeed,powershell -NoProfile -ExecutionPolicy Bypass -command «$ErrorActionPreference = ‘silentlycontinue’; $eval = get-pendingreboot; if ($eval.RebootPending) < Write-Host '1'; >else < Write-Host '0' >; На стороне Zabbix создаем элемент данных: Zabbix (активный) ключ: Reboot.IsNedeed
Мониторинг Asterisk на примере Elastix (CentOS 7 x64)
Подразумевается, что агент у вас уже установлен. Если это не так – смотрите соответствующий раздел руководства. Для того, чтобы настроить мониторинг нам нужно сделать несколько вещей: 0 добавить пользователю zabbix от чьего имени работает zabbix agent право запускать программы баз ввода пароля, 1 добавить в конфигурационный файл агента нужные параметры 3 скачать, импортировать и применить к нужному узлу шаблон. Приступим. Открываем файл sudo nano /etc/sudoers И в самый конец допишем: zabbix ALL=(ALL) NOPASSWD:ALL Теперь создадим отдельный файл настроек для работы с Asterisk
nano /etc/zabbix/zabbix_agentd.d/asterisk.conf «`UserParameter=ast.pid,sudo -u zabbix sudo cat /var/run/asterisk/asterisk.pid
UserParameter=ast.uptime,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘core show uptime’ | grep uptime | cut -f2 -d: | sed ‘s/ //g’
UserParameter=ast.reloadtime,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘core show uptime’ | grep reload | cut -f2 -d: | sed ‘s/ //g’
UserParameter=ast.version,sudo -u zabbix sudo /usr/sbin/asterisk -V | cut -f2 -d’ ‘
INFO: Active Calls is Buggy yet.
UserParameter=ast.callsdone,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘core show calls’| grep -i ‘processed’ | awk ‘
UserParameter=iax.status,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘iax2 show registry’|grep Registered |wc -l
UserParameter=iax.channels,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘iax2 show channels’|grep —text -i ‘active IAX channel’|awk ‘
UserParameter=sip.status,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘sip show registry’|grep Registered |wc -l
UserParameter=sip.peersonline,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘sip show peers’|grep —text -i ‘sip peers’|awk ‘
UserParameter=sip.peersoffline,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘sip show peers’|grep —text -i ‘sip peers’|awk ‘
UserParameter=sip.peers,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘sip show peers’|grep —text -i ‘sip peers’|awk ‘
UserParameter=dns.status,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘dnsmgr status’ | grep ‘DNS Manager’ | awk ‘
UserParameter=dns.entries,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘dnsmgr status’ | grep ‘Number of entries’ | awk ‘
UserParameter=fax.sessions,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘fax show stats’ | grep ‘Current Sessions’ | awk ‘
UserParameter=fax.transmits,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘fax show stats’ | grep ‘Transmit Attempts’ | awk ‘
UserParameter=fax.receive,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘fax show stats’ | grep ‘Receive Attempts’ | awk ‘
UserParameter=fax.done,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘fax show stats’ | grep ‘Completed’ | awk ‘
UserParameter=fax.fail,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘fax show stats’ | grep ‘Failed’ | awk ‘
UserParameter=ast.parkedcalls,sudo -u zabbix sudo /usr/sbin/asterisk -rvvvvvx ‘parkedcalls show’ | grep ‘parked calls in total’ | awk ‘
Version Info — Edit this part for your own loss
UserParameter=ast.tribily.ver,sudo -u zabbix sudo echo $
Перезапускаем агент. systemctl restart zabbix-agent Скачиваем шаблон отсюда: https://github.com/olindata/tribily-zabbix-templates/blob/master/App_Asterisk/Tpl_Tribily_App_Asterisk_Extended_v1.0.xml Правой клавшей мыши по кнопке RAW, Сохранить объект как, далее Настройка-Шаблоны-Импорт шаблона, добавляем шаблон и применяем его к нужному узлу.
Мониторинг доступности телефонов на примере аппаратов Yealink.
Поскольку SNMP доступен не для всех телефонов, а получать с них информацию необходимость есть, мы воспользуемся функцией Zabbix, которая называется Веб мониторинг. Создаем узел сети с произвольным именем, без указания адреса, он нам нужен только для привязки к нему сценария. После создания кликаем по пункту веб Далее выбираем создать веб сценарий
Даём ему имя, например, «Доступность», потом переходим на вкладку шаги, и нажимаем на кнопку добавить. Вводим название шага, url, по которому необходимо проследовать, строку, которая там должна быть и код ответа. Нажимаем добавить, и еще раз добавить на основной страничке.
А теперь по порядку. В поле url мы указываем адрес, по которому будет осуществлен переход во время проверки, требуемая строка это строка, которая должна быть на странице, а 200, это код ответа, если она присуствует. Ссылка позволяет заходить на телефон не авторизируясь. http://192.168.10.214/servlet?p=login&q=login&username=admin&pwd=admin Далее нам необходимо создать триггер, который будет срабатывать, когда пропадет регистрация на телефоне.
Называем триггер, далее нажимаем добавить, и в появившемся окошке из элементов данных выбираем ошибку проверки, а в значении функции Последнее значение NOT N, и нажимаем вставить. Выбираем высокую важность и нажимаем добавить.
Триггер означает, что, если проверка не удалась, и вернула любой код ответа, отличный от N (200, как мы его задали), это будет означать событие высокой важности с немедленным уведомлением заинтересованных лиц.
Настройка оповещений по Email на примере почты от yandex.
Переходим в раздел Администрирование(1)->Способы оповещений(2)->Email(3)
Настраиваем следующим образом: Email SMTP сервер smtp.yandex.ru Порт SMTP сервера 465 SMTP helo yandex.ru SMTP email адрес_для_отправки@домен.ру Безопасность подключения SSL/TLS Проверка SSL узла нет Проверка SSL хоста нет Аутентификация НетОбычный пароль Имя пользователя monitor@ener-t.ru Пароль ************ Активировано да Ниже пример рабочих настроек.
Мониторинг хоста Hyper-V
https://github.com/ameiji/Zabbix-HyperV-Templates Сначала импортируем шаблон Template_Windows_HyperV_VM_Guest.xml, потом Template_Windows_HyperV_Host.xml, поскольку они зависят друг от друга. UserParameter=hyperv.discovery,powershell.exe -file «c:\zabbix_agent\scripts\zabbix-vm-perf.ps1» UserParameter=hyperv.discoveryitem[],powershell.exe -file «c:\zabbix_agent\scripts\zabbix-vm-perf.ps1» «$1» «$2» UserParameter=hyperv.check[],powershell.exe -file «c:\zabbix_agent\scripts\zabbix-vm-perf.ps1» «$1» «$2» «$3» Set-ExecutionPolicy -ExecutionPolicy Bypass Мониторинг WSUS https://github.com/zbx-sadman/wsus
Для работы нам потребуется пакет freeipmi
‘sudo apt-get install freeipmi’
/usr/sbin/ipmi-sensors -D LAN2_0 -h 192.168.10.36 -u пользователь_в_iLO -p пароль -l USER -W discretereading —no-header-output —quiet-cache —sdr-cache-recreate —comma-separated-output —entity-sensor-names
1 Скачиваем шаблон и скрипты отсюда: https://www.zabbix.com/forum/attachment.php?attachmentid=6874&d=1397131920 2 редактируем скрипты, вписываем туда наш логин и пароль от iLO
3 копируем скрипты в папку External scripts cp ilo_discovery.pl ipmi_proliant.pl /usr/lib/zabbix/externalscripts/ 4 Делаем их исполняемыми chmod +x /usr/lib/zabbix/externalscripts/ilo_discovery.pl chmod +x /usr/lib/zabbix/externalscripts/ipmi_proliant.pl и даем пользователю заббикс все права на них chown zabbix:zabbix /usr/lib/zabbix/externalscripts/ilo_discovery.pl chown zabbix:zabbix /usr/lib/zabbix/externalscripts/ipmi_proliant.pl 5 Создаем узел сети, в настройках интерфейса ничего не пишем, к нему применяем шаблон из архива, и во вкладке макросы ставим макрос <$ILO>равны IP интерфейса iLO
Мониторинг S.M.A.R.T. в Windows x64
Для мониторинга используется набор утилит smarttools. Скачиваем отсюда https://sourceforge.net/projects/smartmontools/files/smartmontools/6.4/ Распаковываем в папку zabbix_agent\scripts\smarttools Добавляем в конфигурационный файл строки: #############SMARTMON UserParameter=uHDD[], for /F «tokens=10» %a in (‘c:\zabbix_agent\scripts\smarttools\bin64\smartctl.exe -A $1 ^| find «$2″‘) do @echo %a UserParameter=uHDD.health.[], for /F «tokens=6» %a in (‘c:\zabbix_agent\scripts\smarttools\bin64\smartctl.exe -H $1 ^| find «test»‘) do @echo %a UserParameter=uHDD.model.[],for /F «tokens=3» %a in (‘c:\zabbix_agent\scripts\smarttools\bin64\smartctl.exe -i $1 ^| find «Device Model»‘) do @echo %a %b UserParameter=uHDD.sn.[],for /F «tokens=3» %a in (‘c:\zabbix_agent\scripts\smarttools\bin64\smartctl.exe -i $1 ^| find «Serial Number»‘) do @echo %a UserParameter=uHDD.errorlog.[], for /F «tokens=4» %a in (‘c:\zabbix_agent\scripts\smarttools\bin64\smartctl.exe -l error $1 ^| find «ATA Error Count»‘) do @echo %a UserParameter=uHDD.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File «c:\zabbix_agent\scripts\smartctl-disks-discovery.ps1» Обязательно перезапускаем службу после внесения изменений в конфигурационный файл. Так же должен быть разрешен запуск скриптов PowerShell. Делается это в консоли PowerShell запущенной от администратора командой: Set-ExecutionPolicy -ExecutionPolicy Bypass
Отсюда берем шаблон и скрипт https://github.com/v-zhuravlev/zbx-smartctl Скрипт помещаем в папку c:\zabbix_agent\scripts, а шаблон импортируем и применяем к нужным хостам. Вот и всё. Для обеспечения работы в Windows x32 необходимо заменить в конфигурационном файле все вхождения bin64 на bin32. Как в строке ниже c:\zabbix_agent\scripts\smarttools\bin64\smartctl.exe
Мониторим время окончания оплаты домена с помощью Zabbix
Для мониторинга нам понадобится скрипт и шаблон.
Скрипт кладем в каталог по умолчанию для внешних скриптов, который указан в конфигурации сервера zabbix, вот строчка по умолчанию в zabbix-server.conf
Теперь выдаем права и делаем его исполняемым:
Теперь осталось в агента добавить свой параметр: