
Полностью переработан шаблон для мониторинга MSSQL Server 2019. Шаблон основан на предыдущей версии:
Zabbix шаблон для мониторинга Microsoft SQL Server 2019
Получился шаблон для мониторинга Microsoft SQL Server 2012 - 2019 в Zabbix 7.4. Проверял на 2019 сервере, через активный Zabbix Agent.
В шаблоне 8 приложений, 72 элемента данных и 24 триггера. Плюс 32 прототипа элементов данных и 15 прототипов триггеров.
Что нового в версии 7.4-1?
- Шаблон предназначен для Zabbix 7.4
- Шаблонов теперь два: для обычного zabbix agent и для active zabbix agent
- Исправлены ошибки
- Исправлена проблема с локализованной версией MSSQL и счётчиками производительности
- Исправлена проблема с кодировкой UTF-8 в общем и кириллицей в частности для активного агента
- Отредактированы параметры макросы
- Исправлены опечатки и ошибки в названиях элементов данных и триггеров
- Добавлен триггер
- Улучшен вывод некоторых текстовых элементов данных
- Исправлена проблема с кириллицей в названиях джобов
- Модифицированы PowerShell скрипты, исправлены проблемы с UTF-8
- Теперь для получения данных не используется пользователь sa
- Изменены пути с
C:\zabbix\scripts\
наC:\Program Files\Zabbix Agent\scripts\
- Другие косметические правки
Установка шаблона
Скачиваем и распаковываем zbx7-mssql_v7.4-1.zip.

Папку со скриптами PowerShell копируем в C:\Program Files\Zabbix Agent\scripts\
.
Папку с файлом пользовательских переменных копируем в C:\Program Files\Zabbix Agent\zabbix_agentd.d
. Папку при необходимости подключаем в конфигурационном файле агента Zabbix. Вы можете использовать и другие пути, но тогда вам нужно будет отредактировать файл конфигурации.
Импортируем шаблон в Zabbix. Имеется два шаблона, для пассивных и активных проверок.
Модифицируем файлы mssql_basename.ps1
и mssql_jobs.ps1
.
Если используется интегрированная проверка подлинности, то можно тоже отредактировать скрипт. Скрипт мониторит инстанс по умолчанию, если нужно мониторить именованный инстанс, то следует модифицировать строку подключения. Также скрипт не рассчитан на мониторинг нескольких инстансов на одном сервере, но если очень хочется, то можно создать копии скриптов, добавить новые пользовательские переменные и продублировать шаблон, мне лень писать динамический поиск всех инстансов.
Прописываем пользователя и пароль для доступа к базе данных. Рекомендую в MSSQL создать локального пользователя zabbix
и выдать ему минимальные права.

Добавить пользователю роль public
.

И выдать ему права db_datareader
на базу msdb
. Если вы сторонник принципа минимальных привилегий, то можно дать права на SELECT к ряду таблиц:
USE [msdb]
GO
GRANT SELECT ON [dbo].[sysjobs] TO zabbix
GRANT SELECT ON [dbo].[sysjobhistory] TO zabbix
GRANT SELECT ON [sys].[servers] TO zabbix
GRANT SELECT ON [dbo].[syscategories] TO Zabbix
GRANT SELECT ON [dbo].[sysjobsteps] TO Zabbix
GRANT SELECT ON [dbo].[sysjobschedules] TO Zabbix
GRANT SELECT ON [dbo].[sysschedules] TO Zabbix
GO
Если прав недостаточно, то при попытки выполнить скрипт mssql_jobs.ps1
получим ошибку:

Если прав достаточно, то получим список джобов:

Если PowerShell скрипты не работают:
Рекомендую предварительно проверить, что все PowerShell скрипты выполняются и возвращают результат.
Перезапускаем zabbix agent. Добавляем шаблон хосту с БД.
Модифицируем макросы для тонкой настройки. Макросы можно переопределить для каждого хоста.

Джобы и триггеры
Система расписания в SQL Server написана индусами и работает по-индусьи. Поэтому написать универсальное решение для всех вариантов расписаний у меня не поднялась рука. Я написал триггеры для своих конкретных случаев.
- Job {#JOBNAME} Is NOT Enabled
Триггер срабатывает если джоб DISABLED. - Job {#JOBNAME} Is NOT Scheduled
Триггер срабатывает если у джоба нет расписания. - Job {#JOBNAME} Last Run Status NOT Succeeded
Самый полезный триггер, срабатывает когда джоб не выполнился. Есть дополнение, если отредактировать Maintenance Plans, то соответствующие джобы пересоздадутся и триггер сработает, потому как если джоб ни разу не запускался, то и последний запуск у него не succeeded. - Job {#JOBNAME} Last Run was more than a 1 HOUR ago
Для джобов, которые запускаются точно раз в час. - Job {#JOBNAME} Last Run was more than a 2 HOURS ago
Для джобов, которые запускаются точно раз в два часа. - Job {#JOBNAME} Last Run was more than a MONTH ago
Для джобов, которые запускаются точно раз в месяц. Работает также если стоит настройка типа "в последний/первый день месяца". Триггер сработает если джоб не выполнялся 31 день. - Job {#JOBNAME} Last Run was more than a WEEK ago
Для джобов, которые запускаются точно раз в неделю. - Job {#JOBNAME} Last Run was more than ONE DAY ago
Для джобов, которые запускаются точно раз в день.
Для себя вы можете запилить свои триггеры.
Спецсимволы
В названиях джобов у вас могут быть спецсимволы, к примеру, восклицательный знак. В этом случае вы получите ошибку:
Special characters ", ', ", `, *, ?, [, ], {, }, ~, $, !, &, ;, (, ), <, >, |, #, @, 0x0a" are not allowed in the parameters.
В конфиге агента включите параметр UnsafeUserParameters=1.
### Option: UnsafeUserParameters
# Allow all characters to be passed in arguments to user-defined parameters.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Range: 0-1
# Default:
# UnsafeUserParameters=0
UnsafeUserParameters=1