Zabbix vfs file time windows

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

В любом случае,  нам может захотеться отслеживать и получать оповещения про любой случай прекращения изменений фала/каталога. Сделать это средствами 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-сервере. Естественно, что это его, хоть и незначительно, но нагружает. А если таких параметров у вас много, нагрузка может стать довольно значительной
  • Ну и ещё один фактор: низкая наглядность. Посмотрите на график айтема. По нему невозможно определить, превысило ли ожидаемое время модификации предельный срок.

Давайте теперь сделаем тоже самое, но другим способом. Пишем (на клиенте) такой скрипт под названием 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. Обратите внимание, что в этом варианте скрипта идёт учёт времени не в секундах, а в минутах.

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

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

Основано на стандартных ключах zabbix.
Оф. Поддерживаемые ключи элементов данных

Некоторые из ключей, что можно мониторить из коробки.
vfs.file.cksum[файл] — Контрольная сумма файла, вычисленная по алгоритму используемом в UNIX cksum. Целое число.
vfs.file.contents[файл,<кодировка>] — Получение содержимого файла. Текст.
vfs.file.exists[файл] — Проверка существования файла. 0 — файл не найден;1 — файл найден.
vfs.file.md5sum[файл] — MD5 контрольная сумма файла. Строка (MD5 хэш файла).
vfs.file.regexp[файл,регулярное выражение,<кодировка>,<начальная строка>,<конечная строка>,<вывод>] — Поиск строки в файле. Строка содержащая совпадающую подстроку или то, что определено в дополнительном параметре вывод.
vfs.file.regmatch[файл,регулярное выражение,<кодировка>,<начальная строка>,<конечная строка>] — Поиск строки в файле. 0 — совпадение не найдено; 1 — найдено
vfs.file.size[файл] — Размер файла (в байтах). Целое число.
vfs.file.time[файл,<режим>] — Информация о времени файла. Целое число (Unix timestamp).

Некоторые из стандартных ключей zabbix для работы с файлами

Файл Лог
log[файл,<регулярное выражение>,<кодировка>,<макс. кол-во строк>,<режим>,<вывод>,<максзадержка>] — Мониторинг файлов журналов (логов). Журнал (лог).
log.count[файл,<регулярное выражение>,<кодировка>,<макс. кол-во строк>,<режим>,<максзадержка>] — Подсчёт количества совпадающих строк в мониторинге файла журнала (логов). Целое число.
logrt[файл_regexp,<регулярное выражение>,<кодировка>,<макс. кол-во строк>,<режим>,<вывод>,<максзадержка>,<опции>] — Мониторинг файлов журналов (логов) с поддержкой ротации логов. Журнал (лог).
logrt.count[файл_regexp,<регулярное выражение>,<кодировка>,<макс. кол-во строк>,<режим>,<максзадержка>,<опции>] — Подсчёт количества совпадающих строк в мониторинге файла журнала (логов) с поддержкой ротации логов. Целое число.

СКАЧАТЬ

О Веб проверке в данном шаблоне Тут

Если при проверке Элемент данных выдает нет доступа к директории permission denied или путь не найден NOT_FOUND

Тут несколько вариантов:
1. Проверить путь и наличие файла возможно экранирование пути и \

2. Не хватает прав на папки (путь) на сам файл.
Решение: Выдать необходимые права или Сменить пользователя от которого работает Заббикс Агент
Windows в Службе заббикс агента
в Linux пример Запуск Zabbix Agent от Root

3. В конфигурации Заббикс Агента начиная с Zabbix 5.0 system.run
Удаленные команды по-прежнему отключены по умолчанию, но в новых конфигурационных файлах, которые выражаются с помощью нового параметра DenyKey (DenyKey=system.run[*]) черный список, разрешить все AllowKey=system.run[*].
Удаленные команды можно включить, удалив (или закомментировав) ключ DenyKey=system.run[*]
Либо настроить разрешения для определённых путей
Подробнее в оф.
Ранее этот параметр был EnableRemoteCommands = 1, иначе агент не сможет принимать команды.
Параметр EnableRemoteCommands теперь устарел.
Более подробно Поддержка черных и белых списков для метрик на стороне агента

О скриптах и проверке написанной ранее ее будем переделывать в шаблон
Создание удаление копий на неделю create_backup.cmd и backup_delete.vbs
Проверка через check_bk_fs.bat или zabbix_bk.vbs
делаем проверку виде шаблона, без доп скриптов с отправкой через zabbix_sender trapper.

Делаем Шаблон на основе некоторых ключей указанных выше.
Данный шаблон облегчает настройку мониторинга файла на однотипных серверах, на частично с разными путями и названием файла. Не нужно везде вручную создавать элементы данных триггеры и группы данных, а просто прописать пару макросов в узле.
Шаблон будет для определенных серверов, у которых путь до файла одинаковый но имя файла отличается.
Например : D:\копия\базы-данных\export_bd_r304.bak у другова D:\копия\базы-данных\export_bd_r307.bak и так далее.

Будем использовать 2 макроса:
{$PUTFSESRN} — путь до файла по умолчанию в шаблоне задан D:\копия\базы-данных если он отличается на каких то узлах прописываем в узле другой путь. Так же путь может быть по сети \\192.168.507.38\базы-данных\export_bd_r307.bak.
Учитывать доступ учетной записи от которой работает заббикс агент!
{$NUM.RAYON} — номер файла соответствии с подразделением. например 307 задаем каждый на своем узле.
Получаем следующий вид пути:
{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak
Данный файл выгружается каждый день Агентом SQL (файл должен быть, дата изменения не более суток то что файл новый, и размер файла должен быть в пропорциях что означает что с бд все хорошо. Если файл стал увеличивается в разы с базой что то не то. далее файл будет упакован в архив и скопирован с текущей датой на другой сервер с бэкапом на 1 неделю, там так же проверяется что архив не битый архивация прошла успешно размер отличается от предыдущего не более чем на * %.

Шаблон Веб проверки и проверка файла

ЭЛЕМЕНТЫ ДАННЫХ

Проверка файлов Элементы данных zabbix

Имя: Время изменения свойств файла export_bd_r{$NUM.RAYON}.bak
Тип: Zabbix Агент
Ключ: vfs.file.time[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»,change]
Тип информации: Числовой (целое положительное)
Единица измерения: unixtime
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание: в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС

Время изменения свойств файла

Имя: Время изменения файла export_bd_r{$NUM.RAYON}.bak
Тип: Zabbix Агент
Ключ: vfs.file.time[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»,modify]
Тип информации: Числовой (целое положительное)
Единица измерения: unixtime
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание: в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС

Время изменения файла

Дата время в ответе приходит в формате unixtime
можно преобразовать в дату онлайн из секунд в дату или онлайн из секунд в дату2

Имя: Наличие файла export_bd_r{$NUM.RAYON}.bak
Тип: Zabbix Агент
Ключ: vfs.file.exists[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»]
Тип информации: Числовой (целое положительное)
Единица измерения:
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание:
1 — файл найден
0 — файл не найден

Наличие файла

Имя: Размер файла export_bd_r{$NUM.RAYON}.bak
Тип: Zabbix Агент
Ключ: vfs.file.size[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»]
Тип информации: Числовой (целое положительное)
Единица измерения: B
Интервал обновления: 12h
Группы элементов данных: Проверка файлов
Описание:

Размер файла

ТРИГГЕР

Триггер Файл бейкап АИС старый или отсутствует

Имя: Файл бейкап АИС старый или отсутствует R{$NUM.RAYON}
Важность: Средняя
Выражение: {Chek:vfs.file.exists[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»].max(25h)}=0 or
{Chek:vfs.file.time[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»,modify].fuzzytime(25h)}=0 or
{Chek:vfs.file.size[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»].last(#2)}/{Chek:vfs.file.size[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»].last()}<0.9 or
{Chek:vfs.file.size[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»].last()}/{Chek:vfs.file.size[«{$PUTFSESRN}\export_bd_r{$NUM.RAYON}.bak»].last(#2)}>1.1
Разрешить закрывать вручную: V
Описание:
Файл выгружается SQL Агентом, архивируется бэйкапится на файловый.
D:\копия\базы-данных\export_bd_r{$NUM.RAYON}.bak

Проверки:
1.Наличие файла
2.Дата изменения файла не более 25 часов
3.Проверяем что файл не битый и увеличения размера происходит нормально.
Старый размер делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1
Активировано: V

Триггер Файл бейкап АИС старый или отсутствует R

Проверка Копии на ФС уже в архиве с датой
реализовано в check_bk_fs.bat
Путь на архив: \\192.168.%1.9\es-backups\ES_%y%.%m%.%d%.*» в cmd путь указан по сети так как чиклом перебираются подсети и проверяется архив, с одного сервера.
по факту если проверять на каждом сервере через сервере путь D:\es-backups\ES_2022.01.11.zip
Если папка расшарена можно проверить командой
zabbix_get -s 192.168.175.8 -p 10050 -k vfs.file.exists[«\\\\192.168.175.8\\es-backups\\ES_2022.01.11.zip»]
Если на большинстве серверов путь один и тот же , а на нескольких отличается можно прописать его макросом по умолчанию в шаблоне, а где отличается прописать другой путь в макросе узла.

Попытка сделать проверку виде шаблона без доп скриптов с отправкой через zabbix_sender trapper.

Шаблон Элементы данных Файловых серверов Проверки файлов
Триггер Файл бекапа АИС старый или отсутствует

И ничего не получилось(

А все почему?
так как в элементе ключа vfs.file.size[«D:\es-backups\ES_{DATE}.zip»]
Макрос {DATE} не раскрывается в ключе элемента данных, а раскрывается только в
→ Оповещения и команды, основанные на триггерах
→ Оповещения об обнаружениях
→ Оповещения о авторегистрациях
→ Внутренние оповещения
→ Оповещения обновления проблем
Текущая дата в гггг.мм.дд формате.
Оф. Макросы поддерживаемые по назначению

ТЕКУЩАЯ ДАТА в Элементе данных , макрос в zabbix
Как подставить текущую дату в zabbix в разных форматах

1.Сделать пользовательский макрос {$DATE} дальше что каждый день прописывать дату? не вариант
2.Сделать авто обнаружение файла так же не вариант так как:
Файл будет каждый день новый сравнить размер не получится, после удаления предыдущих файлов сработает триггер на старые файлы что нет данных, можно конечно выставить удаление через 0 дней если не обнаруживается сразу удалился, если файла нет то и проверка не создастся и мы ничего не узнаем.
Обнаружение файлов и запрос их наличия, размера, даты изменения Шаблон + LLD скрипт

3.Подставлять дату через API доступ в базу получать ее например с php или командой.
API Zabbix через Bash и Curl

Готовый скрипт Проверяет существует ли глобальный макрос если нет создает проверяет совпадает ли текущая дата если нет изменяет на текущую.
/usr/local/share/zabbix/externalscripts/dateglobalmacroapi.sh Имя-узла

Скачать

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

dateglobalmacroapi.sh

Код: Выделить всё

#!/bin/bash

#2022/01/15 v2.0
# Автор Мамзиков Артём Андреевич Описание по скрипту https://diyit.ru/viewtopic.php?t=1938

# Входные атрибуты для отправки информации об ошибке
HOSTCONN=$1

#***********************************************************************
#Начало пользовательских переменных
#Установите для них соответствующие значения перед выполнением сценария...
zabbixServer='192.168.175.111' # Или localhost 127.0.0.1
zabbixUsername='Admin'
zabbixPassword='zabbix'
#Конец пользовательских переменных
#***********************************************************************

header='Content-Type:application/json-rpc'
zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php"

function exit_with_error() {
  echo '**********************************'
  echo "$errorMessage"
  echo '----------------------------------'
  echo 'Сформированная Команда выполнения'
  echo '----------------------------------'
  echo  curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl
  echo '----------------------------------'
  echo 'Выходные данные'
  echo '----------------------------------'
  echo "$result"
  echo '**********************************'
  zabbix_sender -z $zabbixServer -p 10051 -s "${HOSTCONN}" -k dateglobmacerror -o "ERROR $errorMessage Команда выполнения: curl --silent --show-error --insecure --header $header --data $json $zabbixApiUrl Результат $result"
}


#------------------------------------------------------
# Аутентификация пользователя. https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/login
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить токен авторизации Zabbix'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\"},\"id\": 1 }`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
auth=$(echo "${result}" |sed -e 's|.*result":"||' -e 's/","id.*//g')
check=$(echo "${auth}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&exit 1 ; fi
echo "Вход в систему выполнен успешно - Идентификатор авторизации: $auth"
errorMessage="";json="";result="";check="" # Очистка переменных


function outapi(){
#------------------------------------------------------
# Выход из zabbix https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/logout
#------------------------------------------------------
# Выполнение выхода из API.
errorMessage='*ERROR* - Не удалось выйти из системы'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.logout\",\"params\": [],\"id\": 1, \"auth\": \"$auth\"}`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
logout=$(echo "${result}" |sed -e 's|.*result":||' -e 's/,"id.*//g')
check=$(echo "${logout}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error; fi
echo 'Успешно вышел из Zabbix' "${logout}"
errorMessage="";json="";result="";check="" # Очистка переменных
exit 1
}


# Запрос информации об авторизовавшемся пользователе
#usinfo=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\",\"userData\": true},\"id\": 1 }`
#infouser=`curl --silent --show-error --insecure --header $header --data "$usinfo" $zabbixApiUrl`
#echo "${infouser}"


# Создаваемые и проверяемые глобальные макросы (пишем через , без пробелов между ними экранируем \$)
globmacros="{\$DATE},{\$DATER},{\$DATEYYYY},{\$DATEYYYYMMDD}"


# Формирование фильтра запроса глоб.макросов. Подставим и экранируем \" для Curl
apifiltr=`echo $globmacros|sed -e 's/{/\\"{/g' -e 's/}/}\\"/g'`


#------------------------------------------------------
# Получение глобальных макросов. https://www.zabbix.com/documentation/current/ru/manual/api/reference/usermacro/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить выбранные глобальные макросы Zabbix'
json=$(echo {\"jsonrpc\": \"2.0\",\"method\": \"usermacro.get\",\"params\":{\"output\": [\"macro\",\"value\"],\"globalmacro\": true ,\"filter\": {\"macro\": [$apifiltr]}},\"auth\": \"$auth\",\"id\": 1})
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
echo "Отображение существующих глобальны макросов даты": $result
proverka="${result}"
#dateglobmac=`echo $proverka|sed 's|.*result:||'|sed 's/,id.*//g'` # Выберем глобальные макросы даты
errorMessage="";json="";result="";check="" # Очистка переменных

# Сгенерируем фильтр для проверки макроса и создания если нет, делим через ,
IFS=',' read -ra sumdir < <(echo "${globmacros}")
# Печать разделенной строки
for sverka in "${sumdir[@]}"
do
case $proverka in
	*"${sverka}"*)
	echo "Макрос Найден" "${sverka}"
	;;
	*)
	echo "Макрос Не найден Создаём" "${sverka}"
	#------------------------------------------------------
	# Создание глобального макроса. https://www.zabbix.com/documentation/current/ru/manual/api/reference/usermacro/createglobal
	#------------------------------------------------------
	errorMessage='*ERROR* - Не удается изменить значение глобального макроса Zabbix'
	json=$(echo {\"jsonrpc\": \"2.0\",\"method\": \"usermacro.createglobal\",\"params\":{\"macro\": \"$sverka\",\"value\": \"test\"},\"auth\": \"$auth\",\"id\": 1})
	result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
	check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
	if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
	echo "Изменение даты в глобальном макросе" $result
	errorMessage="";json="";result="";check="" # Очистка переменных
	;;
esac

# Зададим соответствие даты к макросы
case $sverka in
	{\$DATE})
	DATE=`date +"%Y.%m.%d"` # Получаем переменную текущей даты гггг.мм.дд
	;;
	{\$DATER})
	DATE=`date +"%d.%m.%Y"` # Текущая дата дд.мм.гггг
	;;
	{\$DATEYYYY})
	DATE=`date +"%Y"`   # Текущая дата гггг
	;;
	{\$DATEYYYYMMDD})
	DATE=`date +"%Y%m%d"` # текущая дата ггггммдд
	;;
	*)
	echo "Соответствие макроса к дате Не найдено" "${sverka}"
	zabbix_sender -z $zabbixServer -p 10051 -s "${HOSTCONN}" -k dateglobmacerror -o "ERROR Соответствие макроса к дате Не найдено $sverka "
esac

# Проверим дату и обновим если дата отличается
znacenie=`echo $proverka|sed 's|.*'$sverka'","value":"||'|sed 's/"}.*//g'` # Выберем дату для конкретного макроса
idglobalmacro=`echo $proverka|sed 's|","macro":"'$sverka'.*||'|sed 's/.*"globalmacroid":"//g'` # Для обновление нужно знать ID макроса выберм его

if [ "$DATE" != "$znacenie" ]; then
echo "не совпадает дата" $DATE  $znacenie

#------------------------------------------------------
# Обновление глобального макроса. https://www.zabbix.com/documentation/current/ru/manual/api/reference/usermacro/updateglobal
#------------------------------------------------------
errorMessage='*ERROR* - Не удается изменить значение глобального макроса Zabbix'
json=$(echo {\"jsonrpc\": \"2.0\",\"method\": \"usermacro.updateglobal\",\"params\":{\"globalmacroid\": \"$idglobalmacro\",\"value\": \"$DATE\"},\"auth\": \"$auth\",\"id\": 1})
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
check=$(echo "${result}"|tr -d '\r\n'| sed -n 's/error.*\|Invalid.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error &&outapi ; fi
echo "Изменение даты в глобальном макросе" $result
errorMessage="";json="";result="";check="" # Очистка переменных

fi
done

outapi # Запустим блок Выхода

выполнении скрипта dateglobalmacroapi.sh Элементы и триггер

Пример ошибки не правильный пароль.

выполнении скрипта dateglobalmacroapi.sh Пример ошибок

Код: Выделить всё

#!/bin/bash
# Тестовая версия 1

#***********************************************************************
#Начало пользовательских переменных
#Установите для них соответствующие значения перед выполнением сценария...
zabbixServer='192.168.175.111'
zabbixUsername='Admin'
zabbixPassword='zabbix'
#Конец пользовательских переменных
#***********************************************************************

header='Content-Type:application/json-rpc'
zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php"

function exit_with_error() {
  echo '********************************'
  echo "$errorMessage"
  echo '--------------------------------'
  echo 'Входные данные'
  echo '--------------------------------'
  echo "$json" $zabbixApiUrl $usexit
  echo '--------------------------------'
  echo 'Выходные данные'
  echo '--------------------------------'
  echo "$result" "${logout}"
  echo '********************************'
  exit 1
}

#------------------------------------------------------
# Аутентификация пользователя. https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/login
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить токен авторизации Zabbix'
json=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\": \"$zabbixUsername\",\"password\": \"$zabbixPassword\"},\"id\": 1 }`
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
auth=$(echo "${result}" |sed -e 's|.*result":"||' -e 's/","id.*//g')
check=$(echo "${auth}"|tr -d '\r\n'| sed -n 's/error.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error; fi
echo "Вход в систему выполнен успешно - Идентификатор авторизации: $auth"

#------------------------------------------------------
# Получение глобального макроса. https://www.zabbix.com/documentation/current/ru/manual/api/reference/usermacro/get
#------------------------------------------------------
errorMessage='*ERROR* - Не удается получить ID глобального макроса Zabbix'
getglobmacro=$(echo {\"jsonrpc\": \"2.0\",\"method\": \"usermacro.get\",\"params\":{\"output\": \"extend\",\"globalmacro\": true},\"auth\": \"$auth\",\"id\": 1})
macrocglobget=`curl --silent --show-error --insecure --header $header --data "$getglobmacro" $zabbixApiUrl`
echo "Изменение даты в глобальном макросе $macrocglobget"



DATE=`date +"%Y.%m.%d"` # Получаем переменную текущей даты гггг.мм.дд
#------------------------------------------------------
# Создание глобального макроса. https://www.zabbix.com/documentation/current/ru/manual/api/reference/usermacro/createglobal
#------------------------------------------------------
errorMessage='*ERROR* - Не удается изменить значение глобального макроса Zabbix'
globmacro=$(echo {\"jsonrpc\": \"2.0\",\"method\": \"usermacro.updateglobal\",\"params\":{\"globalmacroid\": \"3\",\"value\": \"$DATE\"},\"auth\": \"$auth\",\"id\": 1})
macrocglob=`curl --silent --show-error --insecure --header $header --data "$globmacro" $zabbixApiUrl`
echo "Изменение даты в глобальном макросе $macrocglob"


#------------------------------------------------------
# Выход из zabbix https://www.zabbix.com/documentation/current/ru/manual/api/reference/user/logout
#------------------------------------------------------
# Выполнение выхода из API.
errorMessage='*ERROR* - Не удалось выйти из системы'
usexit=`echo {\"jsonrpc\": \"2.0\",\"method\":\"user.logout\",\"params\": [],\"id\": 1, \"auth\": \"$auth\"}`
logout=`curl --silent --show-error --insecure --header $header --data "$usexit" $zabbixApiUrl`
check=$(echo "${logout}"|tr -d '\r\n'| sed -n 's/error.*/ERROR/Ip')
if [[ ${check} == *ERROR* ]]; then exit_with_error; fi
echo 'Успешно вышел из Zabbix' "${logout}"

Авторизуемся получим токен аунтификации
curl —silent —show-error —insecure —header ‘Content-Type: application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»:»user.login»,»params»:{«user»: «Admin»,»password»: «zabbix»},»id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php

Ответ: {«jsonrpc»:»2.0″,»result»:»e56692223b1ec39702106d8155b7de74″,»id»:1}

Запрос Глобальных Макросов
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.get»,»params»: {«output»: «extend»,»globalmacro»: true },»auth»:»e56692223b1ec39702106d8155b7de74″, «id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:[{«globalmacroid»:»2″,»macro»:»{$SNMP_COMMUNITY}»,»value»:»public»},{«globalmacroid»:»13″,»macro»:»{$DATE}»,»value»:»2022.01.14″},{«globalmacroid»:»14″,»macro»:»{$DATEYYYYMMDD}»,»value»:»20220114″}],»id»:1}

Запрос с фильтром только макрос {$DATE}
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.get»,»params»: {«output»: «extend»,»globalmacro»: true ,»filter»: {«macro»: «{$DATE}»}},»auth»:»e56692223b1ec39702106d8155b7de74″, «id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:[{«globalmacroid»:»13″,»macro»:»{$DATE}»,»value»:»2022.01.14″}],»id»:1}

Запрос с фильтром только макрос {$DATE} и вывод без value только globalmacroid и macro
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.get»,»params»: {«output»: [«macro»],»globalmacro»: true ,»filter»: {«macro»: «{$DATE}»}},»auth»:»e56692223b1ec39702106d8155b7de74″, «id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:[{«globalmacroid»:»13″,»macro»:»{$DATE}»}],»id»:1}

Запрос с фильтром только макрос {$DATE} и вывод без macro только globalmacroid и value
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.get»,»params»: {«output»: [«value»],»globalmacro»: true ,»filter»: {«macro»: «{$DATE}»}},»auth»:»e56692223b1ec39702106d8155b7de74″, «id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:[{«globalmacroid»:»13″,»value»:»2022.01.14″}],»id»:1}

Запрос с фильтром только макрос {$DATE} и вывод «macro»,»value»
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.get»,»params»: {«output»: [«macro»,»value»],»globalmacro»: true ,»filter»: {«macro»: «{$DATE}»}},»auth»:»e56692223b1ec39702106d8155b7de74″, «id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:[{«globalmacroid»:»13″,»macro»:»{$DATE}»,»value»:»2022.01.14″}],»id»:1}

Запрос с фильтром макросов «{$DATE}»,»{$DATEYYYYMMDD}»
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.get»,»params»: {«output»: [«macro»,»value»],»globalmacro»: true ,»filter»: {«macro»: [«{$DATE}»,»{$DATEYYYYMMDD}»]}},»auth»:»e56692223b1ec39702106d8155b7de74″, «id»: 1 }’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:[{«globalmacroid»:»4″,»macro»:»{$DATEYYYYMMDD}»,»value»:»20220109″},{«globalmacroid»:»3″,»macro»:»{$DATE}»,»value»:»2022.01.13″}],»id»:1}

Создание макроса {$DATER} значение 1
curl —silent —show-error —insecure —header ‘Content-Type:application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»: «usermacro.createglobal»,»params»:{«macro»: «{$DATER}»,»value»: «1»},»auth»: «e56692223b1ec39702106d8155b7de74″,»id»: 1}’ http://192.168.175.111/zabbix/api_jsonrpc.php
Ответ:
{«jsonrpc»:»2.0″,»result»:{«globalmacroids»:[«5″]},»id»:1}

Выход из API
curl —silent —show-error —insecure —header ‘Content-Type: application/json-rpc’ —data ‘{«jsonrpc»: «2.0»,»method»:»user.logout»,»params»: [],»id»: 1, «auth»: «e56692223b1ec39702106d8155b7de74»}’ http://192.168.175.111/zabbix/api_jsonrpc.php

4.Сделать проверку элемента Через внешний скрипт в элементе прописать команду даты которая будет раскрывается в скрипте
или же запускать команду прямо через заббикс агент ключом system.run (ключ в ключе попробовать с раскрытием даты в команде)
Скачать пример Шаблон + скрипт

Пример шаблона проверка через сеть

Скачиваем скрипт ложим его на заббикс сервер в моем случае путь такой
/usr/local/share/zabbix/externalscripts

Так выглядит ключ изначально
zabbix_get -s 192.168.175.8 -k vfs.file.exists[«D:\es-backups\ES_{DATE}.zip»] — не раскрывается дата

Команда прилетает на Хост Windows
zabbix_get -s 192.168.175.8 -k system.run[«dir /a-d /B D:\%date:~6,4%.zip»] — имя архива текущий год, не работает так как запятая делить команду и не экранируется получаем команду со стороны узла dir /a-d /B D:\%date:~6
Попытка раскрыть дату еще на сервере Linux
zabbix_get -s 192.168.175.8 -k system.run[«dir /a-d /B D:\date +»%Y».zip»] — с разными вариантами кавычек так же не вариант

Внешняя проверка
dir-file-date.sh[{HOST.CONN},{$HOST.PORTS},vfs.file.exists[«D:\»${DATEYYYY}».zip»]

Элемент данных с датой внешняя проверка

Пример Элемента данных:
Имя: Наличие файла ES_{$DATE}.zip
Тип: Внешняя проверка
Ключ: dir-file-date.sh[{HOST.CONN},{$HOST.PORTS},vfs.file.exists[«D:\es-backups\ES_${DATE}.zip»]
Тип информации: Числовой (целое положительное)
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание:
1 — файл найден
0 — файл не найден
Активировано: V

Если перед переменой у нас идет слеш \$ выходит что мы экранируем символ $ и это уже будет не переменная
root@ZABBIXSERVER:~# ./dir-file-date.sh 192.168.175.8 10050 ‘vfs.file.exists D:\${DATEYYYY}.zip’
vfs.file.exists D:$DATEYYYY.zip
root@ZABBIXSERVER:~# ./dir-file-date.sh 192.168.175.8 10050 ‘vfs.file.exists D:\»${DATEYYYY}».zip’
vfs.file.exists D:$DATEYYYY.zip
root@ZABBIXSERVER:~# ./dir-file-date.sh 192.168.175.8 10050 ‘vfs.file.exists D:\ ${DATEYYYY}.zip’
vfs.file.exists D: 2021.zip

./dir-file-date.sh 192.168.175.8 10050 ‘vfs.file.exists[«D:\${DATEYYYY}.zip»‘
Ответ: 1

./dir-file-date.sh 192.168.175.8 10050 ‘vfs.file.exists[«D:\es-backups\ES_${DATE}.zip»‘

t1=1
t2=t1
t3=$(eval echo \$$t2)
echo $t3
1

t1=1
t2=t1
echo ${!t2}
1

eval echo \$$i

скрипт копируем на заббикс сервер, в моем случае путь такой:
/usr/local/share/zabbix/externalscripts

#!/bin/bash
#2021/11/28 v1
# Автор Мамзиков Артём Андреевич
# Подставляем дату в ключ

# Объявим входные переменные(variable) и если входная переменная пустая задаем дефолтные настройки для некоторых переменных
IP=$1
PORT=${2:-10050}
KEY=$3

# Для теста просмотр входных переменных
STV=$(date «+%F %T»)
#echo «${STV}» «${IP}» «${PORT}» «${KEY}» >> /tmp/log-date-dir-file

# Переменные Даты для файлов и папок https://losst.ru/komanda-date-v-linux
DATE=`date +»%Y.%m.%d»`
DATEYYYY=`date +»%Y»`
DATEYYYYMMDD=`date +»%Y%m%d»`

# так как \ у нас экранирует знак переменой $ если она сразу идет сделаем ее подстановочной
SL=’\’

# Замена \ на переменную
show=$(echo «${KEY}»| sed ‘s/\\/»${SL}»/g’)

# Раскрытие переменных
#eval varval=\»\$$show\»
eval varval=\»\$show\»
#eval echo «${varval}»
KEYP=$(eval echo «${varval}»)
#eval echo \»\$$show\»

# Запрос сформированного ключа
# Так как Многоуровневые массивы параметров, например [a,[b,[c,d]],e], недопускаются. параметр в кавычках разрешена левая квадратная скобка [ , добавим закрывающую правую скобку ] . https://www.zabbix.com/documentation/cu … s/item/key
zabbix_get -s $IP -p $PORT -k «${KEYP}»]
#echo «${KEYP}»

5. Сделать глобальный макрос и значение даты напрямую подставлять в таблице SQL процедурой каждые цать интервал времени.
Хранятся они в таблице globalmacro — Глобальные Макросы

Глобальные макросы
MySql таблица globalmacro

Получение даты и времени
Функции NOW(), SYSDATE(), CURRENT_TIMESTAMP() возвращают текущую локальную дату и время на основе системных часов в виде объекта datetime. Все три функции возвращают одинаковый результат

SELECT NOW(); — 2018-05-25 21:34:55
SELECT SYSDATE(); — 2018-05-25 21:34:55
SELECT CURRENT_TIMESTAMP(); — 2018-05-25 21:32:55
Функции CURDATE и CURRENT_DATE возвращают текущую локальную дату в виде объекта date:

SELECT CURRENT_DATE(); — 2018-05-25
SELECT CURDATE(); — 2018-05-25
Функции CURTIME и CURRENT_TIME возвращают текущее время в виде объекта time:

SELECT CURRENT_TIME(); — 20:47:45
SELECT CURTIME(); — 20:47:45
UTC_DATE возвращает текущую локальную дату относительно GMT

SELECT UTC_DATE(); — 2018-05-25
UTC_TIME возвращает текущее локальное время относительно GMT

SELECT UTC_TIME(); — 17:47:45

Подробнее Функции для работы с датами и временем

Проверка SELECT DATE_SUB(CURDATE(), INTERVAL 3 MONTH); — формата гггг-мм-дд
функция DATE_SUB возвращает дату, после которой вычитается определенный интервал даты/времени. минус 3 месяца
CURDATE возвращает текущую дату
DATE_SUB( date, INTERVAL value unit )
UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 3 MONTH)) — в формате unix
date — дата, на которую должен быть вычтен интервал.
value — значение интервала времени / даты, которое вы хотите вычесть. Вы можете указать положительные и отрицательные значения для этого параметра.
unit — единичный тип интервала, например DAY, MONTH, MINUTE, HOUR и т.д.

не совсем подходит Текущая дата в гггг-мм-дд формате.
SELECT CURRENT_DATE(); 2021-11-27
SELECT CURDATE(); 2021-11-27
Идет через тире
Преобразуем дату
SELECT DATE_FORMAT(CURRENT_DATE(), ‘%d/%m/%y’); получим 27/11/21
SELECT DATE_FORMAT(CURRENT_DATE(), ‘%d/%m/%Y’); получим 27/11/2021
SELECT DATE_FORMAT(CURRENT_DATE(), ‘%Y.%m.%d’); получим 2021.11.27 Текущая дата в гггг.мм.дд формате.
И получаем SQL запрос вида
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y.%m.%d’) WHERE `globalmacro`.`macro` = ‘{$DATE}’;
Так как у меня дата без точек везде добавим еще один глобальный макрос {$DATEYYYYMMDD}
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y%m%d’) WHERE `globalmacro`.`macro` = ‘{$DATEYYYYMMDD}’;

Раздельно выводим Год Месяц Число и составляем как нужно
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y’) WHERE `globalmacro`.`macro` = ‘{$DATE_YYYY}’;
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%m’) WHERE `globalmacro`.`macro` = ‘{$DATE_MM}’;
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%d’) WHERE `globalmacro`.`macro` = ‘{$DATE_DD}’;

Указать 3 глобальных макроса: {$DATE_YYYY} ; {$DATE_MM} ; {$DATE_DD}

И получаем даты

Глобальные Макросы zabbix с текущей датой

Для времени
SELECT TIME_FORMAT(CURRENT_TIME (),’%H’);
SELECT TIME_FORMAT(CURRENT_TIME(),’%i’);
SELECT TIME_FORMAT(CURRENT_TIME(),’%S’);

Global_Macro_Time
BEGIN
UPDATE `globalmacro` SET `value` = TIME_FORMAT(CURRENT_TIME (),’%H’) WHERE `globalmacro`.`macro` = ‘{$TIME_HH}’;
UPDATE `globalmacro` SET `value` = TIME_FORMAT(CURRENT_TIME(),’%i’) WHERE `globalmacro`.`macro` = ‘{$TIME_MM}’;
UPDATE `globalmacro` SET `value` = TIME_FORMAT(CURRENT_TIME(),’%S’) WHERE `globalmacro`.`macro` = ‘{$TIME_SS}’;
END

Добавим процедуру и событие в MySql для автоматического выполнения команды каждый день в 00:00:00 часов

Выполнение команд от имени администратора root или пользователя с соответствующими правами.

Убедитесь в том, что первый планировщик событий включен значение должно быть ON (Обычно выключен)
SHOW GLOBAL VARIABLES LIKE ‘event_scheduler’;
Команда включения
SET GLOBAL event_scheduler = ON;

Добавим виде процедуры
USE `zabbixdb`;

DELIMITER $$

— Процедуры

DROP PROCEDURE IF EXISTS `Global_Macro_Date`$$
CREATE PROCEDURE `Global_Macro_Date`()
COMMENT ‘Текущая дата в глобальный макрос’
BEGIN

— Текущая дата в формате ГГГГ.ММ.ДД
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y.%m.%d’) WHERE `globalmacro`.`macro` = ‘{$DATE}’;
— Текущая дата в формате ГГГГММДД
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y%m%d’) WHERE `globalmacro`.`macro` = ‘{$DATEYYYYMMDD}’;
— Текущая дата в формате ДД.ММ.ГГГГ
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%d.%m.%Y’) WHERE `globalmacro`.`macro` = ‘{$DATEDD.MM.YYYY}’;
— Текущий Год формате ГГГГ
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y’) WHERE `globalmacro`.`macro` = ‘{$DATE_YYYY}’;
— Текущий Год Формате ГГ
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%y’) WHERE `globalmacro`.`macro` = ‘{$DATE_YY}’;
— Текущий Месяц формат ММ
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%m’) WHERE `globalmacro`.`macro` = ‘{$DATE_MM}’;
— Текущий День формат ДД
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%d’) WHERE `globalmacro`.`macro` = ‘{$DATE_DD}’;
— Номер недели в текущем месяце
UPDATE `globalmacro` SET `value` = WEEK(CURDATE(),1)-WEEK(DATE_FORMAT(CURRENT_DATE(),’%Y-%m-01′),1)+1 WHERE `globalmacro`.`macro` = ‘{$WEEK_NUMBER_MONTH}’;
— Номер дня недели (1-ПН)
UPDATE `globalmacro` SET `value` = WEEKDAY(CURDATE())+1 WHERE `globalmacro`.`macro` = ‘{$WEEK_DAY}’;
— Количество дней в текущем месяце
UPDATE `globalmacro` SET `value` =DAY(LAST_DAY(CURDATE())) WHERE `globalmacro`.`macro` = ‘{$DAYS_CURRENT_MONTH}’;
— Количество дней в предыдущем месяце
UPDATE `globalmacro` SET `value` =DAYOFMONTH(LAST_DAY(NOW() — INTERVAL 1 MONTH)) WHERE `globalmacro`.`macro` = ‘{$NUM_DAYS_PREV_MONTH}’;
— Количеством секунд в предыдущем месяце, прибавляя 10800 секунд (3 часа)
UPDATE `globalmacro` SET `value` =DAYOFMONTH(LAST_DAY(NOW() — INTERVAL 1 MONTH)) * 24 * 60 * 60 + 10800 WHERE `globalmacro`.`macro` = ‘{$TRIG_SECONDS_PREV_MONTH}’;
— Минус 1 день из даты
UPDATE `globalmacro` SET `value` = LPAD(DAY(DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 2, ‘0’) WHERE `globalmacro`.`macro` = ‘{$DATE_DD_1DAY}’;
UPDATE `globalmacro` SET `value` = LPAD(MONTH(DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 2, ‘0’) WHERE `globalmacro`.`macro` = ‘{$DATE_MM_1DAY}’;
UPDATE `globalmacro` SET `value` = YEAR(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) WHERE `globalmacro`.`macro` = ‘{$DATE_YYYY_1DAY}’;

END$$
DELIMITER ;

Добавим событие для запуска процедуры каждые сутки в 00:00:00 часов
DROP EVENT `Global_Macro_Date`$$
DELIMITER $$

— События

CREATE EVENT `Global_Macro_Date`
ON SCHEDULE EVERY 1 DAY STARTS
STARTS ‘2021-11-28 00:00:00’
ON COMPLETION PRESERVE
ENABLE
COMMENT ‘Текущая дата в глобальный макрос’
DO BEGIN
CALL `Global_Macro_Date`();
END$$

DELIMITER ;

Возможно в событии нужно задать пустые приёмные/аргументы для вызова процедуры
SET @p0=»; SET @p1=»; SET @p2=»; CALL `Global_Macro_Date`(@p0, @p1, @p2);

Процедура
Событие для процедуры

Текщее время
UPDATE `globalmacro` SET `value` = TIME_FORMAT(CURRENT_TIME (),’%H’) WHERE `globalmacro`.`macro` = ‘{$TIME_HH}’;
UPDATE `globalmacro` SET `value` = TIME_FORMAT(CURRENT_TIME(),’%i’) WHERE `globalmacro`.`macro` = ‘{$TIME_MM}’;
UPDATE `globalmacro` SET `value` = TIME_FORMAT(CURRENT_TIME(),’%S’) WHERE `globalmacro`.`macro` = ‘{$TIME_SS}’;

Либо можно через скрипт sh прописать подключение к базе и выполнение команды через Cron либо из самого заббикса выполнение команды виде элемента данных.

mysql -uroot -pПароль -zabbixdb «UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y.%m.%d’) WHERE `globalmacro`.`macro` = ‘{$DATE}’;UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), ‘%Y%m%d’) WHERE `globalmacro`.`macro` = ‘{$DATEYYYYMMDD}’;»

И прописываем в крон
5 10 * * * root /etc/cron.d/DateMacroZabbix.sh > /dev/null 2>&1
‘@reboot root /etc/cron.d/DateMacroZabbix.sh > /dev/null 2>&1

Так же можно использовать Макросы Шаблон и узлов выбрав таблицу и ID узла или шаблона
hostmacro — Макросы Узлов (Хостов)

Вот так выглядит готовый шаблон

Шаблон Подстановка дат
Пример последних данных

Проверка пути файла Через сеть

Проверка пути файла Через сеть

Дата раздельными числами потом можно скомпоновать из 3х макросов как угодно что более удобно, так же номер недели , кол — во дней в месяце и тп.

Как запрашивать Элемент данных в определенное время ? Пользовательские интервалы в Элементах данных

Всем привет!

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

Встает вопрос как мониторить актуальное состояние?

Предлагаю свое решение по реализации данной задачи с использованием Zabbix и небольшого скрипта на Python.

Опишу полный цикл своих бэкапов.

1. MSSQL ежедневно делает бэкап базы с перезаписью в одно и тоже место с одним и тем же именем:

D:\backup\mssql\my_data_base.bak

Данный файл мониторится просто.

в Zabbix создаем Элемент данных

vfs.file.time[D:\backup\mssql\my_data_base.bak,modify]

И на основе него создается тригер который проверяет не прошли ли сутки(86400сек.) с момента последнего бэкапа.

{host:vfs.file.time[D:\backup\mssql\my_data_base.bak,modify].now()}-{host:vfs.file.time[D:\backup\mssql\my_data_base.bak,modify].last()}>86400

2. Далее Cobian сжимает и переносит данный бэкап в несколько мест. В хранилище на том же сервере, плюс кладет в сетевое хранилище, где циклично обновляет 14 копий.

Например:

E:\backup\cobian\my_data_base
\\NAS\backup\cobian\my_data_base

В которых лежат файлы:

my_data_base 2018-12-12 05;30;55.7z
my_data_base 2018-12-11 05;30;54.7z
my_data_base 2018-12-10 05;30;55.7z
my_data_base 2018-12-09 05;30;56.7z

Соответственно имена файлов в каждой из директорий получаются однотипные, но динамические.

Казалось бы можно мониторить дату изменения директории с помощью того же элемента данных что и выше. Но не все так просто. У меня это не заработало. точнее заработало, но не правильно и плохо, дата изменения папки не обновлялась пока в нее не войдешь в ручную, хотя файл бэкапа был с правильной датой. Возможно были где то глюки винды. К тому же это совсем не захотело работать с сетевым путем (\\NAS\backup\ )

По этому собственно и родился данный скрипт:

import os, datetime, sys
def check_backup(path):
old = round(datetime.datetime.now().timestamp() - os.path.getmtime(max([os.path.join(path, file) for file in os.listdir(path)], key=os.path.getmtime)))
size = os.path.getsize(max([os.path.join(path, file) for file in os.listdir(path)], key=os.path.getmtime))
err = "1"
if size > 2097152:
if old < 86400:
err = "0"
print(err)
check_backup(sys.argv[1])

Передавая путь к директории с бэкапами данному скрипту он ищет самый новый файл в папке, оценивает размер его и как он давно был создан.

В данной примере бэкап должен быть больше 2MB и он не должен быть старше суток.
Если все ок скрипт передаст в заббикс 0 если что то не так то вернется 1.

В качестве аргумента скрипту передать можно как локальный путь так и сетевой. все прекрасно работает. Главное что бы был доступ.

Как это выглядит в заббиксе.

В первую очередь создаем юзер параметр.

Идем в zabbix_agent.conf и добавляем строку:

UserParameter=check_backup[*], "C:\Program Files (x86)\Python37-32\python.exe" C:\bin\scripts\find.py $1

Собственно здесь указывается путь к компилятору Python, далее путь до скрипта и параметр который будет взят из ключа check_backup[*]

В заббиксе Создаем элемент данных

на основании данного элемента создаем тригер который проверяет что именно передал нам скрипт. если это не 0 значит это проблема.

{host:check_backup[E:\backup\cobian\my_data_base\].last()}<>0

UPD: Добавил в качестве параметров уникальный размер для каждого бэкапа

import os, datetime, sys

def check_backup(path,ves):
    ves = int(ves)
    old = round(datetime.datetime.now().timestamp() - os.path.getmtime(max([os.path.join(path, file) for file in os.listdir(path)], key=os.path.getmtime)))
    size = os.path.getsize(max([os.path.join(path, file) for file in os.listdir(path)], key=os.path.getmtime))
    err = "1"
    if size > ves:
        if old < 86400:
            err = "0"

    print(err)
 
check_backup(sys.argv[1],sys.argv[2])

В конфиге заббикса соответственно вызывается вот так

UserParameter=check_backup[*],"C:\Program Files (x86)\Python37-32\python.exe" C:\bin\scripts\find.py $1 $2

в элементах данных соответственно через запятую указывается размер в байтах.

{host:check_backup[E:\backup\cobian\my_data_base\,2097152].last()}<>0

Вот собственно и все. Спасибо за внимание.

The table provides details on the item keys that you can use with Zabbix agent items.

Key
Description Return value Parameters Comments
agent.hostname
Returns agent host name. String value Returns the actual value of the agent hostname from a configuration file.
agent.ping
Check the agent availability. Returns ‘1’ if agent is available, nothing if unavailable. Use function nodata() to check for host unavailability.
agent.version
Version of Zabbix agent. String Example of returned value: 1.8.2
kernel.maxfiles
Maximum number of opened files supported by OS. Number of files. Integer.
kernel.maxproc
Maximum number of processes supported by OS. Number of processes.
Integer.
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
Monitoring of log file. Log. file – full path and name of log file
regexp – regular expression describing the required pattern
encoding – code page identifier
maxlines – maximum number of new lines per second the agent will send to Zabbix server or proxy. This parameter overrides the value of ‘MaxLinesPerSecond’ in zabbix_agentd.conf
mode – possible values:
all (default), skip (skip processing of older data).
The mode parameter is supported from version 2.0.
output – an optional output formatting template. The \0 escape sequence is replaced with the matched text while an \N (where N=1…9) escape sequence is replaced with Nth matched group (or an empty string if the N exceeds the number of captured groups).
If <output> is left empty – the whole line containing the matched text is returned.
Note that all global regular expression types except ‘Result is TRUE’ always return the whole matched line and the <output> parameter is ignored.
The output parameter is supported from version 2.2.
The item must be configured as an active check.
If file is missing or permissions do not allow access, item turns unsupported.

Examples:
log[/var/log/syslog]
log[/var/log/syslog,error]
log[/home/zabbix/logs/logfile,,,100]

See also additional information on log monitoring.

logrt[file_pattern,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
Monitoring of log file with log rotation support. Log. file_pattern – absolute path to file and regexp describing the file name pattern
regexp – regular expression describing the required content pattern
encoding – code page identifier
maxlines – maximum number of new lines per second the agent will send to Zabbix server or proxy. This parameter overrides the value of ‘MaxLinesPerSecond’ in zabbix_agentd.conf
mode – possible values:
all (default), skip (skip processing of older data).
The mode parameter is supported from version 2.0.
output – an optional output formatting template. The \0 escape sequence is replaced with the matched text while an \N (where N=1…9) escape sequence is replaced with Nth matched group (or an empty string if the N exceeds the number of captured groups).
If <output> is left empty – the whole line containing the matched text is returned.
Note that all global regular expression types except ‘Result is TRUE’ always return the whole matched line and the <output> parameter is ignored.
The output parameter is supported from version 2.2.
The item must be configured as an active check.
Log rotation is based on the last modification time of files.

Examples:
logrt[«/home/zabbix/logs/^logfile[0-9]{1,3}$»,,,100] – will match a file like «logfile1» (will not match «.logfile1»)
logrt[«/home/user/logfile_.*_[0-9]{1,3}»,»pattern_to_match»,»UTF-8″,100] – will collect data from files such “logfile_abc_1” or “logfile__001”.

See also additional information on log monitoring.

net.dns[<ip>,zone,<type>,<timeout>,<count>]
Checks if DNS service is up. 0 – DNS is down (server did not respond or DNS resolution failed)
1 – DNS is up
ip – IP address of DNS server (leave empty for the default DNS server, ignored on Windows)
zone – zone to test the DNS
type – record type to be queried (default is SOA)
timeout (ignored on Windows) – timeout for the request in seconds (default is 1 second)
count (ignored on Windows) – number of tries for the request (default is 2)
Example key:
net.dns[8.8.8.8,zabbix.com,MX,2,1]

The possible values for type are:
ANY, A, NS, CNAME, MB, MG, MR, PTR, MD, MF, MX, SOA, NULL, WKS (except for Windows), HINFO, MINFO, TXT, SRV

SRV record type is supported since Zabbix agent versions 1.8.6 (Unix) and 2.0.0 (Windows).

Internationalized domain names are not supported, please use IDNA encoded names instead.

Naming before Zabbix 2.0 (still supported): net.tcp.dns

net.dns.record[<ip>,zone,<type>,<timeout>,<count>]
Performs a DNS query. On success returns a character string with the required type of information. ip – IP address of DNS server (leave empty for the default DNS server, ignored on Windows)
zone – zone to test the DNS
type – record type to be queried (default is SOA)
timeout (ignored on Windows) – timeout for the request in seconds (default is 1 second)
count (ignored on Windows) – number of tries for the request (default is 2)
Example key:
net.dns.record[8.8.8.8,zabbix.com,MX,2,1]

The possible values for type are:
ANY, A, NS, CNAME, MB, MG, MR, PTR, MD, MF, MX, SOA, NULL, WKS (except for Windows), HINFO, MINFO, TXT, SRV

SRV record type is supported since Zabbix agent versions 1.8.6 (Unix) and 2.0.0 (Windows).

Internationalized domain names are not supported, please use IDNA encoded names instead.

Naming before Zabbix 2.0 (still supported): net.tcp.dns.query

net.if.collisions[if]
Out-of-window collision. Number of collisions.
Integer.
if – interface
net.if.discovery
List of network interfaces. Used for low-level discovery. JSON object Supported since Zabbix agent version 2.0.

On FreeBSD, OpenBSD and NetBSD supported since Zabbix agent version 2.2.

net.if.in[if,<mode>]
Incoming traffic statistics on network interface. Integer. if – network interface name
mode – possible values:
bytes – number of bytes (default)
packets – number of packets
errors – number of errors
dropped – number of dropped packets
Multi-byte interface names on Windows are supported since Zabbix agent version 1.8.6.

Example keys:
net.if.in[eth0,errors]
net.if.in[eth0]

You may use this key with a Delta (speed per second) store value in order to get bytes per second statistics.

net.if.out[if,<mode>]
Outgoing traffic statistics on network interface. Integer. if – network interface name
mode – possible values:
bytes – number of bytes (default)
packets – number of packets
errors – number of errors
dropped – number of dropped packets
Multi-byte interface names on Windows are supported since Zabbix agent 1.8.6 version.

Example keys:
net.if.out[eth0,errors]
net.if.out[eth0]

You may use this key with a Delta (speed per second) store value in order to get bytes per second statistics.

net.if.total[if,<mode>]
Sum of incoming and outgoing traffic statistics on network interface. Integer. if – network interface name
mode – possible values:
bytes – number of bytes (default)
packets – number of packets
errors – number of errors
dropped – number of dropped packets
Example keys:
net.if.total[eth0,errors]
net.if.total[eth0]
You may use this key with a Delta (speed per second) store value in order to get bytes per second statistics.
Note that dropped packets are supported only if both net.if.in and net.if.out work for dropped packets on your platform.
net.tcp.listen[port]
Checks if this TCP port is in LISTEN state. 0 – it is not
1 – it is in LISTEN state
port – TCP port number Example:
net.tcp.listen[80]

On Linux supported since Zabbix agent version 1.8.4

net.tcp.port[<ip>,port]
Check, if it is possible to make TCP connection to port number port. 0 – cannot connect
1 – can connect
ip – IP address(default is 127.0.0.1)
port – port number
Example:
net.tcp.port[,80] can be used to test availability of web server running on port 80.
Old naming: check_port[*]
For simple TCP performance testing use net.tcp.service.perf[tcp,<ip>,<port>]
Note that these checks may result in additional messages in system daemon logfiles (SMTP and SSH sessions being logged usually).
net.tcp.service[service,<ip>,<port>]
Checks if service is running and accepting TCP connections. 0 – service is down
1 – service is running
service – either of:
ssh, ntp, ldap, smtp, ftp, http, pop, nntp, imap, tcp, https, telnet
ip – IP address (default is 127.0.0.1)
port – port number (by default standard service port number is used)
Example key:
net.tcp.service[ftp,,45] – can be used to test the availability of FTP server on TCP port 45.
Note that these checks may result in additional messages in system daemon logfiles (SMTP and SSH sessions being logged usually).
Checking of encrypted protocols (like IMAP on port 993 or POP on port 995) is currently not supported. As a workaround, please use net.tcp.port for checks like these.
Checking of LDAP and HTTPS by Windows agent is currently not supported.
Note that the telnet check looks for a prompt (‘:’ at the end).
Old naming: check_service[*]
Note that before Zabbix 1.8.3 version service.ntp should be used instead of ntp.
https and telnet services are supported since Zabbix 2.0.
net.tcp.service.perf[service,<ip>,<port>]
Checks performance of service. 0 – service is down;
seconds – the number of seconds spent while connecting to the service
service – either of:
ssh, ntp, ldap, smtp, ftp, http, pop, nntp, imap, tcp, https, telnet
ip – IP address (default is 127.0.0.1)
port – port number (by default standard service port number is used)
Example key:
net.tcp.service.perf[ssh] – can be used to test the speed of initial response from SSH server.
Checking of encrypted protocols (like IMAP on port 993 or POP on port 995) is currently not supported. As a workaround, please use net.tcp.service.perf[tcp,<ip>,<port>] for checks like these.
Checking of LDAP and HTTPS by Windows agent is currently not supported.
Note that the telnet check looks for a prompt (‘:’ at the end).
Old naming: check_service_perf[*]
Note that before Zabbix 1.8.3 version service.ntp should be used instead of ntp.
https and telnet services are supported since Zabbix 2.0.
net.udp.listen[port]
Checks if this UDP port is in LISTEN state. 0 – it is not
1 – it is in LISTEN state
port – UDP port number Example:
net.udp.listen[68]

On Linux supported since Zabbix agent version 1.8.4

proc.mem[<name>,<user>,<mode>,<cmdline>]
Memory used by process running under some user. Memory used by process (in bytes). name – process name (default is “all processes”)
user – user name (default is “all users”)
mode – possible values:
avg, max, min, sum (default)
cmdline – filter by command line (it is a regular expression)
Example keys:
proc.mem[,root] – memory used by all processes running under the “root” user
proc.mem[zabbix_server,zabbix] – memory used by all zabbix_server processes running under the zabbix user
proc.mem[,oracle,max,oracleZABBIX] – memory used by the most memory-hungry process running under oracle having oracleZABBIX in its command line
proc.num[<name>,<user>,<state>,<cmdline>]
The number of processes having certain state running under some user. Number of processes. name – process name (default is “all processes”)
user – user name (default is “all users”)
state – possible values: all (default), run, sleep, zomb
cmdline – filter by command line (it is a regular expression)
Example keys:
proc.num[,mysql] – number of processes running under the mysql user
proc.num[apache2,www-data] – number of apache2 processes running under the www-data user
proc.num[,oracle,sleep,oracleZABBIX] – number of processes in sleep state running under oracle having oracleZABBIX in its command line
On Windows, only the name and user parameters are supported.
sensor[device,sensor,<mode>]
Hardware sensor reading. device – device name
sensor – sensor name
mode – possible values:
avg, max, min (if this parameter is omitted, device and sensor are treated verbatim).
On Linux 2.4, reads /proc/sys/dev/sensors.
Example key:
sensor[w83781d-i2c-0-2d,temp1]
Prior to Zabbix 1.8.4, the sensor[temp1] format was used.

On Linux 2.6+, reads /sys/class/hwmon.

See a more detailed description of sensor item on Linux.

On OpenBSD, reads the hw.sensors MIB.
Example keys:
sensor[cpu0,temp0] – one temperature of one CPU
sensor[cpu[0-2]$,temp,avg] – average temperature of the first three CPU’s
Supported on OpenBSD since Zabbix 1.8.4.

system.boottime
Timestamp of system boot. Integer. A UNIX timestamp (date and time, down to a second) returned.
system.cpu.intr
Device interrupts. Integer.
system.cpu.load[<cpu>,<mode>]
CPU load. Processor load.
Float.
cpu – possible values:
all (default), percpu (total load divided by online CPU count)
mode – possible values:
avg1 (one-minute average, default), avg5 (5-minute average), avg15 (an average within 15 minutes)
Example key:
system.cpu.load[,avg5]

Old naming: system.cpu.loadX
Parameter percpu is supported since Zabbix 2.0.0.

system.cpu.num[<type>]
Number of CPUs. Number of available processors. type – possible values:
online (default), max
Example key:
system.cpu.num
system.cpu.switches
Context switches. Switches count. Old naming: system[switches]
system.cpu.util[<cpu>,<type>,<mode>]
CPU(s) utilisation. Processor utilisation in percent. cpu – CPU number (default is all CPUs)
type – possible values:
idle, nice, user (default), system (default for Windows), iowait, interrupt, softirq, steal
mode – possible values:
avg1 (one-minute average, default), avg5 (5-minute average), avg15 (an average within 15 minutes)
Example key:
system.cpu.util[0,user,avg5]

Old naming: system.cpu.idleX, system.cpu.niceX, system.cpu.systemX, system.cpu.userX

system.hostname[<type>]
Returns host name. String value type (Windows only, must not be used on other systems) – possible values: netbios (default) or host The value is acquired by either GetComputerName() (for netbios) or gethostname() (for host) functions on Windows and by “hostname” command on other systems.
The type parameter for this item is supported since 1.8.6 version.

Examples of returned values:
on Linux:
system.hostname → linux-w7x1
system.hostname → www.zabbix.com
on Windows:
system.hostname → WIN-SERV2008-I6
system.hostname[host] → Win-Serv2008-I6LonG

See also a more detailed description.

system.hw.chassis[<info>]
Returns chassis info String value info – one of full (default), model, serial, type or vendor Example: system.hw.chassis[full]
Hewlett-Packard HP Pro 3010 Small Form Factor PC CZXXXXXXXX Desktop]

Root permissions are required because the value is acquired by reading from memory.

Supported since Zabbix agent version 2.0.

system.hw.cpu[<cpu>,<info>]
Returns CPU info String or numeric value cpu – CPU number or all (default)
info – one of full (default), curfreq, maxfreq, model or vendor
Example: system.hw.cpu[0,vendor]
AuthenticAMD

Gathers info from /proc/cpuinfo and /sys/devices/system/cpu/[cpunum]/cpufreq/cpuinfo_max_freq.
If a CPU number and curfreq or maxfreq is specified, a numeric value is returned (Hz).

Supported since Zabbix agent version 2.0.

system.hw.devices[<type>]
Lists PCI or USB devices Text value type – pci (default) or usb Example: system.hw.devices[pci]
00:00.0 Host bridge: Advanced Micro Devices [AMD] RS780 Host Bridge
[..]

Returns the output of either lspci or lsusb utility (executed without any parameters)

Supported since Zabbix agent version 2.0.

system.hw.macaddr[<interface>,<format>]
Lists MAC addresses String value interface – all (default) or a regular expression
format – full (default) or short
Example: system.hw.macaddr[«eth0$»,full]
[eth0] 00:11:22:33:44:55

Lists MAC adresses of the interfaces whose names match the given interface regexp (“all” lists for all interfaces).
If format is specified as short, interface names and identical MAC addresses are not listed.

Supported since Zabbix agent version 2.0.

system.localtime[<type>]
System time. Integer or string value. utc – (default) the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds.
local – the time in the ‘yyyy-mm-dd,hh:mm:ss.nnn,+hh:mm’ format
Parameters for this item supported from version 2.0.
system.run[command,<mode>]
Run specified command on the host. Text result of the command. command – command for execution
mode – one of wait (default, wait end of execution), nowait (do not wait)
Up to 512KB of data can be returned, including trailing whitespace that is truncated.
To be processed correctly, the output of the command must be text.
Example:
system.run[ls -l /] – detailed file list of root directory.
Note: To enable this functionality, agent configuration file must have EnableRemoteCommands=1 option.
system.stat[resource,<type>]
Virtual memory statistics Numeric value ent – number of processor units this partition is entitled to receive (float)
kthr,<type> – information about kernel thread states:
r – average number of runnable kernel threads (float)
b – average number of kernel threads placed in the Virtual Memory Manager wait queue (float)
memory,<type> – information about the usage of virtual and real memory:
avm – active virtual pages (integer)
fre – size of the free list (integer)
page,<type> – information about page faults and paging activity:
fi – file page-ins per second (float)
fo – file page-outs per second (float)
pi – pages paged in from paging space (float)
po – pages paged out to paging space (float)
fr – pages freed (page replacement) (float)
sr – pages scanned by page-replacement algorithm (float)
faults,<type> – trap and interrupt rate:
in – device interrupts (float)
sy – system calls (float)
cs – kernel thread context switches (float)
cpu,<type> – breakdown of percentage usage of processor time:
us – user time (float)
sy – system time (float)
id – idle time (float)
wa – idle time during which the system had outstanding disk/NFS I/O request(s) (float)
pc – number of physical processors consumed (float)
ec – the percentage of entitled capacity consumed (float)
lbusy – indicates the percentage of logical processor(s) utilization that occurred while executing at the user and system level (float)
app – indicates the available physical processors in the shared pool (float)
disk,<type> – disk statistics:
bps – indicates the amount of data transferred (read or written) to the drive in bytes per second (integer)
tps – indicates the number of transfers per second that were issued to the physical disk/tape (float)
This item is supported starting from version 1.8.1.
system.sw.arch
Returns software architecture String value Example: system.sw.arch
i686

Info is acquired from uname() function.

Supported since Zabbix agent version 2.0.

system.sw.os[<info>]
Returns OS info String value info – one of full (default), short or name Example: system.sw.os[short]
Ubuntu 2.6.35-28.50-generic 2.6.35.11

Info is acquired from (note that not all files are present in all distributions):
[full] – /proc/version
[short] – /proc/version_signature
[name] – /etc/issue.net

Supported since Zabbix agent version 2.0.

system.sw.packages[<package>,<manager>,<format>]
Lists installed packages Text value package – all (default) or a regular expression
manager – all (default) or a package manager
format – full (default) or short
Example: system.sw.packages[mini,dpkg,short]
python-minimal, python2.6-minimal, ubuntu-minimal

Lists (alphabetically) installed packages whose names match the given package regexp (“all” lists them all).

Supported packages managers:
manager (executed command)
dpkg (dpkg –get-selections)
pkgtool (ls /var/log/packages)
rpm (rpm -qa)
pacman (pacman -Q)

If format is specified as full, packages are grouped by package managers (each manager on a seperate line beginning with it’s name in square brackets).
If format is specified as short, packages are not grouped and are listed on a single line.

Supported since Zabbix agent version 2.0.

system.swap.in[<device>,<type>]
Swap in (from device into memory) statistics. Numeric value device – device used for swapping (default is all)
type – possible values:
count (number of swapins), sectors (sectors swapped in), pages (pages swapped in). See supported by platform for details on defaults.
Example key:
system.swap.in[,pages]

The source of this information is:
Linux 2.4:
/proc/swaps, /proc/partitions, /proc/stat
Linux 2.6:
/proc/swaps, /proc/diskstats, /proc/vmstat

system.swap.out[<device>,<type>]
Swap out (from memory onto device) statistics. Numeric value device – device used for swapping (default is all)
type – possible values:
count (number of swapouts), sectors (sectors swapped out), pages (pages swapped out). See supported by platform for details on defaults.
Example key:
system.swap.out[,pages]

The source of this information is:
Linux 2.4:
/proc/swaps, /proc/partitions, /proc/stat
Linux 2.6:
/proc/swaps, /proc/diskstats, /proc/vmstat

system.swap.size[<device>,<type>]
Swap space size. Number of bytes or percentage. device – device used for swapping (default is all)
type – possible values:
free (free swap space, default), pfree (free swap space, in percent), pused (used swap space, in percent), total (total swap space), used (used swap space)
Example key:
system.swap.size[,pfree] – free swap space percentage

Old naming: system.swap.free, system.swap.total

system.uname
Returns detailed host information. String value Example of returned value:
FreeBSD localhost 4.2-RELEASE FreeBSD 4.2-RELEASE #0: Mon Nov i386

Since Zabbix 2.2.0, the value for this item is obtained by using the uname() system call, whereas previously it was obtained by invoking “uname -a” on Unix systems. Hence, the value of this item might differ from the output of “uname -a” and does not include additional information that “uname -a” prints based on other sources.

system.uptime
System uptime in seconds. Number of seconds. In item configuration, use s or uptime units to get readable values.
system.users.num
Number of users logged in. Number of users. who command is used on the agent side to obtain the value.
vfs.dev.read[<device>,<type>,<mode>]
Disk read statistics. Integer if type is in: sectors, operations, bytes

Float if type is in: sps, ops, bps

device – disk device (default is “all”1)
type – possible values:
sectors, operations, bytes, sps, ops, bps (must be specified, since defaults differ under various OSes).
sps, ops, bps stand for: sectors, operations, bytes per second, respectively
mode – possible values:
avg1 (one-minute average, default), avg5 (five-minute average), avg15 (15-minute average).
Note: The third parameter is supported only if the type is in: sps, ops, bps.
Default values of ‘type’ parameter for different OSes:
FreeBSD – bps
Linux – sps
OpenBSD – operations
Solaris – bytes

Example key: vfs.dev.read[,operations]
Old naming: io[*]

Usage of the type parameters ops, bps and sps on supported platforms used to be limited to 8 devices (7 individual devices and one “all”). Starting with Zabbix 2.0.1 this limit has been increased to 1024 (1023 individual devices and one for “all”).

Supports LVM since Zabbix 1.8.6.

Until Zabbix 1.8.6, only relative device names may be used (for example, sda), since 1.8.6 an optional /dev/ prefix may be used (for example, /dev/sda)

vfs.dev.write[<device>,<type>,<mode>]
Disk write statistics. Integer if type is in: sectors, operations, bytes

Float if type is in: sps, ops, bps

device – disk device (default is “all”1)
type – one of sectors, operations, bytes, sps, ops, bps (must specify exactly which parameter to use, since defaults are different under various OSes).
sps, ops, bps means: sectors, operations, bytes per second respectively
mode – one of avg1 (default),avg5 (average within 5 minutes), avg15.
Note: The third parameter is supported only if the type is in: sps, ops, bps.
Default values of ‘type’ parameter for different OSes:
FreeBSD – bps
Linux – sps
OpenBSD – operations
Solaris – bytes

Example: vfs.dev.write[,operations] Old naming: io[*]

The type parameters ops, bps and sps on supported platforms used to be limited to 8 devices (7 individual devices and one “all”). Starting with Zabbix 2.0.1 this limit has been increased to 1024 (1023 individual devices and one for “all”).

Supports LVM since Zabbix 1.8.6.

Until Zabbix 1.8.6, only relative device names may be used (for example, sda), since 1.8.6 optional /dev/ prefix may be used (for example, /dev/sda)

vfs.file.cksum[file]
Calculate file checksum File checksum, calculated by algorithm used by UNIX cksum. file – full path to file Example of returned value:
1938292000

Example:
vfs.file.cksum[/etc/passwd]

Old naming: cksum

The file size limit depends on large file support.

vfs.file.contents[file,<encoding>]
Get file contents Contents of a file or empty string if it is empty or it contains only LF/CR characters. file – full path to file Example:
vfs.file.contents[/etc/passwd]

This item is limited to files no larger than 64 Kbytes.

Supported since Zabbix agent version 2.0.

vfs.file.exists[file]
Check if file exists 1 – regular file or a link (symbolic or hard) to regular file exists.

0 – otherwise

file – full path to file Example: vfs.file.exists[/tmp/application.pid]

The return value depends on what S_ISREG POSIX macro returns.

The file size limit depends on large file support.

vfs.file.md5sum[file]
File’s MD5 checksum MD5 hash of the file. file – full path to file Example of returned value:
b5052decb577e0fffd622d6ddc017e82

Example:
vfs.file.md5sum[/usr/local/etc/zabbix_agentd.conf]

The file size limit (64 MB) for this item was removed in version 1.8.6.

The file size limit depends on large file support.

vfs.file.regexp[file,regexp,<encoding>,<start line>,<end line>,<output>]
Find string in a file. The line containing the matched string, or as specified by the optional <output> parameter.
An empty string if no line matched the expression.
file – full path to file
regexp – GNU regular expression
encoding – Code Page identifier
start line – the number of first line to search. Defaults to the first line of file.
end line – the number of last line to search. Defaults to the last line of file.
output – an optional output formatting template. The \0 escape sequence is replaced with the matched text while an \N (where N=1…9) escape sequence is replaced with Nth matched group (or an empty string if the N exceeds the number of captured groups).
If <output> is left empty – the whole line containing the matched text is returned.
The start line, end line and output parameters are supported from version 2.2.
Only the first matching line is returned.
Examples:
vfs.file.regexp[/etc/passwd,zabbix]
vfs.file.regexp[/path/to/some/file,”([0-9]+)$”,,3,5,\1]
vfs.file.regexp[/etc/passwd,^zabbix:.:([0-9]+),,,,\1] – getting the ID of user zabbix
vfs.file.regmatch[file,regexp,<encoding>,<start line>,<end line>]
Find string in a file 0 – expression not found
1 – found
file – full path to file
regexp – GNU regular expression
encoding – Code Page identifier
start line – the number of first line to search. Defaults to the first line of file.
end line – the number of last line to search. Defaults to the last line of file.
The start line and end line parameters are supported from version 2.2.
Example: vfs.file.regmatch[/var/log/app.log,error]
vfs.file.size[file]
File size Size in bytes. file – full path to file File must have read permissions for user zabbix

Example: vfs.file.size[/var/log/syslog]

The file size limit depends on large file support.

vfs.file.time[file,<mode>]
File time information. Unix timestamp. file – full path to the file
mode – one of modify (default, modification time), access – last access time, change – last change time
Example: vfs.file.time[/etc/passwd,modify]

The file size limit depends on large file support.

vfs.fs.discovery
List of mounted filesystems. Used for low-level discovery. JSON object Supported since Zabbix agent version 2.0.
vfs.fs.inode[fs,<mode>]
Number of inodes Numeric value fs – filesystem
mode – one of total (default), free, used, pfree (free, percentage), pused (used, percentage)
Example: vfs.fs.inode[/,pfree] Old naming: vfs.fs.inode.free[*], vfs.fs.inode.pfree[*], vfs.fs.inode.total[*]
vfs.fs.size[fs,<mode>]
Disk space Disk space in bytes fs – filesystem
mode – one of total (default), free, used, pfree (free, percentage), pused (used, percentage)
In case of a mounted volume, disk space for local file system is returned. Example: vfs.fs.size[/tmp,free] Old naming: vfs.fs.free[*], vfs.fs.total[*], vfs.fs.used[*], vfs.fs.pfree[*], vfs.fs.pused[*]
vm.memory.size[<mode>]
Memory size Memory size in bytes or in percentage from total mode – one of total (default), active, anon, buffers, cached, exec, file, free, inactive, pinned, shared, wired, used, pused, available, pavailable Old naming: vm.memory.buffers, vm.memory.cached, vm.memory.free, vm.memory.shared, vm.memory.total

Item vm.memory.size[] accepts three categories of parameters.

First category consists of total – total amount of memory.

Second category contains platform-specific memory types: active, anon, buffers, cached, exec, file, free, inactive, pinned, shared, wired.

Third category are user-level estimates on how much memory is used and available: used, pused, available, pavailable.

See a more detailed description of vm.memory.size parameters.

web.page.get[host,<path>,<port>]
Get content of web page Web page source as text host – hostname
path – path to HTML document (default is /)
port – port number (default is 80)
Returns empty string on fail. Example:
web.page.get[www.zabbix.com,index.php,80]
web.page.perf[host,<path>,<port>]
Get timing of loading full web page Time in seconds host – hostname
path – path to HTML document (default is /)
port – port number (default is 80)
Returns 0 on fail. Example:
web.page.perf[www.zabbix.com,index.php,80]
web.page.regexp[host,<path>,<port>,<regexp>,<length>,<output>]
Find string on a web page. The matched string, or as specified by the optional <output> parameter.
An empty string if no match was found.
host – hostname
path – path to HTML document (default is /)
port – port number (default is 80)
regexp – GNU regular expression
length – maximum number of characters to return
output – an optional output formatting template. The \0 escape sequence is replaced with the matched text while an \N (where N=1…9) escape sequence is replaced with Nth matched group (or an empty string if the N exceeds the number of captured groups).
If <output> is left empty – the whole line containing the matched text is returned.
The output parameter is supported from version 2.2.
Returns empty string on fail (no match). Example:
web.page.regexp[www.zabbix.com,index.php,80,OK,2]

A Linux-specific note. Zabbix agent must have read-only access to filesystem /proc. Kernel patches from www.grsecurity.org limit access rights of non-privileged users.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Поиск нового устройства windows 10
  • Где найти панель управления nvidia на windows 11
  • Displayfusion pro windows 10
  • Как сделать образ системы windows 10 для восстановления на другом диске
  • Windows hello for business это