В этой статье будет рассказано про правила обнаружения в Zabbix. То есть Zabbix будет находить какие-то объекты на сервере и их мониторить.
Ищем сетевые устройства
Допустим мы хотим мониторить все сетевые интерфейсы на сервере, но мы не знаем сколько их и как они называются. Для такой задачи хорошо подходят правила обнаружения в Zabbix.
Создаём правило обнаружения
Чтобы создать такое правило обнаружения, перейдём по меню «Настройки / Узлы сети». Там находим необходимый узел и нажимаем на «Обнаружение».
Дальше нажимаем на кнопку «Создать правило обнаружения»:
В появившемся окне вводим информацию:
Здесь стоит обратить внимание на ключ net.if.discovery. Это ключ Zabbix агента, который обнаружит на сервере все сетевые интерфейсы. Интервал обновления можем задать побольше, ведь у нас не часто будут появляться и пропадать новые интерфейсы. Также здесь нужно указать период сохранения потерянных ресурсов, например интерфейса больше такого нет, сколько по нему нужно хранить информацию.
Чтобы протестировать нажмите на кнопку «Тест»:
Как видите, мы обнаружили 3 сетевых интерфейса: lo, ens18, ens19.
Дальше окно тестирования закрывайте, а правило обнаружения добавляйте.
Создаём прототип элемента данных
И так, у нас обнаружились сетевые интерфейсы, что мы можем по ним мониторить? Например, то что они в состоянии UP, то есть линк есть и всё работает.
В окошке, в котором мы создали «Правило обнаружения», нужно нажать «Прототипы элементов данных»:
В появившемся окне создаём прототип элемента данных, в котором мы можем использовать переменную {#IFNAME}:
Здесь мы используем ключ элемента данных vfs.file.contents[«/sys/class/net/{#IFNAME}/operstate»]. Тип информации — Текст. И ставим галочки — Создать активным и Обнаружение.
После того как сработает правило обнаружения, у нас появится три новых элемента данных:
А вот данные по этим элементам:
Фильтры правила обнаружения
Нам не нужно мониторить lo интерфейс. Чтобы его убрать, возвращаемся к созданному правилу обнаружения и переходим на вкладку «Фильтры». И добавляем такой фильтр:
- {#IFNAME} совпадает ^.*$ — имя интерфейса это любая строка.
- {#IFNAME} не соответствует ^lo.*$ — но имя интерфейса не начинается с lo.
Чтобы проверить, возвращаемся к элементам данных:
Как видите, на против интерфейса lo появился восклицательный знак. Этот элемент будет удалён через 10 дней.
Ищем смонтированные устройства
Создаём правило обнаружения
Здесь правило обнаружения создаётся аналогично, но ключ элемента данных: vfs.fs.discovery.
Фильтры правила обнаружения
При этом будут найдены все файловые системы, в том числе sysfs, procfs, tmpfs и подобные. Поэтому создадим фильтр, чтобы сюда попадали только разделы с файловой системой ext. Если у вас другие файловые системы, то просто добавьте их в фильтр.
Здесь мы применяем регулярное выражение: ^ext[2-4]$ — то есть ext2, ext3, или ext4.
Создаём прототип элемента данных
В прототипе мы можем использовать переменную {#FSNAME}, это точка монтирования.
Здесь мы использовали ключ метрики — vfs.fs.size[{#FSNAME},pused]. То есть вычисляем занятое место на разделе.
Когда выполнится данное правило обнаружения появится новый элемент данных:
А вот значение элемента данных:
В моём случае, на сервере только один (корневой) раздел. У вас может оказаться несколько разделов.
Ищем блочные устройства
Создаём правило обнаружения
Здесь правило обнаружения создаётся аналогично, но ключ метрики: vfs.dev.discovery.
Фильтры правила обнаружения
Это обнаружение найдет все блочные устройства, а нам нужно только диски (sda, sdb). Поэтому зададим фильтр:
- {#DEVNAME} совпадает ^sd.*$ — только дисковые устройства и разделы.
- {#DEVTYPE} совпадает disk — тип устройства только диск (разделы отбрасываем).
Создаём прототипы элемента данных
Создаём два прототипа элемента данных с ключами: vfs.dev.write[{#DEVNAME}, sps] и vfs.dev.read[{#DEVNAME}, sps]. Оба элемента имеют тип данных — целое с плавающей точкой. Первый показывает нагрузку на диск по записи, второй по чтению.
После срабатывания правила обнаружения получили ещё два элемента данных: Запись на диск и Чтение диска:
А вот мониторинг последних данных:
В этом примере я не создавал ни одного элемента данных вручную. Три правила обнаружения создали мне 5 элементов данных. Но это тестовый сервер, на боевом может быть больше сетевых карт, больше разделов и дисков.
Если я добавлю на сервер ещё один диск, или сетевую карту, правило обнаружения найдёт её. И будет создан ещё один элемент данных.
А ещё, я ни где не указывал имена сетевых интерфейсов, точек монтирования или блочных устройств. То есть это такой универсальный способ создавать элементы данных.
Правила обнаружения хорошо работают с шаблонами, про них я напишу отдельную статью.
Другие мои статьи по Zabbix доступны здесь.
Если понравилась статья, подпишись на мой канал в VK.