Делюсь полезным шаблоном для мониторинга размера папок в Windows. Мониторим с помощью утилиты du (Disk Usage) от Sysinternals. Шаблон делал сам.
Мониторятся:
- количество файлов
- количество директорий
- размер
- размер на диске
Disk Usage (du) — Sysinternals
Размер и Размер на диске
Вы сами можете отредактировать список директорий и условия срабатывания триггеров.
Установка шаблона
Качаем архив: zabbix_du.zip.
Импортируем шаблон zbx_du.xml.
В макросах шаблона можно отредактировать периодичность опроса данных:
- {$DU_DISCOVERY_PERIOD} — 6h. Периодичность автообнаружения папок.
- {$DU_HISTORY_PERIOD} — 180d. Срок хранения истории.
- {$DU_REQUEST_PERIOD} — 10m. Периодичность опроса данных.
- {$DU_TREND_PERIOD} — 180d. Срок хранения трендов.
Копируем папку со скриптами в C:\zabbix\scripts. В ней у нас утилита du (Disk Usage):
- C:\zabbix\scripts\du64.exe — утилита по умолчанию
- C:\zabbix\scripts\du.exe — не используется, 32 бит
- C:\zabbix\scripts\du64a — не используется, ARM
Копируем du.conf в папку с пользовательскими переменными, у меня это C:\zabbix\zabbix_agent.conf.d\du.conf. В конфигурации агента этот файл должен быть подключен.
Поскольку мы будем передавать на сервер пути к папкам, в которых есть символ слеша, то мы получим ошибку:
Special characters ", ', ", `, *, ?, [, ], {, }, ~, $, !, &, ;, (, ), <, >, |, #, @, 0x0a" are not allowed in the parameters.
Zabbix — special characters are not allowed in the parameters
Для решения проблемы нужно в конфиге агента включить параметр UnsafeUserParameters=1.
### Option: UnsafeUserParameters
# Allow all characters to be passed in arguments to user-defined parameters.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Range: 0-1
# Default:
# UnsafeUserParameters=0
UnsafeUserParameters=1
Перезапускаем агент:
net stop "Zabbix Agent" && net start "Zabbix Agent"
Подключаем шаблон к хосту, на котором создавали структуру.
Настройка списка папок
Переходим в раздел Items шаблона. Редактируем элемент данных DU directory list, он там один. Переключаемся на вкладку Preprocessing.
Редактируем код JavaScript в Parameters.
Здесь в формате JSON указывается список директорий, которые следует мониторить. И граничные условия срабатывания триггеров, при превышении которых триггер и сработает.
Для примера в шаблоне указаны две папки:
- C:\Windows
- C:\zabbix\scripts
var DirList = {
"data": [
{
"{#DIR}": "C:\\Windows",
"{#MAXSIZE}": "2147483648",
"{#MAXSIZEONDISK}": "2147483648",
"{#MAXFILES}": "1",
"{#MAXDIRECTORIES}": "1"
},
{
"{#DIR}": "C:\\zabbix\\scripts",
"{#MAXSIZE}": "0",
"{#MAXSIZEONDISK}": "0",
"{#MAXFILES}": "0",
"{#MAXDIRECTORIES}": "0"
}
] };
return JSON.stringify(DirList)
- {#DIR} — путь к папке
- Левый слеш нужно дублировать
- В конце левый слеш не ставится
- Допустимы пробелы
- Поддерживается кириллица
- {#MAXSIZE} — максимальный размер, указываются в байтах. 0 — триггер отключён.
- {#MAXSIZEONDISK} — максимальный размер на диске, указываются в байтах. 0 — триггер отключён.
- {#MAXFILES} — максимальное количество файлов. 0 — триггер отключён.
- {#MAXDIRECTORIES} — максимальное количество папок. 0 — триггер отключён.
Меняем список на свой и радуемся. Если нужно для разных серверов мониторить разные папки, то создаём новый шаблон.
Zabbix — Monitor Folder Size on Windows
Zabbix — Monitor Folder Size on Windows
Hardware List:
The following section presents the list of equipment used to create this Zabbix tutorial.
Every piece of hardware listed above can be found at Amazon website.
Zabbix Playlist:
On this page, we offer quick access to a list of videos related to Zabbix installation.
Don’t forget to subscribe to our youtube channel named FKIT.
Zabbix Related Tutorial:
On this page, we offer quick access to a list of tutorials related to Zabbix installation.
Tutorial — Zabbix Monitor Windows Folder Size
Now, we need to access the Zabbix server dashboard and add the Windows computer as a Host.
Open your browser and enter the IP address of your web server plus /zabbix.
In our example, the following URL was entered in the Browser:
• http://35.162.85.57/zabbix
On the login screen, use the default username and default password.
• Default Username: Admin
• Default Password: zabbix
After a successful login, you will be sent to the Zabbix Dashboard.
On the dashboard screen, access the Configuration menu and select the Host option.
On the top right of the screen, click on the Create host button.
On the Host configuration screen, you will have to enter the following information:
• Host Name — Enter a Hostname to monitor.
• Visible Hostname — Repeat the hostname.
• New group — Enter a name to identify a group of similar devices.
• Agent Interface — Enter the IP address of the Hostname.
Here is the original image, before our configuration.
Here is the new image with our configuration.
Click on the Add button to include this host on the Zabbix database.
On the dashboard screen, access the Configuration menu and select the Host option.
Locate and click on the hostname that you created before.
In our example, we selected the hostname: WINDOWS-SERVER-01
On the Host properties screen, access the Applications tab.
On the top right part of the screen, click on the Create application button.
On the Host applications screen, create a new application named: Directory size.
After finishing the Application creation, access the Items tab.
On the top right part of the screen, click on the Create item button.
On the Item creation screen, you need to configure the following items:
• Name: Enter an identification to the Windows folder.
• Type: Zabbix Agent
• Key: vfs.dir.size[C:\Windows\System32\drivers\etc,,,disk,]
• Type of Information: Numeric (float)
• Update interval: 300 Seconds
• Units: b
• Show value: As is
• Application: Directory Size
Click on the Add button to finish the Item creation and wait 5 minutes.
In order to test your configuration, access the Monitoring menu and click on the Latest data option.
Use the filter configuration to select the desired hostname.
In our example, we selected the hostname WINDOWS-SERVER-01
Click on the Apply button.
You should be able to see the results of your Windows folder monitoring using Zabbix.
In our example, the Zabbix server detected that the ETC directory has a size of: 36,86Kb.
Congratulations! You have configured the Zabbix folder size monitoring feature on Windows.
VirtualCoin CISSP, PMP, CCNP, MCSE, LPIC22019-10-01T13:35:26-03:00
Related Posts
Leave A Comment
You must be logged in to post a comment.
Page load link
Ok
Шаблон с Zabbix 4.2
Проверка доступна на 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\Папка
- Discovery-size-dir.jpg
Версия с Портом дополнительно в узле нужно прописать порт
- Discovery-size-dir-Port.jpg
Пример Макросов на узле
- Пример макросов.jpg
Более подробно о работе Команда DIR для Windows
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
#!/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
#!/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
Прототип элемента аналогично для windows только другой макрос
- Прототип Элемента Discovery-size-dir.jpg
Прототип триггера аналогично для windows только другой макрос
- Прототип Триггера Discovery-size-dir.jpg
- Пример Windows size-dir.jpg
- Пример данные Windows size-dir.jpg
Алгоритм: после того как добавили шаблон к узлу в Макросах узла прописываем переменную
Например Макрос {$PATH.DIR} Значение /var/www/owncloud/data/ пишем путь без кавычек экранировать не нужно, завершающий слеш зависит от скрипта 2 версии!
по данному пути у нас хранятся папки пользователей будем проверять их размер
- PATH.DIR-primer
#!/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-dir2
- Discovery-size-dir3
- Discovery-size-dir4
- Discovery-size-dir5
- Discovery-size-dir6
- 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
Преобразование слешей
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 теперь устарел.
Более подробно Поддержка черных и белых списков для метрик на стороне агента
Намедни пришла мне в голову простая, но гениальная мысль, как можно мониторить размер папки.
К слову сказать, в Zabbix пока это не реализовано. Отдельный раздел или файл на предмет занимаемого места пощупать легко, а вот папку-директорию, ни в никсах, ни в винде нельзя.
Так как мониторинг развёрнут на FreeBSD, а нужно на удалённых Windows серверах и рабочих станциях щупать определённую папку, то:
1) Расшариваем папку для какой-либо учётки (локальной либо доменной, можно под это дело специальную техническую учётку создать, урезанную в правах);
2) Монтируем это самую папку через mount_smbfs с указанием вышеупомянутых паролей-явок и смотрим размер теми же ls или du. Решение тем более кошерно, что не требует установки клиента на удалённой машине, танцев с бубном ради выполнения удалённых команд/приблуд типа diruse.
3) Так как Zabbix в моём случае ещё мониторит и сам себя, т.е. помимо самого сервера поднят и агент, то остаётся как-то заставить всосать его получаемое от ls или du значение, например, тупо записать в файл, а уж от туда он спокойно считает значение)
Edit your zabbix_agentd.conf
Add this to the section
UserParameter=website.size.path[*],powershell -noprofile -command “(ls -r “D:\yourpath\$1″|measure -s Length| select sum| ft -hide|Out-string).trim()”
The above will allow to use one key-item value to check for multiple directories in the same folder. This is because you can’t pass ‘\’ as parameter in Zabbix
or
UserParameter=website.size.myfolder],powershell -noprofile -command “(ls -r “D:\yourpath\testfolder”|measure -s Length| select sum| ft -hide|Out-string).trim()”
You can also replace the powershell command with the one below. This seems to be a lot faster
powershell -command “((cmd /c dir D:\folder\$1 /-C /S /A:-D-L)[-2] -split ‘\s+’)[3]”
Once added restart your Zabbix Agent service under services.msc
Then in Zabbix go into the Configuration->Host-Item and Create New Item
Make sure that you also select Zabbix Active check for this item as otherwise it will not report the data
Under the Key use the same name
for Example:
To check one folder user
website.size.myfolder
to check for multiple use
website.size.path[MyfolderToCheck]
If the check take longer than 3s then increase the timeout in the zabbix_agentd.conf