Иногда требуется следить за валидностью версии файла. Это может быть какой-то файл конфигурации или просто документ. В стандартных шаблонах операционной системы Linux есть некоторый подобный механизм, который, к примеру, определяет факт изменения файла /etc/password.
Вот что-то подобное сделаем и в домене Windows для сетевых шар.
Настройка агента
У нас будет сервер, на котором будет выполняться PowerShell скрипт, который будет ходить по сетевым папкам и смотреть, не изменился ли нужный нам файлик. На этом сервере настроим пользовательскую переменную, которую будем мониторить сервером Zabbix. У меня Zabbix 5.
Для начала напишем скрипт C:\zabbix\scripts\get_hash.ps1. Содержимое скрипта не просто простое, а очень простое:
Get-FileHash $args[0] -Algorithm $args[1] | Select-Object Hash | Where-Object {!($_.psiscontainer)} | foreach {$_.Hash}
В современных серверных ОС вам придётся подписать скрипт своим сертификатом.
Подписать PowerShell скрипт с помощью сертификата
Создаём файл конфигурации для пользовательской переменной userparameter_gethash.conf:
UserParameter=gethash.hash[*],powershell -NoProfile -ExecutionPolicy Bypass -File "C:\zabbix\scripts\get_hash.ps1" "$1" "$2"
Ну и запускаем заббикс агент от имени доменного пользователя, которому разрешён доступ к проверяемым файлам. Он же локальный администратор текущего сервера, чтобы ещё и сам сервер мониторить.
Настройка сервера
Напишем шаблон для мониторинга. Он у меня уже готов.
В шаблоне один элемент данных, у которого в препроцессинге можно настроить список файлов, которые нужно мониторить. Формат JSON:
var FilesList = {
"data": [
{
"{#NAME}": "SERVER 1 share TXT",
"{#FILEPATH}": "//server1.domain.local/public/test.txt",
"{#HASHALGORYTHM}": "MD5",
"{#VALIDHASH}": "198F3BCD41211373CADE66535627B4C0"
},
{
"{#NAME}": "SERVER 2 share DOCX",
"{#FILEPATH}": "//server2.domain.local/public/data.docx",
"{#HASHALGORYTHM}": "MD5",
"{#VALIDHASH}": "C004111F4994F88204FF2192C019F991"
}
] };
return JSON.stringify(FilesList)
Здесь:
- NAME — название файла
- FILEPATH — путь к файлу, локальный или сетевой
- HASHALGORYTHM — алгоритм хэширования (SHA1, SHA256, SHA384, SHA512, MD5)
- VALIDHASH — правильный хэш файла, собственно, если хэш будет другой, значит, файл кто-то изменил
Вот вам в помощь инструмент для определения хэша файла:
Windows 10 — вычислить хэш-сумму файла в командной строке
Хэш-суммы в контекстном меню Windows (MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512)
Дополнительно можно настроить макросы:
- {$GETHASH_DISCOVERY_PERIOD} — как часто на низком уровне искать новые файлы, которые вы добавили в препроцессинге, по умолчанию 10 минут
- {$GETHASH_HISTORY_PERIOD} — срок хранения истории, по умолчанию пол года
- {$GETHASH_NODATA_PERIOD} — когда поднимать панику, если файла нет или хэш не определяется, по умолчанию 30 минут
- {$GETHASH_REQUEST_PERIOD} — как часто мониторить хэш, по умолчанию 3 минуты
Триггер проверяет последние два значения хэша, если они оба отличаются, то срабатывает. Т.е. по умолчанию через 6 минут.
Привязываем шаблон к нашему хосту с агентом и радуемся ночным звонкам...