Мониторинг компьютеров и оборудования средствами Zabbix
Вкрадце расскажу о том, как я поднял у себя сервер с Zabbix на борту и мониторил виндовые и FreeBSD машины.
Подключаем репозитрий epel
Epel – Extra Packages for Enterprise Linux, репозиторий, представленный командой Fedora, содержащий в себе огромное количество дистрибутивов, 100% свободный и часто обновляемый.
# yum install http://ftp.yandex.ru/epel/6/i386/epel-release-6-8.noarch.rpm
Устанавливаем софт
Здесь нам понадобится сервер баз данных, веб-сервер, сам zabbix, некоторый софт для работы с snmp и SELinux
# yum install zabbix20-server zabbix20-agent zabbix20-web-mysql httpd policycoreutils-python net-snmp net-snmp-utils
# yum groupinstall «MySQL Database Client» «MySQL Database Server»
Настраиваем сервер баз данных
# service mysqld start
# mysql_secure_installation
Указываем пароль к базе данных и отвечаем утвердительно на остальные вопросы.
вводим пароль и попадаем в консоль mysql>
mysql> CREATE DATABASE zabbix CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO ‘zabbix’@’localhost’ IDENTIFIED BY ‘myzabbixpass123’;
mysql> quit;
Конечно, смените пароль на свой. Итак, идём дальше. Заполним базу данных zabbix из шаблонов:
# mysql -u zabbix -pmyzabbixpass123 zabbix
Ваш пароль указывайте вплотную к ключу -p.
Настраиваем Zabbix
ищем строки и раскомментирываем (изменяем) их под наши настройки:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=myzabbixpass123
Далее, модифицируем настройки PHP аналогично:
max_execution_time = 300
max_input_time = 300
post_max_size = 16M
date.timezone = Asia/Sakhalin
При установке zabbix вложил свой конфиг в каталог /etc/httpd/conf.d/zabbix.conf, который добавляет новый каталог для его веб-интерфейса: /usr/share/zabbix/ с алиасом /zabbix (позволю себе процитировать конфиг):
.
Alias /zabbix /usr/share/zabbix
.
Поскольку у нас CentOS, нужно поднастроить SELinux:
# semanage port -a -t http_port_t -p tcp 10051
# setsebool -P httpd_can_network_connect on
Добавляем правило в iptables:
iptables -t mangle -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp -d 192.168.1.4 —dport 80 -j ACCEPT
eth0 – интерфейс локальной сети;
192.168.1.0/24 – адреса локальной сети
192.168.1.4 – адерс сервера zabbix
Ну чтож, стартуем службы и идём в веб-интерфейс:
# /etc/init.d/httpd start
# /etc/init.d/zabbix-server start
# /etc/init.d/zabbix-agent start
Открываем в браузере:
Настройка будет чуть ниже.
Мониторинг рабочих станций Windows
Скачиваем zabbix-agent с оф.сайта:
Распаковываем в любой каталог, видим две папки bin и conf. Идём в папку conf, правим единственный файл zabbix_agentd.win.conf:
# указываем через запятую все zabbix-сервера
Server=192.168.1.4, 192.168.1.100
# порт для прослушки, можно не менять — этот порт надо разрешить в файрволле на входящий трафик
ListenPort=10050
#Имя хоста
Hostname=D.Makarov
#Дополнительные параметры, нашёл в одном из мануалов
UserParameter=windows.services,»%ProgramFiles%\zabbix\services.exe»
Остальные параметры я не трогал. Теперь внимательно. Кладём наши файлы в каталог Program files в папку zabbix и выполняем команду с правами администратора:
> \bin\win32\zabbix_agentd.exe –config \conf\zabbix_agentd.win.conf –install
> \bin\win32\zabbix_agentd.exe –config \conf\zabbix_agentd.win.conf –start
В консольку получаем сообщения об успешной установке и запуске службы.
Ставим на тех компах, которые нас интересуют. Под Linux/FreeBSD надо качать соответствующие агенты.
Установка Zabbix-agent под FreeBSD
На FreeBSD я поставил из портов:
# cd /usr/ports/net-mgmt/zabbix-agent
# make config && make && make install
Затем идём и правим конфиг-файл /usr/local/etc/zabbix/zabbix-agentd.conf и вносим аналогичные изменения, как и под Winodws (за исключением, пожалуй, UserParameter).
Настраиваем Web-интерфейс Zabbix
- Залогиниваемся под Admin:zabbix, пароль потом сменим.
- В меню (сверху справа) идём в Profile и меняем язык на привычный (русский есть).
- В основном меню (слева) “Настройка – Узлы сети” и кнопка справа вверху “Создать узел сети”, указываем IP адрес хоста и создаём логические группы (так же в Настройка – Группы узлов). Добавив хост не забываем перейти на вкладку “Шаблоны” и назначить шаблон соответствующего устройства. Например Template OS Windows, Template OS FreeBSD и т.д.
- Можно настроить автообнаружение (см. мануал https://www.zabbix.com/documentation/1.8/ru/manual/auto-discovery), вообще очень советую читать документацию, она очень понятна и наглядна, а возможности там просто космические.
Изображаем устройства на карте:
Настройка – Карты сетей, кнопка “Создать карту…”.
- Кнопки добавления устройства
- Выбор типа узла. Можно выбрать конкретный узел. Группу. Просто изображение. Другую карту и т.д.
- Указываем имя элемента.
- Ссылка на конкретный элемент в базе. Очень важно!
- Изображение. В скобочках – размер картинки.
Для того, чтобы нарисовать связь между узлами – выделяем два узла и жмём + на связи (правее добавления узла). Всё просто.
Начинаем мониторить различные события (Мониторинг – Обзор). В правом верхнем выделим “Группа: Все”, либо интересующую нас группу пользователей. Ну и мы увидим события, которые происходят в системе. Наиболее критичные отмечаются красным цветом. На каждый прямоугольник можно кликнуть и просмотреть детали, либо подтвердить (чем-то похоже на систему уведомлений).
Можно выбрать представление в виде данных
И получить графики или значения по нужному параметру.
Zabbix так же поддерживает мониторинг девайсов вроде Cisco и им подобных по протоколу SNMP (я как-то мониторил подобное прямо из PHP, но это было не слишком удобно). Раздобуду Cisco – обязательно продемонстрирую, прямо здесь, ниже.
Кроме того, есть возможность мониторить программные компоненты – сервера баз данных (загруженность), веб-сервера и т.д. Сам я только начал его осваивать, но, думаю, что это очень полезный администратору инструмент.
Продолжаем разбираться. Сейчас мы добавим в нашу локальную сеть маршрутизатор Cisco (я проведу эту работу с виртуальным GNS3 оборудованием, потому как не могу найти роутер нужной модели). Итак, топология будет такая:
Здесь у нас есть Zabbix-сервер, коммутатор для сопряжения с устройствами, EtherSwitch от Cisco (на базе c3745), а также тестовая станция “1”.
Итак, первым делом создадим Community:
ESW1(config)#snmp-server community my_lokal ro 10
ESW1(config)#access-list 10 permit 192.168.1.2
192.168.1.2 – адрес моего zabbix-сервера в виртуальной конфигурации.
ESW1(config)#int fa0/0
ESW1(config-if)#ip address 192.168.1.3 255.255.255.0
ESW1(config-if)#no shutdown
Отлично, если наш EtherSwitch пингуется, значит всё ок. Теперь идём в CentOS (linux).
Нам нужно проверить работу SNMP:
# snmpwalk -v 2c -c «my_lokal» 192.168.1.3 ifDescr
(я использовал grep, можно обойтись и без него)
Отлично! Мы можем получать значения по SNMP с нашего устройства. Кстати, заметим, что интересующий нас порт имеет index = 5. Получим его состояние:
# snmpget -v 2c -c «my_lokal» 192.168.1.3 1.3.6.1.2.1.2.2.1.8.5
Последняя 5 – это как раз index порта. А эта длинная строка из чисел, разделённых точками – OID. В каждом устройстве их множество, полный список легко гуглится. Вот я привёл OID для получения ifOperStatus порта по его индексу.
Порт у нас поднят. Чтож, самое время подстроить Zabbix.
Добавляем новое устройство:
Не забываем назначит шаблон. Подойдёт Template SNMP Generic. Обратите внимание, что интерфейс агента нужно убрать, а оставить интерфейс SNMP.
Затем переходим в элементы данных и деактивируем все элементы, созданные по умолчанию из шаблона.
После этого создаём новый элемент данных и заполняем его как указано ниже:
При этом присваиваем имя, выбираем тип SNMPv2, а так же в поле Ключ вводим (либо текстовое представление (ifOperStatus.5). SNMP OID делаем аналогичным. Не забываем поменять community.
Далее создаём триггер, который будет реагировать на изменения этого параметра:
В разделе “Триггеры” делаем “Создать” в правом верхнем углу и заполняем поля:
По нажатии кнопки “Добавить” мы выбираем наш элемент данных и делаем условие срабатывания N = 2 (2 – это означает OperStatus = down). После этого поле “Выражение” у нас заполнится так:
Сохраняем триггер и готовимся к работе.
Отрубаем порт интерфейса и видим в логах:
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/2, changed state to down
А Zabbix уже недовольно ворчит о срабатывании триггера.
Подобным образом можно настроить реагирование на изменение любых параметров оборудования (подсмотренных через snmpwalk без указания параметров – их там не один десяток).
Zabbix: Мониторинг рабочих процессов
В этой статье описан один из способов мониторинга памяти, потребляемой рабочими процессами rphost средстами Zabbix.
Кратко механизм мониторинга можно описать следующим образом:
1. На стороне 1С по расписанию запускается обработка, которая подключается к кластеру серверов и получает от него необходимые данные
2. Полученные данные отправляются на сервер Zabbix с помощью механизма Zabbix sender
3. Количество рабочих процессов на сервере 1С не постоянно. Для того, тобы Zabbix сервер хранил и анализировал данные в разрезе отдельных процессов, должно быть настроено динамическое обнаружение рабочих процессов
4. Динамическое обнаружение можно реализовать путем создания пользовательских LLD (Low Level Discovery) правил на стороне Zabbix сервера
5. Данный механизм предполагает выполнение скрипта, осуществляющего обнаружение рабочих процессов на Zabbix агенте
Таким образом, настройку мониторинга рабочих процессов можно разделить на следующие этапы:
1. Настройка сбора и отправки данных
2. Настройка Zabbix агента для реализации механизма динамического обнаружения рабочих процессов
3. Настройка Zabbix сервера для получения, хранения и анализа данных
1. Настройка сбора и отправки данных
Сбор данных для мониторинга можно реализовать с помощью внешней обработки, настроенной на запуск по расписанию, либо регламентного задания. Пример кода с использованием COM соединения:
К статье приложена обработка, использующая данный код. Она может быть подключена к типовым конфигурациям средствами БСП через дополнительные внешние отчеты и обработки и запускаться по расписанию. Обработка протестирована на платформе 8.3.12.1790.
Данные отправляются в цикле отдельно для каждого рабочего процесса. При этом ожидается, что в настройках Zabbix сервера создан элемен элемент под каждое значение с именем Rphost[
2. Настройка Zabbix агента для реализации механизма динамического обнаружения рабочих процессов
Создание правил обнаружения применяется в том случае, когда на этапе создания элемента данных Zabbix не известны его параметры. В данном случае мы не знаем количество и PID рабочих процессов, которые требуется мониторить.
Настройка обнаружения на стороне Zabbix агента заключается в следующем:
1. В конфигурации агента используется директива UserParameter. Она является инструментом расширения функциональности агента. UserParameter используется для запуска агентом пользовательских скриптов т.е. директива указывает на скрипт. В файл конфигурации zabbix агента zabbix_agentd.conf добавляется строка:
UserParameter=oscript,»C:\Program Files (x86)\OneScript\bin\oscript.exe» C:\temp\RphostPID.os
После обновления файла конфигурации агента необходимо перезапустить.
2. Создается скрипт, который должен возвращать список рабочих процессов в формате JSON следующего вида:
В данном случае используется скрипт OneScript со следующим кодом:
Если на агенте все настроено правильно, то выполнение команды на сервере
zabbix_get -s -p -k ‘oscript’
будет возвращать данные в требуемом формате.
3. Настройка Zabbix сервера
На стороне сервера необходимо выполнить следующие настройки:
1. Создать шаблон: «Настройка → Шаблоны → Создать шаблон». Здесь необходимо заполнить только имя
2. Для созданного шаблона создать правило обнаружения: «Настройка → Шаблоны → Имя созданного шаблона → Правила обнаружения → Создать правило обнаружения».
Здесь необходимо заполнить параметры:
Ключ: oscript (имя UserParameter из конфигурации zabbix агента)
3. Создать прототип данных «Настройка → Шаблоны → Имя созданного шаблона → Правила обнаружения → Имя созданного правила → Прототипы элементов данных → Создать прототип элементов данных»
Здесь необходимо заполнить параметры:
Тип: Zabbix trapper
Тип информации: числовой (целое положительное)
Тип данных: десятичный
4. Созданный шаблон применить к объекту мониторинга
Через некоторое время будут автоматически созданы элементы мониторинга Rphost[
], соответствующие рабочим процессам. Собранные данные можно анализировать с помощью графиков и настраивать оповещения с помощью триггеров.