Проверка доступна на Linux и Windows (на узле активируется нужное правило обнаружения для той или иной ОС)
НОВАЯ ВЕРСИЯ ШАБЛОНА Обновлённая версия Обнаружение папок и запрос их размера LLD Шаблон + Скрипт
Скачать Шаблон + скрипт Проверка только папок или папки (файлы не проверяются в данном случае если необходимо проверять еще файлы или только файлы нужно переделать скрипт запрос и ключ прототипа элемента)
Для тех у кого При запросе Элемента данных Zabbix агент и Zabbix активный агент - у нас ограничение по времени ответа, т.е. ответ должен успеть придти за указанное время в файле конфигурации сервера и агента, максимальное время 30 секунд! Не успевает придти ответ слишком долгий запрос.
Читаем тут 11 собщение для Linux через скрипт и тут 12 сообщение для Windows через скрипт
Скачать Шаблон + скрипт Изменения в шаблоне и скрипте 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\Папка Версия с Портом дополнительно в узле нужно прописать порт Пример Макросов на узле
Более подробно о работе Команда DIR для Windows
Размер директории (в байтах). Целое число директория - абсолютный путь к директории
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 часов Триггер сработает
Проверить на 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"
#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
#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
Авто обнаружение Прототип элемента аналогично для windows только другой макрос Прототип триггера аналогично для windows только другой макрос
Например Макрос {$PATH.DIR} Значение /var/www/owncloud/data/ пишем путь без кавычек экранировать не нужно, завершающий слеш зависит от скрипта 2 версии!
по данному пути у нас хранятся папки пользователей будем проверять их размер
#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
Группа элементов данных 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 - без проверки нижестоящих поддиректорий.
пример проверки скрипта
Проверить на самом хосте команду 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 часов ошибка
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"))[^\\"]*)\\
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 теперь устарел.
Более подробно Поддержка черных и белых списков для метрик на стороне агента