Перейти к основному содержанию

Zabbix шаблон для мониторинга Microsoft SQL Server 2019

Zabbix

Дошли руки до мониторинга MS SQL 2019 в Zabbix. Некоторые читатели жаловались, что у них 2019 SQL не работал со старым шаблоном для 2014 сервера. Очень странно, я попробовал, почти всё поднялось. Почти, но не всё. Пришлось, как обычно, немного переделать. Потом ещё немного переделать. Потом вообще всё переделать.

Получился шаблон для мониторинга Microsoft SQL Server 2012 - 2019 в Zabbix 5. Проверял на 2019 сервере, но теоретически должно работать и на более ранних версиях. В процессе работы были объединены два шаблона: мониторинг основных показателей MSSQL и мониторинг Jobs.

Исходные шаблоны:

Zabbix шаблон для мониторинга Microsoft SQL Server 2014

Zabbix шаблон для мониторинга Jobs у Microsoft SQL Server 2014

В шаблоне 8 приложений, 72 элемента данных и 23 триггера. Плюс 32 прототипа элементов данных и 15 прототипов триггеров.

В пятом заббиксе есть уже встроенный шаблон для мониторинга MSSQL. Но он требует установки Microsoft ODBC driver. Ещё в нём придётся светить логин-пароль от MSSQL. В моём случае для получения данных используются скрипты PowerShell, пароль указывается в скриптах. В этом случае можно не светить пароль в сервере Zabbix.

ВНИМАНИЕ: шаблон для английской версии MSSQL, там названия счётчиков производительности по-английски. Если у вас русская версия, то вам нужно или установить английский вариант счётчиков, или перевести мой шаблон.

Установка и модификация шаблона

Скачиваем zbx5-mssql.zip.

zabbix

Папку со скриптами PowerShell копируем в C:\zabbix\scripts. Папку с файлом пользовательских переменных копируем в C:\zabbix\zabbix_agent2.conf.d. Папку подключаем в конфигурационном файле агента Zabbix. Вы можете использовать и другие пути, но тогда вам нужно будет отредактировать файл конфигурации.

Импортируем шаблон zbx5-mssql.xml.

Модифицируем файлы mssql_basename.ps1 и mssql_jobs.ps1. Прописываем пользователя и пароль для доступа к базе данных.

sql

Если используется интегрированная проверка подлинности, то можно тоже отредактировать скрипт. Скрипт мониторит инстанс по умолчанию, если нужно мониторить именованный инстанс, то следует модифицировать строку подключения. Также скрипт не рассчитан на мониторинг нескольких инстансов на одном сервере, но если очень хочется, то можно создать копии скриптов, добавить новые пользовательские переменные и продублировать шаблон, мне лень писать динамический поиск всех инстансов.

Проверяем, работают ли PowerShell скрипты. По умолчанию они не будут работать.

zabbix

Разрешаем запуск неподписанных PowerShell скриптов на сервере:

Разрешить запуск скриптов PowerShell

Я разрешаю запуск скриптов через реестр.

zabbix

Теперь скрипты заработали. Список баз вывелся.

zabbix

Версия определилась.

zabbix

Джобы тоже выводятся.

zabbix

Перезапускаем zabbix agent. Добавляем шаблон хосту с БД.

Модифицируем макросы для тонкой настройки. Макросы можно переопределить для каждого хоста.

Параметры автообнаружения :

  • {$SQL_DB_DISCOVERY_PERIOD} — 300. Периодичность автообнаружения баз.
  • {$SQL_JOBS_DISCOVERY_PERIOD} — 1h. Периодичность автообнаружения джобов.
  • {$SQL_DB_DISCOVERY_REGEXP}. Регулярное выражение со списком баз, которые не нужно обнаруживать.
    • ^(master|model|msdb|ReportServer|ReportServerTempDB|tempdb)$
  • {$SQL_HISTORY_PERIOD} — 30d. Срок хранения истории.
  • {$SQL_HOT_REQUEST_PERIOD} — Периодичность опроса. Часто.
  • {$SQL_SHORT_REQUEST_PERIOD} — Периодичность опроса. Не очень часто.
  • {$SQL_MEDIUM_REQUEST_PERIOD} — Периодичность опроса. Средняя.
  • {$SQL_LONG_REQUEST_PERIOD} — Периодичность опроса. Очень редко.
  • {$SQL_TREND_PERIOD} — 180d. Срок хранения трендов.
  • {$SQL_THROTTLING_HB_PERIOD} — 6h. Троттлинг для списка инстансов, чтобы не хранить много лишнего в базе. Можно увеличить.

Параметры сервера:

  • {$SQL_SERVICE_REQUEST_PERIOD} — Периодичность опроса служб.
  • {$SQL_TCP_PORT} — 1433. Порт MSSQL, для триггера.

Параметры Buffer Manager:

  • {$SQL_BUFFER_HIT_RATIO_HIGH} — 2. Процент Buffer Manager: Buffer cache hit ratio для триггера HIGH.
  • {$SQL_BUFFER_HIT_RATIO_WARNING} — 4. Процент Buffer Manager: Buffer cache hit ratio для триггера WARNING.
  • {$SQL_BUFFER_LAZY_WR_SEC_MAX} — 2000. Максимальное значение Buffer Manager: Lazy writes/sec для триггера.
  • {$SQL_BUFFER_PAGE_R_SEC_MAX} — 25000. Максимальное значение Buffer Manager: Page reads/sec для триггера.
  • {$SQL_BUFFER_PAGE_WR_SEC_MAX} — 25000. Максимальное значение Buffer Manager: Page writes/sec для триггера.
  • {$SQL_BUFFER_STALL_SEC_MAX} — 100. Максимальное значение Buffer Manager: Free list stalls/sec для триггера.

Параметры Databases:

  • {$SQL_DB_LOG_FWT_MAX} — 3000. Максимальное время (мс) SQLServer:Databases: Log Flush Wait Time для триггера.
  • {$SQL_DB_LOG_FW_SEC_MAX} — 3000. Максимальное количество SQLServer:Databases: Log Flush Waits/sec для триггера.

Параметры статистики:

  • {$SQL_STAT_LOCKS_AWT_MAX} — 20000. Максимальное среднее время ожидания блокировок Locks: Average Wait Time (Total) для триггера.
  • {$SQL_STAT_LOCKS_REQUESTS_SEC_MAX} — 900000. Максимальное количество блокировок в секунду Locks: Lock Requests/sec (Total) для триггера.
  • {$SQL_STAT_LOCKS_TIMEOUTS_SEC_MAX} — 3000. Максимальный таймаут блокировок Locks: Lock Timeouts/sec (Total) для триггера.
  • {$SQL_STAT_WORK_FILES_MAX} — 3000. Максимальное количество новых рабочих файлов в секунду Access Methods: Work files created/sec для триггера.
  • {$SQL_STAT_WORK_TABLES_MAX} — 1000. Максимальное количество новых рабочих таблиц в секунду Access Methods: Work tables created/sec для триггера.

zabbix

Свои элементы данных

Есть возможность добавлять свои элементы данных. Данный шаблон использует виндовые счётчики производительности, которые ставятся вместе с MSSQL сервером. Но не все. Вы можете добавлять свои, из списка имеющихся. Список счётчиков производительности и объектов можно увидеть здесь: https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/use-sql-server-objects.

К примеру, прототип элемента данных perf_counter["\SQLServer:Databases({#DBNAME})\Active Transactions"] использует счётчик Active Transactions объекта Databases.

zabbix mssql 2014

Клонируете текущий элемент данных и вписываете из списка требуемый счётчик.

Джобы и триггеры

Система расписания в 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.

zabbix

В конфиге агента включите параметр  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

Версии

v.1

Поддержка MSSQL 2014.

v.2

Версия для MSSQL 2019.

v.3

Новое приложение MS SQL DB:

  • статус БД
  • модель восстановления БД

sql

v.4

Дошли руки добавить поддержку Джобов с пробелами в названии.

v.5

Поддержка Джобов с несколькими шагами. Теперь возвращаются данные не первого шага, а последнего, если этих шагов несколько.

v.6

Поддержка Джобов с несколькими расписаниями. Теперь будет использоваться расписание, дата выполнения которого ближе.

v.7

Исправление для Джобов. Теперь возвращаются данные не последнего шага, а последнего по времени шага. Т.е. того, который либо выполнился последним, либо завершился с ошибкой последним.

Добавлен элемент данных и скрипт к нему, который просто выводит список инстансов на сервере. Элемент информационного характера.

  • К нему макрос {$SQL_THROTTLING_HB_PERIOD}
  • И скрипт: instances_info.ps1

Добавлены элементы данных и триггеры, которые отслеживают статус зеркалирования. Добавлено в качестве расширения автообнаружения Database Discovery.

v.7.1

Исправление косячных косяков в Джобах, которые я накосячил в версии 7.

v.7.2

Исправление кракозябр при выводе данных на кириллице.

Теги

 

Похожие материалы

Мониторинг SQL запросов в Oracle Database через Zabbix

Понадобилось мне как-то мониторить в заббиксе свободное место на сервере Oracle. Всё бы ничего, однако задача свелась к более тонкой. Нужно мониторить свободное место внутри определённого tablespace. Данную задачу можно решить с помощью SQL запроса. Осталось только научиться передавать результат SQL запроса в zabbix. Приступим. 

Теги

Перемещение базы данных postgresql в Ubuntu 18.04 LTS

При установке на Ubuntu zabbix-server база данных по умолчанию пишется в папку /var/lib/postgresql. Со временем база растёт и поднимается вопрос переноса её на другой раздел диска. Перенесём базу данных в /opt/postgresql.

Теги