Zabbix 3.0.4: Агент Windows с TLS, LDD дисков, простой пример S.M.A.R.T. и только командная строка

Будем считать, что сервер Zabbix 3.0.4 у нас установлен. Для скриптов установки агента будем использовать, по хардкору, только родную командную строку Windows, без питонов, перлов и т.п., т.е. без дополнительных инсталляций в систему агента. Шифрование настроим с помощью PSK.
Внешний IP Zabbix сервера пусть будет — 30.0.1.1
Локальный IP Zabbix сервера — 10.3.10.1
Адрес тестового узла — 30.0.1.3
По форвардинг портов тут говориться не будет. Узел в примере будет слушать 10050, сервер — 10051.

Постановка задачи:

1) Упростить установку агентов на системы Windows
2) Настроить шифрование между агентом и сервером.
3) Настроить обнаружение дисков (имена, модели, серийные номера, типы) c помощью утилиты smartmontools, контроль S.M. A.R.T.
4) Создать масштабируемый шаблон сценария развёртывания.
5) Настроить оповещение.
6) Использовать только командную строку.

Агенты Windows почему-то ещё не имеют поддержку TLS, но есть скомпилированные версии, которые можно скачать отсюда. Обсуждение.

Распаковываем. Нам понадобится только каталог bin. Дефолтный конфиг нам не понадобится.

Создаём каталог zabbix и копируем в него каталог bin из распакованного агента. Далее создаём в каталоге zabbix подкаталоги conf, disks, logs, psk, scripts, smartmontools. Сразу примем решение что размещать папку zabbix мы будем в корне тома C:\

33363841a56d44feabae3ea21294504c.png

conf — тут будет файл конфига
disks — сюда будет генерироваться информация о дисках в JSON
logs — логи
pks — тут будет лежать файл Z_agent.psk содержащий pre-shared ключ
scripts — скрипты
smartmontools — сюда помещаем одноимённую программу S.M. A.R.T.

Сразу подготовим PSK ключи и файл данных. Создаём на сервере файл pskgen4ik:
#!/bin/bash
echo -n  "Сколько ключей нужно? : "
read LIMIT
a=1
echo \# > /home/appliance/agent_psk
while [ "$a" -le $LIMIT ]
do
  openssl rand -hex 64 >> /home/appliance/agent_psk
  let "a++"
done
less /home/appliance/agent_psk

Сохраняем, делаем исполняемым (chmod +x), запускаем, и копируем результат в файл данных, я приведу пример Excel для наглядности. Можно использовать и базу данных. Что-то типа этого:

77a2f582883c4889967cdac743e08724.png

Поле Host name мы заполним после создания конфига агента (если конечно же нет уже составленного списка). Придумываем и дописываем уникальные идентификаторы PSK ID. Сохраняем файл данных, делаем бэкап, строго ограничиваем к нему доступ и удаляем файл «agent_psk». Всё у нас есть файл данных с ключами и идентификаторами, которые будем использовать.

S.M. A.R.T.
Для получения информации о дисках и их S.M. A.R.T используем утилиту Smartmontools. Я беру последнюю версию 6.5. В этой версии нормально определяются паспорта USB, и новые манифесты для 10ки. Обо всех исправлениях в релизе.

Скачиваем и кидаем в папку zabbix\smartmontools

Знакомство с утилитой.


Смотрим список подключенных дисков:
c:\>"Program Files"\smartmontools\bin\smartctl.exe --scan 

f99922091f70431db352f938d63b5171.png

Ключ –d указывает на тип диска.

Заинтересуемся диском /dev/sda. Пока он мало о чём говорит кроме того, что он ATA-типа и скорей всего загрузочный.

Смотрим информацию о нём:

c:\>"Program Files"\smartmontools\bin\smartctl.exe -i /dev/sda -d ata 

318b741dee974dcbb0046982dee37804.png

Уже интересней. Как видно СМАРТ отключён. Включаем его:
c:\>"Program Files\smartmontools\bin\smartctl.exe" --smart=on --offlineauto=on --saveauto=on /dev/sda

Смотрим таблицу атрибутов S.M. A.R.T.
c:\>"Program Files"\smartmontools\bin\smartctl.exe -A /dev/sda -d ata

90fa72bb031a4ebc9e509bd4a5c2bf71.png

Таблицу смарт у RAID посмотреть не получится, но статус health получить сможем.

Смотрим SMART Health:

c:\>"Program Files"\smartmontools\bin\smartctl.exe -H /dev/sda -d ata

5be5904ea53548eda587284d5f611110.png

Теперь то же самое нужно сделать для остальных 1000 дисков) Создавать для каждого шаблоны уже не может быть и речи, более того мне, например, ещё нужно получать модель и серийник каждого диска в отчёте. На помощь приходит Zabbix LDD.

Поскольку Zabbix имеет возможность обработки данных по протоколу JSON, предоставленной его API, мы будем генерить нужную информацию из smartmontools в JSON формат и пассивно передавать на сервер.

Начинаем создавать сценарии. Для начала придумаем макросы обнаружения и определимся с данными:

Макрос {#DISKPORT} — имя диска в системе (/dev/sda, /dev/sdb и т.д.),
Макрос {#DISKTYPE} — тип диска (ata, scsi, sat, csmi и т.д.),
Макрос {#DISKMODEL} — модель диска,
Макрос {#DISKSN} — серийный номер.

Создаём в каталоге zabbix\scripts файл DiskInfoGenerationJSON.cmd следующего содержания:
@echo off
echo @echo off > c:\zabbix\disks\disks.cmd
echo echo {"data": >> c:\zabbix\disks\disks.cmd
echo echo    [ >> c:\zabbix\disks\disks.cmd
for /F "tokens=1,3" %%a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe --scan') ^
do (for %%s in ("Device Model" "Product") ^
do (for /F "tokens=2*" %%c in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -i %%a -d %%b ^| find %%s ') ^
do (for %%i in ("Serial Number") do (for /F "tokens=3*" %%k in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -i %%a -d %%b ^| find %%i ') ^
do echo echo      {"{#DISKPORT}":"%%a","{#DISKTYPE}":"%%b","{#DISKMODEL}":"%%d","{#DISKSN}":"%%k"},>> c:\zabbix\disks\disks.cmd))))
echo echo      {"{#SMARTV}":"Smartctl 6.5"}>> c:\zabbix\disks\disks.cmd
echo echo    ] >> c:\zabbix\disks\disks.cmd
echo echo } >> c:\zabbix\disks\disks.cmd

Сохраняем DiskInfoGenerationJSON.cmd

Мне не удалось упрощённо решить проблему последней запятой с помощью cmd (да я и не начинал её решать, ибо это бред сумасшедшего), в строке…

{"{#DISKPORT}":"%%a","{#DISKTYPE}":"%%b","{#DISKMODEL}":"%%d","{#DISKSN}":"%%k"},

… которая нарушает синтаксис JSON. Поэтому я просто добавил строчку {»{#SMARTV}»: «Smartctl 6.5»}, которая закрывает тело без запятой.

При запуске файла DiskInfoGenerationJSON.cmd. В итоге мы должны получить файл c:\zabbix\disks\disks.cmd со следующим содержимым:

2f773ba656cb4390af53bb796cb6f2b3.png

Создаём в каталоге zabbix\scripts файл GetSmartAllDisk.cmd следующего содерания:

rem включаем СМАРТ у всех дисков которые это позволят:
for /F "tokens=1" %%a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe --scan') ^
do "C:\Program Files\smartmontools\bin\smartctl.exe" --smart=on --offlineauto=on --saveauto=on %%a

Сохраняем GetSmartAllDisk.cmdГенерации конфига
Генерация будет разбита на две части: настройки подключения и пользовательские параметры.

Создание конфига


Анализируем будущий конфигурационный файл агента:
LogFile=C:\zabbix\logs\logs.log  	# журнал логов
LogFileSize=100 			# ограничение размера файла логов
Server=30.0.1.1			# сервер пассивных проверок
ServerActive=30.0.1.1		# сервер активных проверок
StartAgents=3 			# кол-во пре-форков
Timeout=30 				# не более 30 сек на обработку
Hostname=				# уникальное имя хоста

# TLS
TLSConnect=psk			# тип исходящих подключений (активная проверка)	
TLSAccept=psk			# тип входящих подключений (пассивная проверка)	
TLSPSKFile=C:\zabbix\psk\Z_agent.psk	# путь к файлу с pre-shared ключом
TLSPSKIdentity=			# уникальный идентификатор

Уникальными для каждого хоста тут являются поля Hostname= и TLSPSKIdentity= в конфигурационном файле. А также pre-shared ключ в файле zabbix\psk\Z_agent.psk. Следовательно, определим эти значения в переменные.

В каталоге zabbix\scripts создаём файл AgentConfigGeneration.cmd:

@echo off
chcp 866 > nul
set /P CLIENT="Enter Organization name: "
set /P PSKID=" Enter PSKIdentity: "
set /P PSKkey="Enter PSKkey: "

rem Генерация конфига
@echo # zabbix_agent 3.0.1> C:\zabbix\conf\zabbix_agentd.conf
@echo. >>C:\zabbix\conf\zabbix_agentd.conf
@echo %PSKkey%>>C:\zabbix\psk\Z_agent.psk
@echo LogFile=C:\zabbix\logs\logs.log >> C:\zabbix\conf\zabbix_agentd.conf
@echo LogFileSize=100 >> C:\zabbix\conf\zabbix_agentd.conf
@echo Server=30.0.1.1 >> C:\zabbix\conf\zabbix_agentd.conf
@echo ServerActive=30.0.1.1 >> C:\zabbix\conf\zabbix_agentd.conf
@echo StartAgents=3 >> C:\zabbix\conf\zabbix_agentd.conf
@echo Timeout=30 >> C:\zabbix\conf\zabbix_agentd.conf
@echo Hostname=%CLIENT%.%COMPUTERNAME%>> C:\zabbix\conf\zabbix_agentd.conf
@echo. >> C:\zabbix\conf\zabbix_agentd.conf

@echo ##### TLS ###########>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSConnect=psk>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSAccept=psk>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSPSKFile=C:\zabbix\psk\Z_agent.psk>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSPSKIdentity=%PSKID%>> C:\zabbix\conf\zabbix_agentd.conf
@echo. >> C:\zabbix\conf\zabbix_agentd.conf

Всё просто. При запуске вводим название организации, например, Organization1 и получаем Hostname в конфиге в виде »Organization1.Имя_хоста». В пределах сети одной организации как правило исключается использование одинаковых имён узлов, поэтому мы будем иметь уникальные имена. Далее вводим PSK ID из ранее составленного файла данных и ключ. Но пока мы ничего не запускаем.

Добавление в конфиг пользовательских параметров


В каталоге zabbix\scripts создаём файл UserParameters.txt, который будет содержать пользовательские параметры (UserParameter=<ключ>, )
##### Обнаружение дисков.
UserParameter=HDD.discovery,for /F "tokens=*" %a in ('C:\zabbix\disks\disks.cmd') do @echo %a

##### S.M.A.R.T.
# RAW_VALUE
UserParameter=HDD.raw[*], for /F "tokens=10" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2 ^| find "$3"') do @echo %a
# VALUE
UserParameter=HDD.value.[*], for /F "tokens=4" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2^| find "$3"') do @echo %a
# WORST
UserParameter=HDD.worst.[*], for /F "tokens=5" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2 ^| find "$3"') do @echo %a
# THRESOLD
UserParameter=HDD.thresh.[*], for /F "tokens=6" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2 ^| find "$3"') do @echo %a
# WHEN_FAILED
UserParameter=HDD.when.failed.[*], for /F "tokens=9" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2 ^| find "$3"') do @echo %a
# HEALTH Status
UserParameter=HDD.health.[*], for /F "tokens=6" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -H $1 -d $2 ^| find "test"') do @echo %a

Сохраняем UserParameters.txt. Мы придумали ключи и циклы для получения данных. И в конец файла AgentConfigGeneration.cmd добавляем следующую строчку:
type C:\zabbix\scripts\UserParameters.txt>> C:\zabbix\conf\zabbix_agentd.conf

Нам ещё нужно открыть порт на узле, если брандмауэр включён. Создаём файл OpenLocalPort.cmd
@echo off

set localportname=10050
set rulename=zabbix
set dirrname=in
set protocolname=TCP
set actionname=allow
netsh advfirewall firewall add rule name=%rulename% dir=%dirrname% action=%actionname% protocol=%protocolname% localport=%localportname%

Итак, сценарии мы написали. Вот что у нас получается:
88f749d08639494997c4d127bbfe1c73.png

Теперь нужно определиться в очерёдности запусков этого добра:

1) Ввод переменных
2) Установка smartmontools в тихом режиме
3) Установка службы Zabbix Agent
4) Генерация конфига с пользовательскими параметрами — AgentConfigGeneration.cmd
5) Генерация списка дисков — DiskInfoGenerationJSON.cmd
6) Включение S.M. A.R.T. — GetSmartAllDisk.cmd.cmd
7) Открыть порт — OpenLocalPort.cmd
8) Запуск службы Zabbix Agent

Создаём в корне каталога zabbix файл INSTALL_AGENT.cmd и объединяем в нём все шаги наших сценариев:

@echo off
chcp 866 > nul
set /P CLIENT="Client NAME: "
set /P PSKID="PSKIdentity: "
set /P PSKkey="Enter PSKkey: "
cls

rem Устанавливаем smartmontools в тихом режиме
C:\zabbix\smartmontools\smartmontools-6.5-1.win32-setup.exe /S

rem Открывает порт 10050 в брандмауэре
set localportname=10050
set rulename=zabbix
set dirrname=in
set protocolname=TCP
set actionname=allow
netsh advfirewall firewall add rule name=%rulename% dir=%dirrname% action=%actionname% protocol=%protocolname% localport=%localportname%
echo "port %localportname% was open on host %hostname%"

rem создание конфига
@echo # zabbix_agent 3.0.1> C:\zabbix\conf\zabbix_agentd.conf
@echo. >>C:\zabbix\conf\zabbix_agentd.conf
@echo %PSKkey%>C:\zabbix\psk\Z_agent.psk
@echo LogFile=C:\zabbix\logs\logs.log >> C:\zabbix\conf\zabbix_agentd.conf
@echo LogFileSize=100 >> C:\zabbix\conf\zabbix_agentd.conf
@echo Server=30.0.1.1 >> C:\zabbix\conf\zabbix_agentd.conf
@echo ServerActive=30.0.1.1 >> C:\zabbix\conf\zabbix_agentd.conf
@echo StartAgents=3 >> C:\zabbix\conf\zabbix_agentd.conf
@echo Timeout=30 >> C:\zabbix\conf\zabbix_agentd.conf
@echo Hostname=%CLIENT%.%COMPUTERNAME%>> C:\zabbix\conf\zabbix_agentd.conf
@echo. >> C:\zabbix\conf\zabbix_agentd.conf
@echo ##### TLS ###########>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSConnect=psk>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSAccept=psk>> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSPSKFile=C:\zabbix\psk\Z_agent.psk >> C:\zabbix\conf\zabbix_agentd.conf
@echo TLSPSKIdentity=%PSKID%> C:\zabbix\conf\zabbix_agentd.conf
@echo. >> C:\zabbix\conf\zabbix_agentd.conf
rem Добавляем пользовательские параметры
type C:\zabbix\scripts\UserParameters.txt>> C:\zabb\conf\zabbix_agentd.conf

rem Создание списка дисков
@echo off
echo @echo off > c:\zabbix\disks\disks.cmd
echo echo {"data": >> c:\zabbix\disks\disks.cmd
echo echo    [ >> c:\zabbix\disks\disks.cmd
for /F "tokens=1,3" %%a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe --scan') ^
do (for %%s in ("Device Model" "Product") ^
do (for /F "tokens=2*" %%c in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -i %%a -d %%b ^| find %%s ') ^
do (for %%i in ("Serial Number") do (for /F "tokens=3*" %%k in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -i %%a -d %%b ^| find %%i ') ^
do echo echo      {"{#DISKPORT}":"%%a","{#DISKTYPE}":"%%b","{#DISKMODEL}":"%%d","{#DISKSN}":"%%k"},>> c:\zabbix\disks\disks.cmd))))
echo echo      {"{#SMARTV}":"Smartctl 6.5"}>> c:\zabbix\disks\disks.cmd
echo echo    ] >> c:\zabbix\disks\disks.cmd
echo echo } >> c:\zabbix\disks\disks.cmd

rem Включение смарт на всех дисках
for /F "tokens=1" %%a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe --scan') ^
do "C:\Program Files\smartmontools\bin\smartctl.exe" --smart=on --offlineauto=on --saveauto=on %%a

rem Установка службы Zabbix Agent
if DEFINED ProgramFiles(x86) (goto :x64) else (goto :x86)
:x64
C:\zabbix\bin\win64\zabbix_agentd.exe -i -c C:\zabbix\conf\zabbix_agentd.conf
goto :NEXT
:x86
C:\zabbix\bin\win32\zabbix_agentd.exe -i -c C:\zabbix\conf\zabbix_agentd.conf
goto :NEXT

:NEXT
rem Запуск службы Zabbix Agent
net start "Zabbix Agent"
echo.
echo OK!

@echo ------------------------------------
@echo Hostname: %CLIENT%.%COMPUTERNAME%
@echo ------------------------------------
@echo.
Pause

Упаковываем каталог zabbix в SFX-архив и шифруем паролем при необходимостиПример.
Имеем сервер в организации «Организация 1». Помещаем zabbix.exe на сервер и распаковываем в корень тома C:\

Запускаем INSTALL_AGENT.cmd от имени Администратора. Вводим без пробелов название Организации, копируем из файла данных идентификатор PSK и ключ:
8018a4b0d95747ba92b4bb18c6aeaea9.png

Enter:
b5a7edccda044fe2b379708444bd78ca.png

Проверяем файл логов C:\zabbix\logs\logs.log:
f359d20a80c04842a40f815249af2356.png

Копируем Hostname «Organization1.SUNSET» в файл данных:
b3728190f90a42eeba1b873e062944b7.png

И так далее с каждым хостом. После заполнения файла заходим в кабинет Zabbix — 10.3.10.1/zabbix — и добавляем из него группы, узлы. В настройках шифрования узла отмечаем PSK и ждём онлайна.
289e4ae58538410e99f98fec48a32338.png

2a48be1e3fd843c994773686eac365cd.png

Ждём несколько секунд:
3ca03c5675d14ef6a13063c394ccf2ba.png

О шифровании и об ограничениях

LDD
Русифицирую кабинет для разнообразия)

Создаём Шаблон S.M. A.R.T. и группы элементов данных. Для примера я создал следующие группы по атрибутам смарта:

6590cd8f85d44c45ad346904daf7d569.png

Выбираем «Правила обнаружения» и создаём правило:
abbaba9c132c44f3aa92b1040e4f1306.png

В поле «Ключ» указываем тот самый придуманный нами пользовательский параметр из файла C:\zabbix\scripts\UserParameters.txt
UserParameter=HDD.discovery,for /F "tokens=*" %a in ('C:\zabbix\disks\disks.cmd') do @echo %a

А во вкладке «Фильтры» пишем наши макросы из созданного файла c:\zabbix\disks\disks.cmd и жмём «Добавить»
6e862097c09447d9a9d1aea5351242e3.png

c266d53f3e954d0f8805af9c475b2362.png

Создадим «Прототипы элементов данных»


Я создам для примера два прототипа атрибута Spin_Retry_Count и добавлю в группу элементов данных Pre-fail: Spin_Retry_Count. Первый будет получать VALUE значение, второй THRESHOLD из таблицы атрибутов смарт для каждого обнаруженного диска
Обратимся ещё раз к файлу C:\zabbix\scripts\UserParameters.txt (ну или уже созданному конфигу). И посмотрим какие циклы у нас вытаскивают нужные нам данные:
UserParameter=HDD.value.[*], for /F "tokens=4" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2^| find "$3"') do @echo %a
UserParameter=HDD.thresh.[*], for /F "tokens=6" %a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -A $1 -d $2 ^| find "$3"') do @echo %a

Как видно из скрипта для ключей HDD.value.[*] и HDD.thresh.[*] нам нужно на вход три аргумента $1 — диск (/dev/*), $2 — тип диска (ata, sat и т.д.), $3 — атрибут (в нашем случае Spin_Retry_Count). В итоге ключ получит такой формат HDD.value.[$1,$2,$3]. Например для нашего диска /dev/sda типа «ata», будет так HDD.value.[/dev/sda, ata, Spin_Retry_Count]. Но поскольку мы создали макросы для каждого обнаруженного диска, формат ключа в прототипе элемента данных будет таков HDD.value.[{#DISKPORT},{#DISKTYPE}, Spin_Retry_Count]. Этот ключ будет перебирать каждый диск по данному атрибуту.

Кстати, можем проверить ключ с сервера, c помощью zabbix_get

root@zabbix:~# zabbix_get -s 30.0.1.3 -k HDD.value.[/dev/sda,ata,Spin_Retry_Count] --tls-connect psk --tls-psk-identity "ZP10001AA" --tls-psk-file /root/Organization1.SUNSET.psk

74f0e285de8f4423b1d9a4f254ac811e.png

И также для Threshold:
5b3fdec0388e4028b1c345232d588b52.png

Итак, создаём наш прототип данных для VALUE и используем пассивную проверку:
b1100a3691cd481cab8de6f08f0db1bb.png

Аналогично создаём прототип для Threshold. В итоге имеем:

9290748a6dd040f29c79e26d9883c7f7.png

Создаём «Прототип триггера». Даём имя, например, для наглядности:

S.M. A.R.T.: ВНИМАНИЕ! Диск {#DISKMODEL} ({#DISKPORT} — {#DISKTYPE}). Ожидается сбой и\или полный отказ диска в ближайшие 24 часа! Значение атрибута хуже критического порога

В «Поле выражение» пишем условие:

({S.M.A.R.T.:HDD.value.[{#DISKPORT},{#DISKTYPE},Spin_Retry_Count].last()}-{S.M.A.R.T.:HDD.thresh.[{#DISKPORT},{#DISKTYPE},Spin_Retry_Count].last()})<0

Смысл в том, что если Value меньше Threshold — нужно выдать проблему. Last () — показывает последнее полученное значение (подробней о функициях). В поле «Описание» пишем, например:
Диск: {#DISKPORT}
Тип дика: {#DISKTYPE}
Модель: {#DISKMODEL}
Серийный номер: {#DISKSN}

Объяснение:

Threshold — это порог: если Value больше Threshold — атрибут в порядке; если меньше либо равен — с атрибутом проблемы. Именно по такому критерию утилиты, читающие S.M.A.R.T., выдают отчёт о состоянии диска либо отдельного атрибута вроде «Good» или «Bad».

Если VALUE стало меньше THRESH в случае Pre-fail атрибута - существует большая вероятность, что диск вылетит в ближайшие 24 часа.

 / Spin_Retry_Count /
Число повторных попыток раскрутки дисков до рабочей скорости в случае, если первая попытка была неудачной. Если значение атрибута увеличивается, то велика вероятность неполадок с механической частью.

Важность ставим «Чрезвычайная»
c523825e38bd4ac38da888928c245c25.png

Будем считать, что оповещение у нас настроено по EMAIL. Если нет, то сюда.

Идём в «Настройка» > «Действия». Создаём форму репорта. Жмём «Создать действие»

Имя: Отчёты о проблемах
Тема по умолчанию: ПРОБЛЕМА! [ {HOST.NAME} ] — {TRIGGER.NAME} ({EVENT.ID})
Сообщение по умолчанию:

Обнаружена проблема!
Категория: {TRIGGER.SEVERITY}

    Узел: {HOST.NAME}
    Описание узла: {HOST.DESCRIPTION}
    Дата: {EVENT.DATE}
    Время: {EVENT.TIME}

{TRIGGER.NAME}

Описание события:
{TRIGGER.DESCRIPTION}

Проблема получена на основе сл. данных:
1. {ITEM.NAME1} = {ITEM.VALUE1}. Ключ: {ITEM.KEY1}
2. {ITEM.NAME2} = {ITEM.VALUE2}. Ключ: {ITEM.KEY2}
{TRIGGER.EXPRESSION}

Event ID: {EVENT.ID}

Заполняем сообщение о восстановлении:
Тема восстановления: ОК. [ {HOST.NAME} ]
Сообщение о восстановлении:
Проблема события "{EVENT.ID}" сейчас устранена.

    Узел: {HOST.NAME}
    Описание узла: {HOST.DESCRIPTION}
    Дата и время события: {EVENT.DATE} {EVENT.TIME}
    Дата и время восстановления: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}

Ранее была проблема: {TRIGGER.NAME}
Категория: {TRIGGER.SEVERITY}
Нынешний статус: ИСПРАВЛЕНО

Данные:
1. {ITEM.NAME1} = {ITEM.VALUE1}. Ключ: {ITEM.KEY1}
2. {ITEM.NAME2} = {ITEM.VALUE2}. Ключ: {ITEM.KEY2}

URL: {TRIGGER.URL}
Event ID: {EVENT.ID}

Включим «Активировать»

Переходим на вкладку «Условия» и заполняем как показано ниже:

14384b5029ae46b18edca7f8b1abba34.png

Я указал только «Чрезвычайные» проблемы для примера. Условия можно задавать какие душе угодно.

Переходим во вкладку «Операции» и добавляем либо группу нашего пользователя, либо указываем только себя. Тут в принципе комментировать нечего.

3394868f41de4134a5701372941c29bb.png

Теперь я симитирую сбой. У меня например вcе атрибуты впорядке, поэтому я изменю значение в триггере и поставлю «больше нуля»
({S.M.A.R.T.:HDD.value.[{#DISKPORT},{#DISKTYPE},Spin_Retry_Count].last()}-{S.M.A.R.T.:HDD.thresh.[{#DISKPORT},{#DISKTYPE},Spin_Retry_Count].last()})>0

Арифметику думаю объяснять не нужно.

Ждём некоторое время и получаем проблему:

4dc9fd5e106a4b35a5ab91296964566d.png

И спустя пару секунд приходит сообщение на почту:
f448ce0681924f9d8a9391a40d2b5eed.png

После восстановления получим следующее сообщение:
7fe7efdba87d4604a161c10fd26131cb.png

Если есть ошибки, или что-то можно делать проще, пожалуйста сообщите! Писал тему пару часов со скринами, вроде дважды проверил на удачно.

Комментарии (0)

© Habrahabr.ru