Шаблон Например возьмем такие данные:
через Zabbix agent проверка копий
Проверка локально: /mnt/Nas/Proxmox/dump/
Пускай виртуальные машины будут например с 101 по 106
VM101ВКС vzdump-qemu-101-2024_07_10-11_10_56.vma.lzo
VM102Тест vzdump-qemu-102-2024_07_16-12_58_06.vma.lzo
VM103Тикет vzdump-qemu-103-2024_07_10-10_41_06.vma.lzo
VM104cloud vzdump-qemu-104-2024_07_18-13_36_55.vma.lzo
VM105office vzdump-qemu-105-2024_07_15-12_30_15.vma.lzo
каждую неделю в среду в 7утра проверка до 7:10
VM106WEB vzdump-qemu-106-2024_08_14-01_00_03.vma.lzo
В макросе шаблона прописываем путь {$BAKVMDIR} /mnt/Nas/Proxmox/dump/
Группы элементов данных
Проверка копий VM
Элементы данных
Если правило обнаружения не обнаружило файл то и элемента с триггером не будет и мы не получим ошибку, по этому обычный элемент может так же проверят содержимое папки в дополнение к обнаружению, но можно пользоваться одним этим элементом для проверки файлов.
Запрос содержимого папки /mnt/Nas/Proxmox/dump/ Триггеры 7 system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"] 0 90d Zabbix агент Проверка копий VM Активировано
system.run[ls -aF "/mnt/Nas/Proxmox/dump/"|grep -av "/"]
Запросим содержимое папки, исключим файлы log
предобработкой выберем только свежие файлы для каждой виртуальной машины если их несколько
пример
vzdump-qemu-102-2024_07_10-11_10_56.vma.lzo*
vzdump-qemu-105-2024_08_07-01_00_03.vma.lzo*
vzdump-qemu-105-2024_08_08-01_00_02.vma.lzo*
Предобработка
Показать
Код: Выделить всё
// Разбиваем входные данные на строки
var lines = value.split('\n');
// Объект для хранения самой свежей копии каждой VM
var latestCopies = {};
// Проходим по каждой строке в массиве
for (var i = 0; i < lines.length; i++) {
// Очищаем строку от лишних пробелов
var line = lines[i].trim();
// Пропускаем пустые строки
if (line === '') continue;
// Разбиваем строку на части по символу "-"
var parts = line.split('-');
// VM ID находится на третьем месте (индекс 2)
var vmId = parts[2];
// Объединяем дату и время из частей строки для создания временной метки
var timestamp = parts[3] + parts[4];
// Если для текущей VM еще нет записи или текущая копия новее, обновляем запись
if (!latestCopies[vmId] || latestCopies[vmId].timestamp < timestamp) {
latestCopies[vmId] = { line: line, timestamp: timestamp };
}
}
// Создаем массив для хранения финальных строк с самыми свежими копиями
var result = [];
// Проходим по объекту latestCopies и добавляем строки в результат
for (var key in latestCopies) {
result.push(latestCopies[key].line);
}
// Возвращаем результат, объединяя строки с переносами
return result.join('\n');
Триггеры
Средняя Копия VM106WEB Отсутствует {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-106)}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(25h)}=1 Активировано
Средняя Копия VM105office Отсутствует {$WEEK_DAY}=5 and ({check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-105-{$DATE_YYYY}_{$DATE_MM}_{$DATE_DD})}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(172h)}=1) Активировано
Средняя Копия VM105office Отсутствует {$WEEK_DAY}=3 and ({check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-105-{$DATE_YYYY}_{$DATE_MM}_{$DATE_DD})}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(172h)}=1) Активировано
Средняя Копия VM104cloud Отсутствует {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-104)}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(25h)}=1 Активировано
Средняя Копия VM103Тикет Отсутствует {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-103)}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(25h)}=1 Активировано
Средняя Копия VM102Тест Отсутствует {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-102)}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(25h)}=1 Активировано
Средняя Копия VM101ВКС Отсутствует {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].iregexp(vzdump-qemu-101)}=0 or {check-VM-Backup:system.run[ls -aF "{$BAKVMDIR}"|grep -avE "/|\.log"].nodata(25h)}=1 Активировано
Правила обнаружения
Запрос содержимого папки /mnt/Nas/Proxmox/dump/: Обнаружение копий VM Прототипы элементов данных 4 Прототипы триггеров 1 Прототипы графиков Прототипы узлов сети vm-discover Зависимый элемент данных Активировано
Запрос содержимого папки /mnt/Nas/Proxmox/dump/: Обнаружение копий VM Прототипы элементов данных 4 Прототипы триггеров 2 Прототипы графиков Прототипы узлов сети vm-discovery Зависимый элемент данных Активировано
Обнаружение копий VM
только 125 и 105 в фильтре обнаружения
Фильтры
{#VMFILES} совпадает (vzdump-qemu-125.*|vzdump-qemu-105.*)
Предобработка
Показать
Код: Выделить всё
// Разбиваем входные данные на строки
var lines = value.split('\n');
// Массив для хранения объектов JSON
var jsonArray = [];
// Проходим по каждой строке в массиве
for (var i = 0; i < lines.length; i++) {
// Очищаем строку от лишних пробелов
var line = lines[i].trim();
// Пропускаем пустые строки
if (line === '') continue;
// Убираем символ '*' в конце строки, если он присутствует
if (line.endsWith('*')) {
line = line.slice(0, -1);
}
// Добавляем объект в массив JSON
jsonArray.push({ "{#VMFILES}": line });
}
// Преобразуем массив в формат JSON и возвращаем
return JSON.stringify(jsonArray, null, 4);
Наличие файла {#VMFILES} vfs.file.exists["{$BAKVMDIR}{#VMFILES}"] 0 90d 90d Zabbix агент Проверка копий VM Да
Размер файла {#VMFILES} vfs.file.size["{$BAKVMDIR}{#VMFILES}"] 0 90d 90d Zabbix агент Проверка копий VM Да
Время изменения свойств файла {#VMFILES} vfs.file.time["{$BAKVMDIR}{#VMFILES}",change] 0 90d 90d Zabbix агент Проверка копий VM Да
Время изменения файла {#VMFILES} vfs.file.time["{$BAKVMDIR}{#VMFILES}",modify] 0 90d 90d Zabbix агент Проверка копий VM Да
Прототипы триггеров
Средняя Копия {#VMFILES} Отсутствует или старая ({$WEEK_DAY}=3 or {$WEEK_DAY}=5) and {$TIME_HH}>=08 and {$TIME_MM}>=10 and ({check-VM-Backup:vfs.file.exists["{$BAKVMDIR}{#VMFILES}"].last()}=0 or {check-VM-Backup:vfs.file.time["{$BAKVMDIR}{#VMFILES}",modify].fuzzytime(197h)}=0) Да
Обнаружение копий VM
исключены 125 и 105 в фильтре обнаружения
Фильтры
{#VMFILE} не соответствует (vzdump-qemu-125.*|vzdump-qemu-105.*)
Предобработка
Показать
Код: Выделить всё
// Разбиваем входные данные на строки
var lines = value.split('\n');
// Массив для хранения объектов JSON
var jsonArray = [];
// Проходим по каждой строке в массиве
for (var i = 0; i < lines.length; i++) {
// Очищаем строку от лишних пробелов
var line = lines[i].trim();
// Пропускаем пустые строки
if (line === '') continue;
// Убираем символ '*' в конце строки, если он присутствует
if (line.endsWith('*')) {
line = line.slice(0, -1);
}
// Добавляем объект в массив JSON
jsonArray.push({ "{#VMFILE}": line });
}
// Преобразуем массив в формат JSON и возвращаем
return JSON.stringify(jsonArray, null, 4);
Прототипы элементов данных
Наличие файла {#VMFILE} vfs.file.exists["{$BAKVMDIR}{#VMFILE}"] 0 90d 90d Zabbix агент Проверка копий VM Да
Размер файла {#VMFILE} vfs.file.size["{$BAKVMDIR}{#VMFILE}"] 0 90d 90d Zabbix агент Проверка копий VM Да
Время изменения свойств файла {#VMFILE} vfs.file.time["{$BAKVMDIR}{#VMFILE}",change] 0 90d 90d Zabbix агент Проверка копий VM Да
Время изменения файла {#VMFILE} vfs.file.time["{$BAKVMDIR}{#VMFILE}",modify] 0 90d 90d Zabbix агент Проверка копий VM Да
Прототипы триггеров
Средняя Копия {#VMFILE} Отсутствует {check-VM-Backup:vfs.file.exists["{$BAKVMDIR}{#VMFILE}"].max(27h)}=0 Да
Информационная Старая копия {#VMFILE} {check-VM-Backup:vfs.file.time["{$BAKVMDIR}{#VMFILE}",modify].fuzzytime(92d)}=0 Да