Процесс создания LLDR для сервисов сводится ко двум шагам:
- Написанию скрипта, срабатывающего по запросу на конечном сервере, и выдающего список сервисов и ряда полезных нам параметров
- Созданию темплейта с описанием Item Prototype и Trigger Prototype
После этих двух шагов мы сможем получать список сервисов с конкретного сервера и отслеживать его состояние - запущен ли он, или упал.
Инструкция максимально подробная, картинок будет много, все они кликабельны.
Поехали!
Настраиваем агенты
Для настройки агентов нам потребуется вышеупомянутый скрипт (ServicesList.vbs), который не нужно писать, а который можно взять вот тут: http://pastebin.com/ix5wiErb
Также, в zabbix_agentd.conf следует добавить строку вида:
UserParameter=windows.service,cscript C:\ServicesList.vbs //NoLogo
Таким образом, при помощи скрипта заббикс-серверу для каждого обнаруженного сервиса передадутся макросы:
- {#SCSTARTMODE} - опция старта сервиса (Auto|Manual|Disabled)
- {#SCNAME} - короткое имя сервиса, используемое в командах sc или net start
- {#SCCAPTION} - полное имя, которое можно видеть в оснастке менеджмента сервера
- {#SCDISCOVERYFILTER} - специальный макрос для фильтрации, о нем в конце статьи
Собственно, на этом подготовка серверов оканчивается, переходим к созданию Low-Level Discovery Rule.
Создаем темплейт
Создаем новый темплейт, назовем его "Template LLD - Windows Services"
Создаем Low-Level Discovery Rule
Нажимаем на Discovery созданного темплейта и на открывшейся странице нажимаем Create discovery rule.
Указываем:
- Name - Windows Service LLD
- Key - windows.service (его мы позже пропишем в настройках агента)
- Update interval (in sec) - 3600
Нажимаем Save.
Создаем Item Prototype
Нажимаем Item prototypes, на открывшейся странице нажимаем кнопку Create item prototype.
В окне создания прототипа объекта указываем:
- Name - Service: {#SCCAPTION} ({#SCNAME})
- Key - service_state[{#SCNAME}]
- Update interval (in sec) - 60
- Show value - Windows service state
- New application - win_services
Нажимаем Save.
Нажимаем ссылку Discovery list (находится над списком) и возвращаемся к нашему правилу, которое теперь содержит один Item Prototype.
Создаем Trigger Prototype
Нажмем на Trigger prototypes и, аналогично случаю с Item, на новом экране нажмем Create trigger prototype.
Укажем:
- Name - Service is DOWN: "[{#SCNAME}] {#SCCAPTION}"
- Severity - High
Нажмем кнопку Add напротив поля Expression.
В появившемся окне укажем:
- N - 1
затем нажмем Select prototype, чтобы связать прототип триггера с прототипом объекта. Во вновь открывшемся окне нажмем на Service:
{#SCCAPTION} ({#SCNAME}).
Нажмем Insert.
Отредактируем поле Expression, добавив еще одно правило через знак логического или - |
Было: {Template LLD - Windows Services:service_state[{#SCNAME}].last(0)}=1
Стало: {Template LLD - Windows Services:service_state[{#SCNAME}].last(0)}=1 | {Template LLD - Windows Services:service_state[{#SCNAME}].last(0)}=6
Теперь триггер будет срабатывать на два состояния службы - Stopped и Paused.
Нажимаем Save.
Нажимаем Discovery list, чтобы вернуться к странице конфигурации правил Low-Level Discovery.
По сути, на данном этапе конфигурация правила обнаружения сервисов закончена и готовый темплейт можно применять к Windows-серверам. Однако, как можно заметить, в данном виде по правилу будут создаваться объекты для исключительно всех сервисов системы. Среди них могут быть специально остановленные, или просто нам не интересные. Так или иначе стоит подумать о фильтрации сервисов.
Создаем правила фильтрации
Зайдем снова в конфигурацию нашего Low-Level Discovery Rule.
Укажем:
Нажимаем Save.
Теперь данное правило будет порождать объекты только тех служб, которые совпадают с регулярным выражением "Services discovery - exclusions", которое мы сейчас и создадим.
Переходим в Administration -> General, справа из выпадающего списка выбираем Regular expressions. Нажимаем кнопку New regular expression и указываем имя: Services discovery - exclusions
Тут стоит напомнить, что под именем {#SCDISCOVERYFILTER} у нас возвращается строка вида:
вид_запуска_сервиса-имя_сервера-имя_службы,
где:
- вид_запуска - Auto|Manual|Disabled
- имя_сервера - NetBIOS-имя сервера
- имя_службы - короткое имя службы, которое используется с командами sc или net start
Реальная строка выглядит при этом примерно так: Auto-aepmssql-1C:Enterprise 8.2 Server Agent
Так как меня интересуют запущенные службы, которые должны запускаться при старте системы и не должны падать, нажатием кнопки New первым фильтром я добавлю выражение, допускающее создание объекта:
- Expression - ^Auto
- Expression type - Result is TRUE
Таким образом любой сервис, вернувший {#SCDISCOVERYFILTER} вида Auto-*, будет создан в виде объекта и триггера, и мы адекватно отреагируем на его падение так как знаем что он должен быть запущен.
Если же нам известны сервисы, которые штатно останавливаются, или падают, но нам не интересны, мы имеем возможность добавить их в исключения следующим образом.
Если нужно добавить в исключения сервис, который присутствует на многих серверах и нигде не представляет для нас интереса, мы можем добавить фильтр по имени. В моем случае я хочу прекратить мониторинг сервиса SysmonLog. Добавляю новое выражение:
- Expression - SysmonLog
- Expression type - Character string not included
Таким образом все сервисы SysmonLog, встреченные на всех серверах, будут проигнорированы.
Однако у меня есть сервис 1C:Enterprise 8.2 Server Agent, и он мне не интересен только на одном сервере - aepmssql. В таком случае я добавляю выражение, содержащее и имя сервиса, и имя сервера:
- Expression - aepmssql-1C:Enterprise 8.2 Server Agent
- Expression type - Character string not included
Таким образом я получаю списки, содержащие все сервисы сервера, и могу выбрать какие из них я буду мониторить, а какие нет.
В конце оставляю ссылку на готовый темплейт: http://pastebin.com/nzLQLSkp, замечу что он не включает в себя готовый фильтр "Services discovery - exclusions".
Объясните, пожалуйста, что обозначает в заббиксе prototype ?
ОтветитьУдалитьНу по сути это некий шаблон, из которого вследствие работы LLD создается итем или триггер. Создаются они аналогично созданию самих объектов, но с использованием макросов. Работу можно описать примерно так - заббикс получает от клиента список пар "имя-значение" (например имена сетевых интерфейсов и текущая скорость на каждом из них) и на основе прототипа создает для каждой пары соответствующий объект. Это позволяет описывать одним темплейтом различные варианты устройств, допустим 24-х и 48-портовые свичи, без прототипов пришлось бы вручную заводить каждый интерфейс, учитывая их общее количество в конкретном девайсе.
УдалитьДобрый день. При импорте шаблона, получаю ошибку.
ОтветитьУдалить64:XML declaration allowed only at the start of the document [ Line: 3 | Column: 6 ]
Строку убрал, импорт прошел.
Спасибо.
Спасибо за комментарий, рад что пригодилось =) Вернусь из отпуска - проверю шаблон =)
Удалить