СКАЧАТЬ Разработано Диего Кавальканте - 06.12.2017
Электронная почта: diego@suportecavalcante.com.br
Телеграмма: @diego_cavalcante
Описание: Мониторинг Windows SQLSERVER
СО: Windows
Язык: Powershell + sqlcmd + UserParameter + PerfCounter
Тип: обнаружение низкого уровня
Если у вас есть SQLServer и вы можете использовать sqlcmd через командную строку для выполнения выборок в базах данных, следуйте пошаговым инструкциям ниже. Этот тип мониторинга является альтернативой для тех, кто не имеет или не может использовать ODBC для мониторинга баз данных, поэтому здесь мы будем использовать агент zabbix + сценарий Powershell для выполнения сборов.
° ВЕРСИЯ ПРИМЕЧАНИЯ
° Создание = Версия 1.0.0 29.08.2017 (Базовый скрипт).
° Обновление = Версия 1.1.0 01.02.2018 (Спасибо @bernardolankheet, JOBSTATUS возвращен N = 5 Никогда не выполнялся).
° ПРЕДМЕТЫ
° Размер базы данных LLD {#MSSQLDBNAME}
° Размер журнала LLD {#MSSQLDBNAME}
° LLD Количество подключений {#MSSQLDBNAME}
° Статус базы данных LLD {#MSSQLDBNAME}
° Статус заданий LLD {#MSSQLJOBNAME}
° Всего страниц
° Всего соединений в базах данных
° Целевые страницы
° Компиляции SQL (SEG)
° Процессорное время (%)
° Срок службы страницы
° Ожидание блокировки на (SEG)
° Ленивые записи от (MON)
° Ошибки на (SEG)
° Страницы базы данных
° Страницы контрольных точек (SEG)
° Общий размер журналов
° Общий размер баз данных
° Дверь
° Зарезервированная память
° Ожидается получение грантов Memoria
° Используемая память
° Кэш-память
° Коэффициент попаданий в буферный кэш (%)
° Служба SQL-сервера
° Служба агента SQL Server
° Служба SQL Server Integration Services 10.0
° Версия
° ТРИГГЕРЫ
° Статус базы данных LLD {#MSSQLDBNAME}
° Статус задания LLD {#MSSQLJOBNAME}
° Статус порта
° Статус службы SQL Server
° Статус службы агента SQL Server
° Статус службы SQL Server Integration Services 10.0
° ГРАФИКА
° База данных LLD и размер журнала {#MSSQLDBNAME}
° LLD Количество подключений {#MSSQLDBNAME}
° Статус базы данных LLD {#MSSQLDBNAME}
° Использование памяти
° Статистика
° Общий размер баз данных и журналов
Добавить преобразования если не проходит импорт шаблона Преобразования
1. Выполнить Импорт шаблона
2. Скопировать скрипт discovery.mssql.server.ps1 в C:\zabbix\scripts\
Указать Логин Пароль в скрипте для подключения к БД
discovery.mssql.server.ps1
Код: Выделить всё
# Разработано Диего Кавальканте - 06.12.2017
# Мониторинг Windows SQLServer
# Версия: 1.1.0
# Создание = Версия 1.0.0 29.08.2017 (Базовый скрипт).
# Обновление = Версия 1.1.0 01.02.2018 (Спасибо @bernardolankheet, JOBSTATUS вернул N = 5 Никогда не выполнялся).
# Параметры
Param(
[string]$select,
[string]$2
)
# Логин SQL-сервера
$usuario = "sqlusuario"
$senha = "sqlsenha"
# Соберите JSON с именем всех баз данных.
if ( $select -eq 'JSONDB' )
{
$database = sqlcmd -d Master -U $usuario -P $senha -h -1 -W -Q "set nocount on;SELECT name FROM master..sysdatabases"
$idx = 1
write-host "{"
write-host " `"data`":[`n"
foreach ($db in $database)
{
if ($idx -lt $database.Count)
{
$line= "{ `"{#MSSQLDBNAME}`" : `"" + $db + "`" },"
write-host $line
}
elseif ($idx -ge $database.Count)
{
$line= "{ `"{#MSSQLDBNAME}`" : `"" + $db + "`" }"
write-host $line
}
$idx++;
}
write-host
write-host " ]"
write-host "}"
}
# Проверить состояние базы данных.
if ( $select -eq 'STATUS' )
{
sqlcmd -d Master -U $usuario -P $senha -h -1 -W -Q "set nocount on;SELECT coalesce(max(state),7) from sys.databases where name = '$2'"
}
# Проверить количество подключений в базе данных.
if ( $select -eq 'CONN' )
{
sqlcmd -d Master -U $usuario -P $senha -h -1 -W -Q "set nocount on;DECLARE @AllConnections TABLE(
SPID INT,
Status VARCHAR(MAX),
LOGIN VARCHAR(MAX),
HostName VARCHAR(MAX),
BlkBy VARCHAR(MAX),
DBName VARCHAR(MAX),
Command VARCHAR(MAX),
CPUTime INT,
DiskIO INT,
LastBatch VARCHAR(MAX),
ProgramName VARCHAR(MAX),
SPID_1 INT,
REQUESTID INT
)
INSERT INTO @AllConnections EXEC sp_who2
SELECT count(*) FROM @AllConnections WHERE DBName = '$2'"
}
# Соберите JSON с названием всех заданий.
if ( $select -eq 'JSONJOB' )
{
$jobname = sqlcmd -d Master -U $usuario -P $senha -h -1 -W -Q "set nocount on;SELECT [name] FROM msdb.dbo.sysjobs"
$idx = 1
write-host "{"
write-host " `"data`":[`n"
foreach ($job in $jobname)
{
if ($idx -lt $jobname.Count)
{
$line= "{ `"{#MSSQLJOBNAME}`" : `"" + $job + "`" },"
write-host $line
}
elseif ($idx -ge $jobname.Count)
{
$line= "{ `"{#MSSQLJOBNAME}`" : `"" + $job + "`" }"
write-host $line
}
$idx++;
}
write-host
write-host " ]"
write-host "}"
}
# Проверить статус последнего выполненного задания.
if ( $select -eq 'JOBSTATUS' )
{
sqlcmd -d Master -U $usuario -P $senha -h -1 -W -Q "set nocount on;WITH last_hist_rec AS
(
SELECT ROW_NUMBER() OVER
(PARTITION BY job_id ORDER BY run_date DESC, run_time DESC) AS [RowNum]
, job_id
, run_date AS [last_run_date]
, run_time AS [last_run_time]
, CASE run_status
WHEN 0 THEN '0'
WHEN 1 THEN '1'
WHEN 2 THEN '2'
WHEN 3 THEN '3'
WHEN 4 THEN '4'
END AS [status]
FROM msdb.dbo.sysjobhistory
)
SELECT jobs.name AS [job_name]
, hist.status
FROM msdb.dbo.sysjobs jobs
LEFT JOIN last_hist_rec hist ON hist.job_id = jobs.job_id
AND hist.RowNum = 1
WHERE jobs.name = '$2'" | % {$_.substring($_.length-1) -replace ''} | ForEach-Object {$_ -Replace "N", "5"}
}
# Проверьте версию SQL Сервер.
if ( $select -eq 'VERSAO' )
{
sqlcmd -d Master -U $usuario -P $senha -h -1 -W -Q "set nocount on;SELECT
SERVERPROPERTY ( 'ProductVersion' ),
SERVERPROPERTY ( 'Edition' ),
SERVERPROPERTY ( 'ProductLevel' )"
}
Код: Выделить всё
UserParameter=discovery.mssql.databases,powershell.exe -noprofile -executionpolicy bypass -File C:\zabbix\scripts\discovery.mssql.server.ps1 JSONDB
UserParameter=discovery.mssql.jobs,powershell.exe -noprofile -executionpolicy bypass -File C:\zabbix\scripts\discovery.mssql.server.ps1 JSONJOB
UserParameter=discovery.mssql.dados[*],powershell.exe -noprofile -executionpolicy bypass -File C:\zabbix\scripts\discovery.mssql.server.ps1 $1 "$2"
ШАБЛОН
Template - Windows LLD MSSQL - RUS
# Разработано Диего Кавальканте - 06.12.2017
# Мониторинг Windows SQLServer
Переведен с Португальского
Группы элементов данных 5
★Сервисы★ Элементы данных 3
★MSSQL★ Статус работы Элементы данных
★MSSQL★ Статистика Элементы данных 11
★MSSQL★ Память Элементы данных 5
★MSSQL★ Общие Элементы данных 4
Элементы данных 23
Версия discovery.mssql.dados[VERSAO] 86400 15d Zabbix агент (активный) ★MSSQL★ Общие Активировано
Порт Триггеры 1 net.tcp.port[,{$MSSQLPORTA}] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Общие Активировано
Процессорное время (%) perf_counter_en[\Process(sqlservr)\% Processor Time] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Память, Используемая в SQL. perf_counter_en[\Process(sqlservr)\Private Bytes] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Память Активировано
Коэффициент попадания в буферный кэш (%) perf_counter_en[\{$MSSQLINST}:Buffer Manager\Buffer cache hit ratio] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Память Активировано
Количество страниц в секунду (SEG) perf_counter_en[\{$MSSQLINST}:Buffer Manager\Checkpoint pages/sec] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Страницы базы данных perf_counter_en[\{$MSSQLINST}:Buffer Manager\Database pages] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Отложенная запись в секунду (SEG) perf_counter_en[\{$MSSQLINST}:Buffer Manager\Lazy writes/sec] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Ожидаемая продолжительность жизни Страницы perf_counter_en[\{$MSSQLINST}:Buffer Manager\Page life expectancy] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Целевые страницы perf_counter_en[\{$MSSQLINST}:Buffer Manager\Target pages] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Всего Страниц perf_counter_en[\{$MSSQLINST}:Buffer Manager\Total pages] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Общий размер базы данных perf_counter_en[\{$MSSQLINST}:Databases(_Total)\Data File(s) Size (KB)] 3600 15d 90d Zabbix агент (активный) ★MSSQL★ Общие Активировано
Общий размер Журналов perf_counter_en[\{$MSSQLINST}:Databases(_Total)\Log File(s) Size (KB)] 3600 15d 90d Zabbix агент (активный) ★MSSQL★ Общие Активировано
Общие количество Соединений в базы данных perf_counter_en[\{$MSSQLINST}:General Statistics\User Connections] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Блокировка ожидание (SEG) perf_counter_en[\{$MSSQLINST}:Locks(_Total)\Lock Waits/sec] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
Ожидающие предоставления памяти perf_counter_en[\{$MSSQLINST}:Memory Manager\Memory Grants Pending] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Память Активировано
Кэш-памяти SQL perf_counter_en[\{$MSSQLINST}:Memory Manager\SQL Cache Memory (KB)] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Память Активировано
Зарезервированная Память perf_counter_en[\{$MSSQLINST}:Memory Manager\Target Server Memory (KB)] 3600 7d 30d Zabbix агент (активный) ★MSSQL★ Память Активировано
Ошибки (SEG) perf_counter_en[\{$MSSQLINST}:SQL Errors(_Total)\Errors/sec] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
SQL Компиляции (SEG) perf_counter_en[\{$MSSQLINST}:SQL Statistics\SQL Compilations/sec] 300 7d 30d Zabbix агент (активный) ★MSSQL★ Статистика Активировано
SQL Служба интеграции Server 10.0 Триггеры 1 service.info[MsDtsServer100] 300 7d 30d Zabbix агент (активный) ★Сервисы★ Активировано
SQL Сервер Агент {$MSSQLAGENT} Триггеры 1 service.info[{$MSSQLAGENT}] 300 7d 30d Zabbix агент (активный) ★Сервисы★ Активировано
SQL Сервер {$MSSQLSERVER} Триггеры 1 service.info[{$MSSQLSERVER}] 300 7d 30d Zabbix агент (активный) ★Сервисы★ Активировано
Триггеры 4
Внимание Предупреждение SQL Сервер {$MSSQLSERVER} ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:service.info[{$MSSQLSERVER}].count(#3,0,gt)}=3 Активировано
Внимание Предупреждение SQL Сервер Агент {$MSSQLAGENT} ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:service.info[{$MSSQLAGENT}].count(#3,0,gt)}=3 Активировано
Внимание Предупреждение SQL Интеграции Сервер Службы 10.0 ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:service.info[MsDtsServer100].count(#3,0,gt)}=3 Активировано
Внимание Предупреждение MSSQL Порт ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:net.tcp.port[,{$MSSQLPORTA}].last(0)}=0 Активировано
Графики 3
★MSSQL★ Статистика 900 200 Нормальный
★MSSQL★ Размер Общей Базы данных и Журналов 900 200 Нормальный
★MSSQL★ Использование Памяти 900 200 Нормальный
Правила обнаружения 2
★Обнаружение★ MSSQL Баз Данных Прототипы элементов данных 4 Прототипы триггеров 1 Прототипы графиков 3 Прототипы узлов сети discovery.mssql.databases 3600 Zabbix агент (активный) Активировано
★Обнаружение★ Работающего MSSQL Прототипы элементов данных 1 Прототипы триггеров 4 Прототипы графиков Прототипы узлов сети discovery.mssql.jobs 3600 Zabbix агент (активный) Активировано
Прототипы элементов данных 4
{#MSSQLDBNAME} Кол-во Подключений discovery.mssql.dados[CONN,{#MSSQLDBNAME}] 600 7d 30d Zabbix агент (активный) Да
{#MSSQLDBNAME} Статус discovery.mssql.dados[STATUS,{#MSSQLDBNAME}] 600 7d 30d Zabbix агент (активный) Да
{#MSSQLDBNAME} Размер базы данных perf_counter_en[\{$MSSQLINST}:Databases({#MSSQLDBNAME})\Data File(s) Size (KB)] 3600 15d 90d Zabbix агент (активный) Да
{#MSSQLDBNAME} Размер Журнала perf_counter_en[\{$MSSQLINST}:Databases({#MSSQLDBNAME})\Log File(s) Size (KB)] 3600 15d 90d Zabbix агент (активный) Да
Прототипы триггеров 1
Высокая {#MSSQLDBNAME} Статус ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:discovery.mssql.dados[STATUS,{#MSSQLDBNAME}].last(0)}>0 Да
Прототипы графиков 3
★MSSQL★ Статус {#MSSQLDBNAME} 900 200 Нормальный
★MSSQL★ Размер базы данных и Журнала {#MSSQLDBNAME} 900 200 Нормальный
★MSSQL★ Количество Соединений {#MSSQLDBNAME} 900 200 Нормальный
Прототипы элементов данных 1
Работа {#MSSQLJOBNAME} Статус discovery.mssql.dados[JOBSTATUS,{#MSSQLJOBNAME}] 3600 15d 30d Zabbix агент (активный) ★MSSQL★ Статус работы Да
Прототипы триггеров 4
Высокая Работа {#MSSQLJOBNAME} ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:discovery.mssql.dados[JOBSTATUS,{#MSSQLJOBNAME}].last(0)}=0 Да
Информационная Работа {#MSSQLJOBNAME} ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:discovery.mssql.dados[JOBSTATUS,{#MSSQLJOBNAME}].last(0)}=2 Да
Внимание Предупреждение Работа {#MSSQLJOBNAME} ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:discovery.mssql.dados[JOBSTATUS,{#MSSQLJOBNAME}].last(0)}=3 Да
Средняя Работа {#MSSQLJOBNAME} ({ITEM.LASTVALUE}) {Template - Windows LLD MSSQL - RUS:discovery.mssql.dados[JOBSTATUS,{#MSSQLJOBNAME}].last(0)}=5 Да