Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Шаблоны заббикс мониторинг связанный с файлами и директориями
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Артём Мамзиков »

Шаблон с Zabbix 4.2
Проверка доступна на Linux и Windows (на узле активируется нужное правило обнаружения для той или иной ОС)





НОВАЯ ВЕРСИЯ ШАБЛОНА Обновлённая версия Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Скачать Шаблон + скрипт
size-dir-lld.zip
size-dir-lld.zip
(20.68 КБ) 97 скачиваний
Проверка только папок или папки (файлы не проверяются в данном случае если необходимо проверять еще файлы или только файлы нужно переделать скрипт запрос и ключ прототипа элемента)

Для тех у кого При запросе Элемента данных Zabbix агент и Zabbix активный агент - у нас ограничение по времени ответа, т.е. ответ должен успеть придти за указанное время в файле конфигурации сервера и агента, максимальное время 30 секунд! Не успевает придти ответ слишком долгий запрос.
Читаем тут 11 собщение для Linux через скрипт и тут 12 сообщение для Windows через скрипт
Скачать Шаблон + скрипт
size-dir-lld20.05.2021.zip
size-dir-lld20.05.2021.zip
(59.54 КБ) 72 скачивания
Изменения в шаблоне и скрипте V1.0 до V1.3
Добавлена возможность проверять несколько папок на одном хосте прописав в макросе путь через точку с запятой;
Но при этом скрипт некорректно работал на Windows из-за слешей windows в пути \ так как считал спец символами их, а путь нужно передавать сразу готовый в отличии от v1.0 где путь поставлялся из макроса и найденная папка. Слеши прописываются обратные / в пути но проверка проходит (возможно как то сделать в элементе предобработку регулярку для изменения в пути слешей / на \)
Сделан шаблон и скрипт для работы с портом.

Алгоритм: после того как добавили шаблон к узлу в Макросах узла прописываем переменную
Например Макрос {$PATH.DIR} Значение /var/www/owncloud/data пишем путь без кавычек экранировать не нужно, закрывающий слеш так же не нужен он уже есть в скрипте!
по данному пути у нас хранятся папки пользователей будем проверять их размер
Пример нескольких путей Макрос {$PATH.DIR} Значение /var/www/owncloud/data;/root
На Windows Макрос {$PATH.DIR} Значение C:\zabbix;C:\Users;\\IP\Папка
Discovery-size-dir.jpg
Discovery-size-dir.jpg
Версия с Портом дополнительно в узле нужно прописать порт
Discovery-size-dir-Port.jpg
Discovery-size-dir-Port.jpg
Пример Макросов на узле
Пример макросов.jpg
Пример макросов.jpg

Более подробно о работе Команда DIR для Windows
О vfs.dir.size директория,<regex_вкл>,<regex_искл>,<режим>,<макс_глубина>
Показать
vfs.dir.size[директория,<regex_вкл>,<regex_искл>,<режим>,<макс_глубина>]

Размер директории (в байтах). Целое число директория - абсолютный путь к директории
regex_вкл - регулярное выражение описывающее включаемые файл, директорию и символическую ссылку (если пусто, включаются все файлы, директории и символические ссылки; пустая строка является значением по умолчанию)
regex_искл - регулярное вырыжение описывающее исключаемые файл, директорию и символическую ссылку (если пусто, ничего не исключать; пустая строка является значением по умолчанию)
режим - возможные значения:
apparent (по умолчанию) - получение реальных размеров файлов вместо использования диска (работает как du -sb директория), disk - получение использования диска (работает как du -s -B1 директория). В отличии от du команды, элемент данных vfs.dir.size принимает во внимание скрытые файлы при вычислении размера директории (работает как du -sb .[^.]* * в пределах директории).
макс_глубина - максимальная глубина сканируемых поддиректорий. -1 (по умолчанию) - без ограничения, 0 - без проверки нижестоящих поддиректорий.
Подсчитываются только те директории к которым zabbix пользователь имеет по крайней мере права чтения.

В Windows любая символическая ссылка пропускается и жесткие ссылки принимаются во внимание только один раз.

При наличии больших директорий или медленных дисков этот элемент данных может превысить время ожидания из-за настройки Timeout в файлах конфигурации агента и сервера/прокси. При необходимости увеличьте эти значения времени ожидания.

Примеры:
⇒ vfs.dir.size[/tmp,log] - вычисление размеров всех файлов в /tmp, которые содержат в своём имени 'log'
⇒ vfs.dir.size[/tmp,log,^.+\.old$] - вычисление размеров всех файлов в /tmp, которые содержат в своём имени 'log', исключая файлы содержащие в своем имени '.old'

Ограничение размера файлов зависит от наличия поддержки больших файлов.

Поддерживается начиная с Zabbix 3.4.0.

Другие варианты ключей
vfs.dev.read[<устройство>,<тип>,<режим>]
vfs.dev.write[<устройство>,<тип>,<режим>]
vfs.dir.count[директория,<regex_вкл>,<regex_искл>,<типы_вкл>,<типы_искл>,<макс_глубина>,<мин_размер>,<макс_размер>,<мин_возраст>,<макс_возраст>]
vfs.dir.size[директория,<regex_вкл>,<regex_искл>,<режим>,<макс_глубина>]
vfs.file.cksum[файл]
vfs.file.contents[файл,<кодировка>]
vfs.file.exists[файл]
vfs.file.md5sum[файл]
vfs.file.regexp[файл,регулярное выражение,<кодировка>,<начальная строка>,<конечная строка>,<вывод>]
vfs.file.regmatch[файл,регулярное выражение,<кодировка>,<начальная строка>,<конечная строка>]
vfs.file.size[файл]
vfs.file.time[файл,<режим>]
vfs.fs.discovery
vfs.fs.inode[fs,<режим>]
vfs.fs.size[fs,<режим>]
Более подробно об этих ключах читаем тут
Установка
На Заббикс сервер копируем скрипт size-dir.sh и size-dir-port.sh в папку /usr/local/share/zabbix/externalscripts
Даем права на выполнение скрипта chmod 777 /usr/local/share/zabbix/externalscripts/size-dir.sh
Даем права на выполнение скрипта chmod 777 /usr/local/share/zabbix/externalscripts/size-dir-port.sh
Делаем импорт Шаблона "Обнаружение папок и запрос их размера" и "Обнаружение папок и запрос их размера с Портом"
Цепляем шаблон к узлу
Прописываем путь где будем проверять, в Макрос Узла
Если вариант с портом в макросе порта в узле прописываем порт
Активируем нужное авто обнаружение linux или Windows в узле (для быстроты можно отметить галкой и нажать проверить сейчас)
Проверить на Windows в cmd кодировку командой chcp и в зависимости от кодировки активировать правило cp866 или cp1251 для поддержки Русского наименования папок!
После того как элементы создадутся будет запрошен их размер
Если размер превышает заданные в триггер он сработает
Так же если нет данных элемента более 24 часов Триггер сработает
Команды проверки
Показать
Для Widows
Проверить на Windows в cmd кодировку командой chcp
Проверить на самом хосте команду
Локально cmd dir /A:D /B "C:\Users"
По сети cmd dir /A:D /B "\\192.168.ххх.ххх\папка" либо имя пк cmd dir /A:D /B "\\Имя-Пк\папка"

Хотя в самом скрипте есть " "при передаче в скрипт, теряется слеш \ Либо экранируем или пишем по 2шт если сеть то 3 \\\
Экранируем кавычки \" так же если нужен \ пишем их несколько \\\
discoverywin - кодировка cp866
discoverywincp - кодировка cp1251
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin 'C:\Users' - одинарные кавычки
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin "C:\Users" - двойные желательно так проверять
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin C:\\Users - 2 слеша пака с именем с пробелом уже не отработает в таком варианте
Несколько папок через точку с запятой
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin "C:\Users;C:\zabbix"

Запрос по сети (так же если нужно через точку с запятой несколько путей, вместо IP можно использовать имя-пк)
zabbix_get -s IP -k system.run["dir /B C:\\Users"]
zabbix_get -s IP -k system.run["dir /A:D /B C:\\Users"]
./zabbix_get -s 192.168.ххх.ххх -k system.run["dir /A:D /B \"\\\192.168.ххх.ххх\папка\""]
./size-dir.sh 192.168.ххх.ххх discoverywin "\\\192.168.ххх.ххх\папка"

С портом все аналогично выбирается скрипт для работы с портом и вторая входная это порт один пример
./size-dir-port.sh 192.168.ххх.ххх 10050 discoverywin "\\\192.168.ххх.ххх\docs"

Проверить работу ключа получить размер папки
Так же проверить команду запроса размера папки должен прилететь размер
zabbix_get -s 192.168.XXX.XXX -k 'vfs.dir.size[C:\Users\Имя-Папки]'

Для путей Linux нет проблем так как используется обратный слеш / экранировать не нужно
Для Linux
Команда bash
ls -F путь-на-папку|grep -E "*/" Показать что лежит по данному пути, найти и вывести все что заканчивается на / - т.е. это будет папка
ls -F "root"|grep -E "*/" Пример для папки root

zabbix_get -s IP -k system.run["ls -F /var/www/owncloud/data|grep -E \"*/\""]

Скриптом
Linux
./size-dir.sh IP discovery /var/www/owncloud/data
Если есть пробелы в папке экранируем
./size-dir.sh IP discovery "/var/www/own cloud/data"
Скрипт size-dir.sh
size-dir.sh
Показать
#!/bin/bash
#2020/12/15 v1.3
# Автор Мамзиков Артём Андреевич Описание по скрипту
# Получение списка папок в определенной директории и мониторинг их размера

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $3)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $1 -k system.run["ls -F "${puti}"|grep -E \"*/\""]`
# Запрашиваем папки в owncloud/data циклом
for dirp in $get
do
JSON=$JSON"$SEP\n{\"{#DIRSIZELINUX}\":\""${puti}"/$dirp\"}"
SEP=", "
done
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

if [[ $2 = "discoverywin" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $3)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $1 -k system.run["dir /A:D /B \""${puti}"\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем папки циклом
#for dirp in "${obr}"
# Если корректно не отображается русский перекодируем из cp866 в utf8 ,кому нужно можно так же из cp1251 в utf8
for dirp in $(echo "${obr}"|iconv -f cp866 -t utf8)
do
# Ввиду сложности передачи слешей windows, преобразуем в пути \ в обратные слеши /
#put=$(echo "${puti}"|sed 's/\\/\//g')
put="${puti//\\//}"
# Объединим все в один путь, в одну выходную переменную
JSON=$JSON"$SEP\n{\"{#DIRSIZEWIN}\":\""${put}"/$dirp\"}"
SEP=", "
done
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

if [[ $2 = "discoverywincp" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $3)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $1 -k system.run["dir /A:D /B \""${puti}"\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем папки циклом
#for dirp in "${obr}"
# Если корректно не отображается русский перекодируем из cp1251 в utf8
for dirp in $(echo "${obr}"|iconv -f cp1251 -t utf8)
do
# Ввиду сложности передачи слешей windows, преобразуем в пути \ в обратные слеши /
#put=$(echo "${puti}"|sed 's/\\/\//g')
put="${puti//\\//}"
# Объединим все в один путь, в одну выходную переменную
JSON=$JSON"$SEP\n{\"{#DIRSIZEWIN}\":\""${put}"/$dirp\"}"
SEP=", "
done
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

Скрипт size-dir-port.sh
size-dir-port.sh
Показать
#!/bin/bash
#2020/12/15 v1.3
# Автор Мамзиков Артём Андреевич Описание по скрипту
# Получение списка папок в определенной директории и мониторинг их размера

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $3 = "discovery" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $4)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $1 -p $2 -k system.run["ls -F "${puti}"|grep -E \"*/\""]`
# Запрашиваем папки в owncloud/data циклом
for dirp in $get
do
JSON=$JSON"$SEP\n{\"{#DIRSIZELINUX}\":\""${puti}"/$dirp\"}"
SEP=", "
done
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

if [[ $3 = "discoverywin" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $4)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $1 -p $2 -k system.run["dir /A:D /B \""${puti}"\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем папки циклом
#for dirp in "${obr}"
# Если корректно не отображается русский перекодируем из cp866 в utf8 ,кому нужно можно так же из cp1251 в utf8
for dirp in $(echo "${obr}"|iconv -f cp866 -t utf8)
do
# Ввиду сложности передачи слешей windows, преобразуем в пути \ в обратные слеши /
#put=$(echo "${puti}"|sed 's/\\/\//g')
put="${puti//\\//}"
# Объединим все в один путь, в одну выходную переменную
JSON=$JSON"$SEP\n{\"{#DIRSIZEWIN}\":\""${put}"/$dirp\"}"
SEP=", "
done
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

if [[ $3 = "discoverywincp" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $4)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $1 -p $2 -k system.run["dir /A:D /B \""${puti}"\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем папки циклом
#for dirp in "${obr}"
# Если корректно не отображается русский перекодируем из cp1251 в utf8
for dirp in $(echo "${obr}"|iconv -f cp1251 -t utf8)
do
# Ввиду сложности передачи слешей windows, преобразуем в пути \ в обратные слеши /
#put=$(echo "${puti}"|sed 's/\\/\//g')
put="${puti//\\//}"
# Объединим все в один путь, в одну выходную переменную
JSON=$JSON"$SEP\n{\"{#DIRSIZEWIN}\":\""${put}"/$dirp\"}"
SEP=", "
done
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi
Группы элементов данных Size-Dir

Авто обнаружение
Авто обнаружение Discovery-size-dir.jpg
Авто обнаружение Discovery-size-dir.jpg
Прототип элемента аналогично для windows только другой макрос
Прототип Элемента Discovery-size-dir.jpg
Прототип Элемента Discovery-size-dir.jpg
Прототип триггера аналогично для windows только другой макрос
Прототип Триггера Discovery-size-dir.jpg
Прототип Триггера Discovery-size-dir.jpg
Пример Windows size-dir.jpg
Пример Windows size-dir.jpg
Пример данные Windows size-dir.jpg
Пример данные Windows size-dir.jpg
О Версии скрипта V1.0
Показать
Алгоритм: после того как добавили шаблон к узлу в Макросах узла прописываем переменную
Например Макрос {$PATH.DIR} Значение /var/www/owncloud/data/ пишем путь без кавычек экранировать не нужно, завершающий слеш зависит от скрипта 2 версии!
по данному пути у нас хранятся папки пользователей будем проверять их размер
PATH.DIR-primer
PATH.DIR-primer
size-dir.sh
Показать
#!/bin/bash
#2020/09/24 v1.0
# Автор Мамзиков Артём Андреевич Описание по скрипту
# Получение списка папок в определенной дириктории и мониторинг их размера

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["ls -F $3|grep -E \"*/\""]`
# Запрашиваем папки циклом
for dirp in $get
do
JSON=$JSON"$SEP\n{\"{#DIRSIZELINUX}\":\"$dirp\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

if [[ $2 = "discoverywin" ]]
then
get=`zabbix_get -s $1 -k system.run["dir /A:D /B \"$3\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем папки циклом
#for dirp in "${obr}"
# Если корректно не отображается русский перекодируем из cp866 в utf8 ,кому нужно можно так же из cp1251 в utf8
for dirp in $(echo "${obr}"|iconv -f cp866 -t utf8)
do
JSON=$JSON"$SEP\n{\"{#DIRSIZEWIN}\":\"$dirp\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi

if [[ $2 = "discoverywincp" ]]
then
get=`zabbix_get -s $1 -k system.run["dir /A:D /B \"$3\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем папки циклом
#for dirp in "${obr}"
# Если корректно не отображается русский перекодируем из cp1251 в utf8
for dirp in $(echo "${obr}"|iconv -f cp1251 -t utf8)
do
JSON=$JSON"$SEP\n{\"{#DIRSIZEWINCP}\":\"$dirp\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON
fi
Шаблон Discovery-size-dir Обнаружение папок и запрос их размера
Discovery-size-dir
Discovery-size-dir
Discovery-size-dir2
Discovery-size-dir2
Discovery-size-dir3
Discovery-size-dir3
Discovery-size-dir4
Discovery-size-dir4
Discovery-size-dir5
Discovery-size-dir5
Discovery-size-dir6
Discovery-size-dir6
Discovery-size-dir7
Discovery-size-dir7

Группа элементов данных Size-Dir
Правило
Имя Linux Обнаружение папок в определенной директории
Тип Внешняя проверка
Ключ size-dir.sh[{HOST.CONN},discovery,{$PATH.DIR}]
Интервал обновления 24h
Период сохранения потерянных ресурсов 30d
Описание Директория где искать задается в Макросе узла
Активировано V

Прототип элемента
Имя Size-Dir-{#DIRSIZELINUX}
Тип Zabbix agent
Ключ vfs.dir.size[{$PATH.DIR}{#DIRSIZELINUX}]
Тип информации Числовой с плавающей точкой
Единица измерения B
Интервал обновления 24h
Группы элементов данных Size-Dir
Описание
Запрос 1 раза в сутки, получаем размер директории в байтах

vfs.dir.size[директория,<regex_вкл>,<regex_искл>,<режим>,<макс_глубина>]

режим - возможные значения:
apparent (по умолчанию) - получение реальных размеров файлов вместо использования диска (работает как du -sb директория),
disk - получение использования диска (работает как du -s -B1 директория). В отличии от du команды, элемент данных vfs.dir.size принимает во внимание скрытые файлы при вычислении размера директории (работает как du -sb .[^.]* * в пределах директории).

макс_глубина - максимальная глубина сканируемых поддиректорий. -1 (по умолчанию) - без ограничения,
0 - без проверки нижестоящих поддиректорий.

пример проверки скрипта
Команды проверки
Показать
Для Widows
Проверить на самом хосте команду cmd dir /A:D /B "C:\Users"
С Заббикс сервера отправить запрос например C:\Users\
zabbix_get -s IP-проверяемого хоста -k system.run["dir /A:D /B \"C:\Users\""]
Хотя в самом скрипте есть " " видимо при передаче в скрипт, теряется слеш \ Либо экранируем или пишем по 2шт если сеть то 3 \\\
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin 'C:\Users'
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin "C:\Users"
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin C:\\Users

Если ключ не подхватит такой путь делаем 2 макрос для ключа уже без кавычек и двойных слешей

Должный выйти чистые имена папок без пробелов

Так же проверить команду запроса размера папки должен прилететь размер
zabbix_get -s 192.168.XXX.XXX -k 'vfs.dir.size[C:\Users\Имя-Папки]'

Экранируем кавычки \" так же если нужен \ пишем их несколько \\\

Для Linux
zabbix_get -s IP -k system.run["ls -F /var/www/owncloud/data/|grep -E \"*/\""]
Windows
zabbix_get -s IP -k system.run["dir /B C:\\Users"]

Скриптом
Linux
./size-dir.sh IP discovery /var/www/owncloud/data/
Windows
./size-dir.sh IP discoverywin C:\\

./Имя скрипта $1-первыйвходной параметр переменная $2-второй переменный входной параметр
Триггер
Имя {HOST.NAME}-DIR-{#DIRSIZELINUX}-SIZE-BOLEE>9GB
Важность Средняя
Выражение {Discovery-size-dir:vfs.dir.size[{$PATH.DIR}{#DIRSIZELINUX}].last()}>9663676416 or
{Discovery-size-dir:vfs.dir.size[{$PATH.DIR}{#DIRSIZELINUX}].nodata(25h)}=1

Описание
Объем папки {#DIRSIZELINUX} на {HOST.NAME} более ГБ
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})

Если данных нет 25 часов ошибка


Правило
Имя Windows Обнаружение папок в определенной дириктории
Тип Внешняя проверка
Ключ size-dir.sh[{HOST.CONN},discoverywin,{$PATH.DIR}]
Интервал обновления 24h
Период сохранения потерянных ресурсов 30d
Описание Директория где искать задается в Макросе узла
Активировано

Прототип элемента
Имя Size-Dir-{#DIRSIZEWIN}
Тип Zabbix agent
Ключ vfs.dir.size[{$PATH.DIR}{#DIRSIZEWIN}]
Тип информации Числовой с плавающей точкой
Единица измерения B
Интервал обновления 24h
Группы элементов данных Size-Dir
Описание
Запрос 1 раза в сутки, получаем размер директории в байтах

vfs.dir.size[директория,<regex_вкл>,<regex_искл>,<режим>,<макс_глубина>]

режим - возможные значения:
apparent (по умолчанию) - получение реальных размеров файлов вместо использования диска (работает как du -sb директория),
disk - получение использования диска (работает как du -s -B1 директория). В отличии от du команды, элемент данных vfs.dir.size принимает во внимание скрытые файлы при вычислении размера директории (работает как du -sb .[^.]* * в пределах директории).

макс_глубина - максимальная глубина сканируемых поддиректорий. -1 (по умолчанию) - без ограничения,
0 - без проверки нижестоящих поддиректорий.

Триггер
Имя {HOST.NAME}-DIR-{#DIRSIZEWIN}-SIZE-BOLEE>9GB
Важность Средняя
Выражение {Discovery-size-dir:vfs.dir.size[{$PATH.DIR}{#DIRSIZEWIN}].last()}>9663676416 or
{Discovery-size-dir:vfs.dir.size[{$PATH.DIR}{#DIRSIZEWIN}].nodata(25h)}=1

Описание
Объем папки {#DIRSIZEWIN} на {HOST.NAME} более ГБ
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})

Если нет данных 25 часов ошибка
По мимо декодирования Русского на Windows , выяснилось что формируется не правильный вывод переменной оказалось что это из-за CR Возврат каретки \r пришлось сделать еще одну обработку переменной для удаления возврата каретки.
CR Возврат каретки влияние на вывод в Linux
CR Возврат каретки влияние на вывод в Linux
Различные команды для скрипта в тестировании
Показать
Преобразование слешей
home_mf="${home//\\//}"
$ t='\a\b\c'; echo "${t//\\//}"
/a/b/c

home_mf="${home//'\'/"/"}"

home_mf=${home//\//\\}
home_mf=${home//\\//}

home_mf=$(printf "%s" "$home" | sed 's/\//\\/g') # вперед к обратной косой черте
home_mf=$(printf "%s" "$home_mf" | sed 's/\\/\//g') # в обратную косую черту


printf "%s\n" "$home_mf" instead of echo "$home_mf"
sed s command, e.g. s,/,\\,g and s,\\,/,g

Попытка сделать регулярку для возврата слешей windows
Замена в MAC адресе как пример но только для точного пути если они разные не подойдет
Найти (\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+) Заменить \1:\2:\3:\4:\5:\6
Найти (\w+):(\w+):(\w+):(\w+):(\w+):(\w+) Заменить \1-\2-\3-\4-\5-\6

Нужно сделать все в шаблоне регулярки в (всю команду тут) и вывести в \1 для всего пути

включает inline модификатор (?i) для поиска соответствия символов “error”:
(?i)error

включает несколько inline модификаторов для поиска соответствия символов после указанной строки
(?<=match (?i)everything(?-i) after this line\n)(?sx).*# мы добавили s модификатор, чтобы разрешить . соответствие символам перехода на новую строку


. Точка. Обозначает любой символ
\ Экранирующий символ. Символы которые экранируются: ^, [, ., $, {, *, (, ), \, +, |, ?, <, >
^ Крышка. Начало строки
$ Конец строки
\d Любая цифра
\D Не цифра
\s Пробел, табуляция, перенос строки
\S Не пробел
\w Любая буква латиницы, цифра, или знак подчёркивания
\W Не латиница, не цифра, не подчёркивание
| Или. Соединяет несколько вариантов
\b Граница слова. Применяется когда нужно выделить, что искомые символы являются словом, а не частью другого слова
\B Не граница слова
\< Начало слова
\> Конец слова
\A Начало текста
\Z Конец текста
* Повторитель. Означает что предшествующий символ может работать 0 и более раз
+ Количество предшествующего не менее 1-го.
? Ограничитель. Не более одного раза
[ ] В квадратных скобках задаются символы к поиску, например [a-яА-Я], или [0-9]
[^ ] Исключает из поиска символы указанные в квадратных скобках
() В круглые скобки заключаются все комбинации с "или" и поиск начала и конца строк
{ } В фигурных скобках указывается точное количество вхождений, например если надо две цифры, то \d{2}, если две или четыре, то \d{2,4}, если четыре и более, то {4,}
\n Новая строка

Заменить точку
Пример. Пример. Пример.
(?:.*?\K symblo ){N}
(?:.*?\K\.){1}
((?:.*?\.){0}.*?)\. замена $1 (на что заменить)
(?:.*?\.)

все комбинации с "или" и поиск начала и конца строк, Не более одного раза
((?:\G(?!\A)|copy\s+"(?=[^"]\.cpy"))[^\\"]*)\\
Если при проверке Элемент данных выдает нет доступа к директории 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 теперь устарел.
Более подробно Поддержка черных и белых списков для метрик на стороне агента
количество слов: 1631
Sergh
Гость
Сообщения: 10
Стаж: 3 года 9 месяцев

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Sergh »

Добрый день. Подскажите пожалуйста, пытаюсь реализовать данную функцию, но сталкиваюсь с этой проблемой. Заббикс обнаружением папки находит, но не может создать из них элементы данных как я понимаю.
Invalid discovery rule value: cannot parse as a valid JSON object: invalid control character in string data at: '
"},
{"{#DIRSIZEWIN}":".NET v4.5 Classic
"},

Макрос в узле прописал
{$PATH.DIR} = C:\Users
Последний раз редактировалось Sergh Пт ноя 13, 2020 13:15, всего редактировалось 1 раз. количество слов: 27
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Артём Мамзиков »

Sergh, Привет) в имени папки есть пробел нельзя создавать элементы с пробелом, возможно можно как то экранировать думаю проблема в этом
количество слов: 1
Sergh
Гость
Сообщения: 10
Стаж: 3 года 9 месяцев

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Sergh »

Сейчас установил тестовую папку без пробелов, скрипт отработал уже без ошибок Но почему то не создался элемент данных. Он должен был создастся сам? Спасибо за ранее )
количество слов: 0
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Артём Мамзиков »

Sergh, Да должен сами создаются все найденные папки и проверяется их размер странно что не создаёт.
количество слов: 1
Sergh
Гость
Сообщения: 10
Стаж: 3 года 9 месяцев

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Sergh »

Понял, спасибо. Вечером ещё протестирую, отпишусь.
количество слов: 0
phuntonik
Гость
Сообщения: 2
Стаж: 3 года 4 месяца

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение phuntonik »

Всё сделал как описано - тестирую правило обнаружения и получаю вот такую ошибку (Zabbix 5)^
{"data":[ {"{#DIRSIZEWIN}":"ZBX_NOTSUPPORTED: Unsupported item key."} ]}
количество слов: 9
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Артём Мамзиков »

phuntonik,
Судя по ключу ошибки это на Windows
Что дают команды проверки
Для Widows
Проверить на самом хосте команду cmd dir /A:D /B \"C:\Users\"
С Заббикс сервера отправить запрос например C:\Users\
zabbix_get -s IP-проверяемого хоста -k system.run["dir /A:D /B \"C:\Users\""]
Хотя в самом скрипте есть " " видимо при передаче в скрипт, теряется слеш \ Либо экранируем или пишем по 2шт если сеть то 3 \\\
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin 'C:\Users'
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin "C:\Users"
./size-dir.sh 192.168.ХХХ.ХХХ discoverywin C:\\Users
?
Макрос в узле прописывается без кавычек и в концу пути закрываем слешем \ Пример C:\Users\
Так же в шаблоне 2 кодировки для Русского текста.
нужно на хосте проверить какая кодировка применяется
командой chcp в cmd
количество слов: 56
phuntonik
Гость
Сообщения: 2
Стаж: 3 года 4 месяца

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение phuntonik »

Артём Мамзиков, разобрался.
Дело в неверном синтаксисе команд.
Сначала укажу Вашу команду, потом ту, которая отработала:
zabbix_get -s IP-проверяемого хоста -k system.run["dir /A:D /B \"C:\Users\""]
zabbix_get -s IP-проверяемого хоста -k "system.run[dir /A:D /B "C:\Users\"]"
Ну и в скрипте, соответственно, тоже внес изменения (также укажу Вашу строку, потом ту, что отработала):
get=`zabbix_get -s $1 -k system.run["dir /A:D /B \"$3\""]`
get=`zabbix_get -s $1 -k "system.run[dir /A:D /B "$3\"]`
количество слов: 52
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Обнаружение папок и запрос их размера LLD Шаблон + Скрипт

Сообщение Артём Мамзиков »

phuntonik, Своеобразное экранирование строки конечно, но главное что работает.
количество слов: 1
Ответить Вложения 34 Пред. темаСлед. тема

Вернуться в «Файлы и Папки»