zabbix свой скрипт проверки
Zabbix Documentation 5.4
Sidebar
Table of Contents
11 Внешние проверки
Обзор
Внешняя проверка исполняется Zabbix сервером выполнением shell скрипта или бинарного файла. Однако, когда узлы сети наблюдаются через Zabbix прокси, внешние проверки выполняются через этот прокси.
Внешние проверки не требуют на наблюдаемом узле сети какого-либо агента.
Синтаксис ключа элемента данных:
АРГУМЕНТ | ОПРЕДЕЛЕНИЕ |
---|---|
скрипт | Имя shell скрипта или бинарного файла. |
параметр(ы) | Опциональные параметры командной строки. |
Если вы не хотите передавать какие-нибудь параметры скрипту, вы можете использовать:
Zabbix сервер заглянет в папку указанную как размещение внешних скриптов (параметр ‘ExternalScripts’ в файле конфигурации Zabbix сервера) и выполнит заданную команду. Команда будет выполнена от имени пользователя под которым запущен Zabbix сервер, так что любые права доступа или переменные среды должны быть обработаны в оболочке скрипта, если необходимо, и права доступа на команду должны разрешать этому пользователю выполнение скрипта. Для выполнения доступны только те команды, которые имеются в наличии в указанной папке.
Пример использования
Выполнение скрипта check_oracle.sh с первым параметром ‘-h’. Второй параметр будет заменен IP адресом или DNS именем узла сети в зависимости от выбранного в настройках узла сети.
Предположим, что узел сети настроен на использование IP адреса, тогда Zabbix выполнит:
Результат внешней проверки
Результирующим значением проверки является стандартный вывод вместе со стандартным выводом ошибок (возвращается полный вывод с обрезанными пробелами в конце начиная с Zabbix 2.0.
В случае, если выполняемый скрипт не найден, Zabbix сервер не имеет необходимых прав на его запуск, элемент данный становится неподдерживаемым и будет возвращено соответствующее сообщение об ошибке. В случае превышения времени ожидания, элемент данных также помечается как неподдерживаемый, соответсвующее сообщение об ошибке будет отображено и отдельный процесс этого скрипта будет ликвидирован.
Мониторинг значений из текстового файла в Zabbix
Недавно мне досталась любопытная задача по мониторингу системы управления насосами и электрооборудованием. Как сами эти системы работают не знаю, для меня значения с контроллеров вывели в текстовые файлы на компьютере под управлением Windows. Моей задачей было передать параметры из текстового файла в систему мониторинга Zabbix.
Введение
Если у вас еще нет готовой системы мониторинга, можете воспользоваться моей статьей по установке и настройке zabbix на centos или freebsd.
Задача по своей сути не сложная. Нечто похожее я уже делал, когда настраивал мониторинг температуры процессора в windows сервере. Мы берем текстовый файл, парсим его с помощью bat файлов и передаем готовые числовые или строковые значения в Zabbix через windows агента и функционал UserParameter.
Пишу эту статью в основном для того, чтобы поделиться примерами написания bat файлов для парсинга и передачи в заббикс. Для меня это было самое сложное, так как приходилось сталкиваться с различными проблемами по вычленению значений и искать варианты для преобразования строк. Я не очень разбираюсь в программировании, особенно в bat файлах. В основном ищу готовые варианты и переделываю под себя. Тут ничего готового я не нашел и пришлось ковыряться и разбираться самому.
Скрипты для парсинга значений
Первый текстовый файл имел примерно такое содержание:
Описание возможных значений параметров:
Обращаю внимание на то, что у меня имя файла было на русском языке. Чтобы его корректно обрабатывало, необходимо сохранить файл в кодировке OEM 866. ПО крайней мере так она называлась в Notepad++, который я использовал для изменения кодировки. Это была самая простая задача, которая решилась прямо в лоб. По аналогии написал скрипт для параметра sensor:
Дальше пришлось соображать, как передать числовое значение, обрезав все, что стоит перед ним. Наверное, для любого программиста это простая задача, для скрипта в linux я тоже не вижу больших проблем придумать что-нибудь с sed, cat, grep или чем-то еще. Но тут у меня в распоряжении bat. Можно было на vbs написать, но для меня это было бы еще сложнее.
Начал читать документацию по for и find, смотреть примеры и пробовать. В итоге все получилось очень просто и коротенько, но повозиться мне пришлось прилично, пока родились эти строки:
Подробно описывать не буду, что тут к чему, при желании сами можете поискать описание параметров. Обращу внимание только на строку set d=%str:
21,25%. Она меня очень выручила. Наткнулся где-то в примере на описание обрезания строк по заданным колонкам. Тут мы выводим значения с 21 по 25 колонки найденной строки. Как раз то, что мне нужно. На выходе просто цифры, которые отлично принимает zabbix.
Обработку параметра general_state делаем аналогичным способом:
Поступающее значение я передаю в заббикс как простую строку, в отличие от чисел в предыдущих примерах.
Второй текстовый файл был примерно такого содержания:
Здесь по аналогии делается все так же, как и в первом примере за одним исключением. Я в какой-то момент поставил в команде find ключ /i, который означает, что значение ищется без учета регистра. В итоге в новом файле я получил проблемы при поиске строк, где есть слово power. Таких строк несколько, причем первая точно повторяет 6-ю, где встречается точно такая же конструкция:
Или еще пример со строками:
Я начал думать, гадать и заходить окольными путями для решения проблемы. В цикле for есть параметр eol, который позволяет задать символ начала строки, при встрече которого строка не обрабатывается. Например вот так:
То есть я нахожу первую и нужную мне строку с active_power, а вторую, где тоже есть эта фраза пропускаю, так как она начинается с символа R. Такой вот костыль придумал, но тем не менее поставленную задачу эта конструкция решает. Рассказываю об этом, чтобы поделиться опытом и самому потом не забыть эти подходы. В итоге я просто убрал ключ /i в команде find и поиск стал работать с учетом регистра без лишних телодвижений.
Распарсил в итоге второй файл. Проверять работу скриптов нужно в командной строке, просто их запуская. На выходе вы должны получать готовые значения, без лишних строк. Теперь двигаемся дальше и настраиваем zabbix agent на сбор данных.
Добавляем UserParameter в zabbix agent
Открываем конфигурационный файл агента и добавляем в самый конец новые параметры, которые будет собирать zabbix:
И так далее. Не стал приводить полный вывод своего файла. По аналогии делаете у себя. Первое значение это название ключа, который будет указан в итеме на сервере, второе это путь к батнику.
После изменения конфигурационного файла нужно перезапустить службу агента. Проверить, все ли сделано правильно можно с помощью команды в консоли:
Если у вас все работает и значения правильные выводятся, идем на сервер, настраивать сбор параметров.
Настройка новый итемов на сервере zabbix
Мы можем добавить новые итемы на одиночный хост, в котором указаны в агенте необходимые для сбора UserParameter, либо создать сразу шаблон и потом его добавить к нужным хостам. Если у вас хостов с одинаковым мониторингом больше одного, то делать нужно шаблон, чтобы упростить себе жизнь.
Создаем новый итем в хосте, либо шаблоне. Указываете следующие обязательные параметры (я рекомендую использовать английский язык везде):
Имя | Произвольное имя итема |
Тип | В общем случае используются пассивные проверки (Zabbix agent) |
Ключ | Название ключа, который указан в агенте в UserParameter |
Тип данных | Выбираете в зависимости от типа поступаемых данных. В моем случае это были цифровые целые или с плавающей точкой, если значения дробные, и текстовые. Здесь важно не перепутать тип. Если перепутаете, получите ошибку итема. |
Интервал обновления | Как часто будут поступать новые данные |
На этом все. Сохраняете итем и ждете поступление данных. Числовые значения, которые генерируют скрипты на клиенте с агентом будут поступать на сервер.
Заключение
Подобным способом можно настроить мониторинг любых значений текстового файла. Достаточно его распарсить нужным образом. Хотя в большинстве случаев это будет костылем. У заббикса очень много способов получения данных. Лучше обходиться без промежуточных звеньев в виде текстового файла и передавать данные напрямую в zabbix. Но конкретно в данной ситуации это было самое простое и быстрое решение.
Zabbix Documentation 5.4
Sidebar
Table of Contents
5 Простые проверки
Обзор
Простые проверки в основном используются для удаленных безагентных проверок сервисов.
Обратите внимание, что для простых проверок Zabbix агент не требуется. За обработку (созданием внешних подключений и т.д.) простых проверок отвечает Zabbix сервер/прокси.
Примеры использования простых проверок:
Поддерживаемые простые проверки
Список поддерживаемых простых проверок:
]
Этот элемент данных поддерживается начиная с Zabbix 3.0, но ntp сервис был доступен в net.tcp.service[] элементе данных и в предыдущих версиях.
Обработка времени ожидания
Zabbix не будет обрабатывать простую проверку дольше Timeout (времени ожидания) секунд, заданных в файле конфигурации Zabbix сервера/прокси.
ICMP пинг
Для обработки ICMP пинг Zabbix использует внешнюю утилиту fping.
Эта утилита не является частью дистрибутива Zabbix и должна быть установлена дополнительно. Если утилиты нет, у нее выставлены неверные разрешения и её размещение не совпадает с размещением заданным в файле конфигурации Zabbix сервера/прокси (параметры ‘FpingLocation’), ICMP пинг (icmpping, icmppingloss, icmppingsec) не будет обрабатываться.
fping должен быть выполняемым под пользователем Zabbix демонов и должен иметь setuid root. Выполните эти команды из под root для выставления корректных разрешений:
После выполнения этих двух команд выше проверьте владельца исполняемого файла fping. В некоторых случаях владелец может сброситься при выполнении chmod команды.
Также проверьте, принадлежит ли пользователь zabbix к группе zabbix, запустив команду:
и если нет добавьте следующей командой:
Значения по умолчанию, ограничения и описания значений для параметров ICMP проверок:
Zabbix записывает проверяемые IP адреса во временный файл по всем трем icmpping* ключам, который затем передается утилите fping. Если элементы данных имеют различные параметры ключа, то только элементы данных с идентичными параметрами ключа записываются в один файл.
Все записанные в один файл IP адреса проверяются fping утилитой в параллельном режиме, таким образом процесс Zabbix icmp pinger тратит фиксированное время вне зависимости от количества IP адресов в файле.
Zabbix Documentation 5.4
Sidebar
Table of Contents
7 Скрипты
Обзор
В разделе Администрирования → Скрипты пользователи могут настраивать и поддерживать скрипты.
Эти скрипты, в зависимости от набора прав доступа пользователя, становятся доступны для выполнения при нажатии на узле сети в различных местах веб-интерфейса (ПАНЕЛЬ, Проблемы, Последние данные, Карты сети), их также можно выполнять в операциях действий. Скрипты выполняются Zabbix сервером или агентом.
Здесь отображается список существующих скриптов с подробной информацией о них.
Для настройки нового скрипта, нажмите на кнопку Создать скрипт в верхнем правом углу.
Опции массового редактирования
Кнопки ниже списка предлагают некоторые опции массового редактирования:
Для использования этой опции, отметьте соответствующие скрипты, затем нажмите на требуемую кнопку.
Фильтр
Посколько список может содержать некоторое скриптов, возможно потребуется отфильтровать только те, которые вам действительно необходимы.
Ссылка Фильтр доступна выше списка скриптов. Если вы нажмёте на неё, фильтр раскроется и вы сможете отфильтровать скрипты по имени.
Настройка глобального скрипта
Выполнение скрипта и результат
Скрипты запускаемые Zabbix сервером выполняются в порядке, описанном в разделе Выполнение команд, включая проверку кода выхода. Результат выполнения скрипта отображается во всплывающем окне, которое появляется после того, как скрипт запускается.
Обратите внимание: Возвращаемым значением скрипта является стандартный вывод вместе со стандартным выводом ошибок.
Смотрите пример скрипта и окно с результатом ниже:
Время ожидания выполнения скриптов
Zabbix агент
Вы можете столкнуться с ситуацией, когда произойдёт превышение времени ожидания при выполнении скрипта.
Просмотрите ниже пример запуска скрипта на Zabbix агенте и окно с результатом:
Сообщение об ошибке в этом случае будет следующим:
Чтобы избежать подобной ситуации, рекомендуется выполнить оптимизацию самого скрипта (вместо изменения параметра Timeout до соответствующего значения (в нашем случае, > ‘5’) в конфигурации Zabbix агента и конфигурации Zabbix сервера).
В случае, если параметр Timeout изменён в конфигурации Zabbix агента, всё ещё появляется следующее сообщение об ошибке:
Она означает, что изменения сделаны в конфигурации Zabbix агента и требуется также изменить настройку Timeout в конфигурации Zabbix сервера.
Zabbix сервер/прокси
Просмотрите ниже пример запуска скрипта на Zabbix сервере и окно с результатом:
Также рекомендуется выполнить оптимизацию самого скрипта (вместо изменения параметра TrapperTimeout до соответствующего значения (в нашем случае, > ‘11’) в конфигурации Zabbix сервера).
Мониторим всё: расширение агентов Windows и Linux при помощи скриптов
Если нам нужно мониторить состояние серверов и прочих компьютеризированных рабочих мест при помощи Zabbix, то это можно сделать двумя способами.
Первый способ — это при помощи SNMP-запросов, с отправкой которых Zabbix замечательно справляется. Так можно вытащить и загрузку сетевых интерфейсов, и загрузку процессора, памяти. Поверх этого, производители сервера могут выдать нам по SNMP еще много информации о состоянии железа.
Второй заключается в использовании Zabbix агента, который мы будем запускать на наблюдаемой системе. Список наблюдаемых параметров включает в себя как и такие простые вещи, как загрузка процессора, использование памяти, так и более хитрые, такие как чтение текстовых лог-файлов с поддержкой ротации или отслеживание факта изменения любого файла. Можно даже в качестве параметра использовать вывод любой произвольной команды на системе. Возможности Zabbix агента растут от версии к версии.
Что делать, если того, что мы хотим контролировать через Zabbix нет в списке возможностей Zabbix агента? Ждать пока это имплементируют разработчики в следующем релизе? Не обязательно.
Нам оставили несколько стандартных интерфейсов для того, чтобы расширить возможности Заббикса по мониторингу серверов настолько, насколько позволит нам наша фантазия и наличие свободного времени на написание скриптов. Интерфейсы эти UserParameter и zabbix_sender. О первом и пойдет речь, а в качестве примеров будет показано как можно собирать состояние S.M.A.R.T жестких дисков и контролировать, когда кто-то удаляет или устанавливает новые программы на своей Windows-машине.
Немного матчасти
Если вы уже хоть раз настраивали Zabbix агент на сервере, то начать использовать UserParameter не составит труда. Чтобы добавить новый параметр нужно сделать несколько вещей:
— уникальное имя, которое мы придумываем сами. Будем его использовать при настройке элемента данных в Zabbix.
— команда, которую нужно выполнить на наблюдаемом узле сети.
А вот сразу очень простой пример, который лежит в каждом стандартном конфиге для Linux:
и затем выставляем ключ такой же, как указали в конфиг-файле, а тип Zabbix агент:
Мониторинг SMART через UserParameter
Пример выше имеет мало практического применения, учитывая, что уже итак существует стандартный ключ system.users.num, который делает ровно тоже самое.
Так что теперь рассмотрим пример, который уже больше будет походить на реалистичный.
Если нам интересно мониторить момент, когда пора планово менять жесткие диски, то есть два варианта:
и утилита готова к использованию.
Для каждого диска, который есть в системе сначала проверим, что SMART включен:
если вдруг SMART поддерживается диском, но выключен, то активируем его:
Теперь мы можем проверять статус SMART командой:
Именно эту команду мы и запишем в наш zabbix_agentd.conf:
где uHDD.health — ключ.
Мониторинг SMART через Flexible UserParameter
Тут возникает резонный вопрос, как быть если дисков два. Легче всего решить эту проблему поможет способность UserParameter передавать параметры агенту, про которую мы еще не упоминали. Но делается все очень просто, сразу пример:
В веб-интерфейсе Zabbix в ключе мы будем подставлять параметры в квадратные скобки вместо *. Например, для одного элемента данных мы напишем sda, а для другого sdb. В команде этот параметр найдет отражение там, где стоит переменная $1.
Создадим для второго диска элемент данных:
И через некоторое время сможем наблюдать результат в последних данных:
Мониторинг SMART через Flexible UserParameter c Low-level Discovery
Все получилось. Но тут возникает резонный вопрос, как быть если дисков не два, а двадцать два. И тут нам пригодится замечательная возможность низкоуровнего обнаружения (LLD), про которую мы уже говорили.
Низкоуровневое обнаружение позволяет системе мониторинга обнаруживать какое количество однотипных элементов присутствует на узле сети и динамически по шаблону создавать необходимые элементы данных, триггеры и графики для этих элементов. «Из коробки» системе доступна возможность находить файловые системы, сетевые интерфейсы и SNMP OID’ы. Однако, и здесь разработчики оставили возможность дополнить стандартные возможности, нужно просто передать в систему информацию о том, какие элементы обнаружены в формате JSON. Этим и воспользуемся.
Создадим маленький скрипт на perl, smartctl-disks-discovery.pl. Он будет находить все диски в системе и выводить эту информацию в JSON, передавая также информацию, включен ли у диска SMART или нет, а также попытается сам включить SMART, если он выключен:
При запуске скрипт выдает:
Теперь, для того чтобы скрипт автоматически запускался Zabbix’ом, просто добавим еще один UserParameter в zabbix_agentd.conf:
Покончив с настройкой конфига, переходим в веб-интерфейс, где создаем новое правило обнаружения для smartctl:
Обратите внимание на ключ и на фильтр, (<#SMART_ENABLED>=1) благодаря последнему будут добавляться только те обнаруженные диски, которые поддерживают SMART. Теперь мы можем переписать два наших элемента данных для дисков sda и sdb в один прототип элементов данных, просто заменив имя диска на макрос <#DISKNAME>:
Последнее, перед тем, как Zabbix сможет запускать команды, которые мы прописали в zabbix_agentd.conf из-под root и мониторить SMART, нужно добавить разрешения для его пользователя запускать эту команду без ввода пароля, для этого добавим в /etc/sudoers строчку:
Готовый шаблон для мониторинга SMART с остальными элементами данных, триггерами прикладываю, так же как и настроенный под него конфиг.
Контроль за установкой новых программ на Windows
Zabbix агент, установленный на Windows, точно также может быть расширен через UserParameter, только команды будут уже другие. Хотя, например, smartctl — кроссплатформенная утилита, и точно также можно ее использовать для контроля за жесткими дисками в Windows.
Кратко рассмотрим еще другой пример. Задача получать уведомление каждый раз, когда пользователь самостоятельно удаляет или устанавливает программы.
Для этого будем использовать наш vbs-скрипт:
Для его интеграции с Zabbix добавим UserParameter в конфиг-файл:
Добавим элемент данных в шаблон для Windows:
Добавим триггер:
и действие, которое будет отправлять e-mail уведомление:
Весь процесс мониторинга выглядит так: каждый час запускается скрипт Zabbix агентом, который сравнивает два списка программ: текущий и предыдущий. Затем скрипт выписывает все изменения в отдельный файл. Если же изменений нет, то в файл пишется 0x0
Содержимое файла уходит на Zabbix сервер, где поднимается триггер в случае, если значение элемента данных uDiffProgramms отлично от 0x0. Затем отдельное действие отправляет по почте уведомление со списком того, что было установлено или удалено на данном компьютере:
В итоге
UserParameter — отличная и простая возможность расширить функционал системы самостоятельно. Стоит упомянуть и альтернативы: zabbix_sender, который, например, подойдет для тех случаев, когда нужно отправлять данные в Zabbix не по расписанию, (как это делает UserParameter), а по какому-то событию; и system.run[], который похож на UserParameter, но удобнее тем, что не нужно вносить изменения во все конфиги агентов, достаточно просто добавить этот элемент данных в шаблон. Более того, в следующем крупном релизе Zabbix 2.2 нас ожидает еще один новый способ расширить возможности агента- это подключаемые модули. Ждем с нетерпением!
Вот так, считайте, что если вы можете узнать что-то о системе скриптом или командой, значит, вы всегда можете передать это в Zabbix.