Zabbix: мониторим время изменения файла/каталога

система мониторинга zabbixИногда возникает задача осуществлять мониторинг времени изменения какого-то файла или каталога. Например, если есть лог-файл, в который что-то постоянно пишется, или каталог, в который валится почта, результаты работы скриптов и тому подобное. Мы на работе, например, отслеживаем приход новостей от разных агентств.

В любом случае,  нам может захотеться отслеживать и получать оповещения про любой случай прекращения изменений фала/каталога. Сделать это средствами zabbix довольно легко:

  • создаём айтем vfs.file.time[/path/to/our_file]
  • создаём триггер с выражением {flycat.info:vfs.file.time[/path/to/our_file]. fuzzytime(600) }=0 (сигнализировать, если время модификации файла больше 10 минут)
  • наслаждаемся результатом: в случае, если время модификации нашего файла или каталога становится больше 600 секунд, нам приходит оповещение

Хороший способ? Хороший! Но не очень :-) Какие есть у него недостатки:

  • Время модификации файла считается на клиентской машине исходя из показаний её часов, а текущее время для fuzzytime берётся с zabbix-сервера. Нужно ли объяснять, что произойдёт, если часы на этих машинах "разбегутся"?
  • Вычисление разницы времени происходит на zabbix-сервере. Естественно, что это его, хоть и незначительно, но нагружает. А если таких параметров у вас много, нагрузка может стать довольно значительной
  • Ну и ещё один фактор: низкая наглядность. Посмотрите на график айтема. По нему невозможно определить, превысило ли ожидаемое время модификации предельный срок.

zabbix график айтема

Давайте теперь сделаем тоже самое, но другим способом. Пишем (на клиенте) такой скрипт под названием modtime:

#!/bin/bash
s=`ls -d -l --full-time $1|awk '{print $6" "$7}'`
a=`date +%s`
b=`date --date="$s" +%s`
echo $(( ($a - $b)/60 ))

и кладём его в каталог zabbix-плагинов. В случае, если вы не знаете, где этот каталог, можно положить его куда заблагорассудится (не забывая, конечно, о разрешениях для zabbix), но тогда нужно будет прописать в строке конфигурации zabbix-агента следующую строчку:

UserParameter=modtime[*],/opt/zabbix/plugins/modtime $1

Теперь создаём следующий айтем: modtime[/path/to/our_file] и триггер с выражением: {flycat.info:modtime[/path/to/our_file].last(0) }>10. Обратите внимание, что в этом варианте скрипта идёт учёт времени не в секундах, а в минутах.

Что мы теперь видим на графике?

zabbix график айтема

По-моему, всё стало гораздо более наглядным и понятным. Пожалуй, единственный недостаток второго способа -- работает он только под unix / linux, где есть bash. На Windows такие трюки не пройдут.