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
01 client
- Get the number of files under the specified file (file path is / usr / src) through the shell command
ls -l /usr/src | grep "^d" | wc -l
- Modify the Zabbix client profile to add custom monitoring parameters
vim /etc/zabbix/zabbix-agent2.conf
Three changes:
- Server = server IP
- UnsafeUserParameters=1
- UserParameter changes as follows (the first parameter is the key value, the second parameter is shell command)
- Test on the client
zabbix_get -s 10.67.15.34 -k FileCount
The IP here is the IP of the server, which is consistent with the second step server = xxx.
After the parameters can be obtained correctly, configure it on the server.
02 server
- Select the host and add a monitoring item
This way, the monitoring item is set, and the number of current files can be displayed by graphics.
If the graphical interface is garbled, please refer to the following link to make changes.
Zabbix5.0 solves the problem of chasing graphical interface
Делюсь полезным шаблоном для мониторинга размера папок в 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 — триггер отключён.
Меняем список на свой и радуемся. Если нужно для разных серверов мониторить разные папки, то создаём новый шаблон.
Аналог с доработками шаблона Обнаружение папок и запрос их размера LLD Шаблон + Скрипт только для файлов.
LLD — Обнаружение файлов и их мониторинг Linux и Windows
Проверяются следующие параметры:
1.Наличие файла
2.Размер файла
3.Время изменения файла
4.Время изменения свойств файла
5.Время последнего доступа
Можно дополнить своими проверками.
Подходит для проверки файлов резервного копирования или важных файлов где их не так мало и дабы не прописывать все вручную используем авто обнаружение в указанной директории.
Более подробно:
Может ли проверять на одном узле несколько каталогов с файлами? Да может.
Указываем макросе {$PUTFILE} узла пути через точку с запятой завершающий слеш не нужен
Пример для Windows:
{$PUTFILE} C:\zabbix;C:\Users
Для сети вначале проставить 3 слеша
\\\192.168.ххх.ххх\папка
Пример для Linux:
{$PUTFILE} /root;/home/user
Могу ли я задать порт для подключения? Да.
Указываем в макросе Узла
{$HOST.PORTS} порт по умолчанию в шаблоне указан 10050
Так же есть активный порт, для отправки trappetom и ошибок.
{$HOST.PORTSACTIV} порт по умолчанию в шаблоне указан 10051
Можно ли скрыть или отобразить конкретные файлы ? Да можно.
Для этого можно воспользоваться фильтром в правиле обнаружения или макросами в узле.
{$FILTRFILE} по умолчанию в шаблоне задано отображать все .*
{$HIDEFILE} по умолчанию в шаблоне задано отображать все ^$
Для указания нескольких файлов (перечисления) вид следующий
Файл1\|Файл2\|Файл3 и так далее
* учитывать пробел если он есть иначе короткое слово может попасть под регулярку!
Так же данные фильтра используется в trapper.
Можно использовать фильтра заббикс в правиле обнаружения, тогда они будут работать только для обнаружения, а способ trapper будет запрашивать данные и отправлять данные для всего что найдет просто в никуда для тех элементов которых не будет в заббикс.
Что делать если за время timeout 15-30 секунд не успевает прилететь ответ? На это случае есть дополнительные правила и скрипты работающие через trapper.
Макрос для указания пути где лежит скрипт trapper.
{$SCRIPT.TRAPFILE}
Пример Windows:
C:\zabbix\Scripts\dir-file-trapper-win-cp866-File.bat
Пример Linux:
/etc/zabbix/scripts/dir-file-trappet.sh
Для Windows скриптов trapper есть макрос для указания текущей кодировки узла
{$KODR} по умолчанию в шаблоне указана cp866 (не используется на данный момент)
Так же в скриптах trappet указать IP в переменой IPZBXSERVER=192.168.XXX.XXX
Есть какие то ограничения?
Для Windows trapper (не путать trapper Лог там все ок) где запросы напрямую отправляются с батника для каждого элемента в заббикс не поддерживается русский язык так как не перекодируется в utf-8.
Так же если имя файла начинается на &36.txt то на windows при работе скрипта когда строка не экранирована это вызывает ошибку.
vfs.file.time[«/root/test/?34.txt»,change] — Cannot obtain file information: [2] No such file or directory
vfs.file.time[«/root/test/???? ???????.txt»,change] — Cannot obtain file information: [2] No such file or directory
«/home/user/ls: невозможно получить доступ к ‘/home/user’: Нет такого файла или каталога»
34 траппер ошибка
34 работает виде лога траппер
Обычный траппер ошибки
[«D:\test\!32.txt»]
[«D:\test\№34.txt»]
[«D:\test\^35.txt»]
Траппер Лог ошибки
[«D:\test\^35.txt»] ошибка на регулярку
[«D:\test\!32.txt»] ошибка на регулярку
[«D:\test\Тест русский.txt»]
Не работают кривые имена с windows
Преобразует не правильно проверка не проходит
Оригинал
РЎРїРёСЃРєРё РњРќРЎ.xls
Стало
РЎРїРёС?РєРё Р?Р?РЎ.xls
Если файл начинается на ‘ (одинарную кавычку он скроется из вывода) для windows работающий через скрипт trappet, так как данная кавычка указана как полмолчания ничего не скрывать можно заменить на другой символ.
Дата через trappet приходит в обычном формате как текст, для некоторых функций триггера нужно ее перевести в unixtime. (возможно реализую позже)
Файлы с датой в имени, не совсем подходят сюда так как
Сделать авто обнаружение файла так же не вариант так как:
Файл будет каждый день новый сравнить размер не получится, после удаления предыдущих файлов сработает триггер на старые файлы что нет данных, можно конечно выставить удаление через 0 дней если не обнаруживается сразу удалился, если файла нет то и проверка не создастся и мы ничего не узнаем.
Для этого у нас есть другой шаблон Шаблон проверки файлов
Другие нюансы по факту их обнаружения.
Цепляем шаблон «Обнаружение файлов и запрос их размера» к Узлу
В узле указываем макросы
{$PUTFILE} тут указываем путь или пути через точку с запятой где сканировать наличие файлов
Например:
/home/user;/root/bak — находим файлы в 2х папках
C:\zabbix;C:\Users — находим файлы в 2х папках
Завершающий слеш в конце пути не нужен, так же должен быть доступ на проверяемую папку.
При необходимости задаем свой порт
{$HOST.PORTS} по умолчанию 10050
{$HOST.PORTSACTIV} порт по умолчанию в шаблоне указан 10051
Можно задать конкретные имена файлов которые нам необходимы
{$FILTRFILE} по умолчанию все .* несколько файлов: Имя файла1\|Имя файла2\|имя файла3
Можно наоборот скрыть из вывода не нужные файлы
{$HIDEFILE} по умолчанию все показывать все ^$ аналогично несколько файлов: Имя файла1\|Имя файла2\|имя файла3
Аналогично настройки Фильтра в правиле обнаружения можно пользоваться стандартным фильтром
Кодировка задается для Windows Русских названий файлов и дальнейшая перекодировка в UTF-8
{$KODR} по умолчанию cp866 при не об ходимости в узле задайте 1251
Макрос для указания пути где лежит скрипт trapper.
{$SCRIPT.TRAPFILE}
Пример Windows:
C:\zabbix\Scripts\dir-file-trapper-win-cp866-File.bat
Пример Linux:
/etc/zabbix/scripts/dir-file-trappet.sh
Далее все данные поступаю в скрипт size-file.sh при обнаружении файлов.
СКАЧАТЬ
Windows для большого кол-ва файлов скрипт 6.2
Установка делаем импорт шаблона на заббикс сервер, копируем скрипт size-file.sh на заббикс сервер в моем случае путь такой
/usr/local/share/zabbix/externalscripts/
Цепляем шаблон к узлу, указываем необходимые макросы в узле и активируем нужное правило обнаружения.
- Обнаружение файлов и запрос их размера
Скрипт обнаружения работает на командах, должен быть доступ заббикс агенту от имени которого он запущен до данных каталогов.
Вывод Обнаружение файлов в указанной папке
ls -aF путь до файлов и исключить из вывода каталоги |grep -av «/»
dir /a-d /B \ путь до файлов
Проверка со стороны заббикс сервера
Linux
zabbix_get -s 192.168.XXX.XXX -p 10050 -k system.run[«ls -aF «путь до файлов»|grep -av «/»»]
Windows
zabbix_get -s 192.168.XXX.XXX -p 10050 -k system.run[«dir /a-d /B \»»путь до файлов»\»»]
Команда Ключ Linux
size-file.sh[{HOST.CONN},{$HOST.PORTS},discovery,{$PUTFILE},{$FILTRFILE},{$HIDEFILE},{$KODR},{HOST.HOST},{$HOST.PORTSACTIV}]
/usr/local/share/zabbix/externalscripts/size-file.sh 192.168.xxx.xxx 10050 discovery «/home/user;/root/test» «.*» «^$» «» «HOSTNAME» «10051»
[
{«{#FILESIZELINUX}»:»/root/test/-27.txt», «{#NAMEFILELINUX}»:»-27.txt»},
{«{#FILESIZELINUX}»:»/root/test/.28.txt», «{#NAMEFILELINUX}»:».28.txt»},
{«{#FILESIZELINUX}»:»/root/test/,29.txt», «{#NAMEFILELINUX}»:»,29.txt»},
{«{#FILESIZELINUX}»:»/root/test/$30.txt», «{#NAMEFILELINUX}»:»$30.txt»},
{«{#FILESIZELINUX}»:»/root/test/@31.txt», «{#NAMEFILELINUX}»:»@31.txt»},
{«{#FILESIZELINUX}»:»/root/test/!32.txt», «{#NAMEFILELINUX}»:»!32.txt»},
{«{#FILESIZELINUX}»:»/root/test/#33.txt», «{#NAMEFILELINUX}»:»#33.txt»},
{«{#FILESIZELINUX}»:»/root/test/-34.txt», «{#NAMEFILELINUX}»:»-34.txt»},
{«{#FILESIZELINUX}»:»/root/test/^35.txt», «{#NAMEFILELINUX}»:»^35.txt»},
{«{#FILESIZELINUX}»:»/root/test/(37.txt», «{#NAMEFILELINUX}»:»(37.txt»},
{«{#FILESIZELINUX}»:»/root/test/)38.txt», «{#NAMEFILELINUX}»:»)38.txt»},
{«{#FILESIZELINUX}»:»/root/test/-39.txt», «{#NAMEFILELINUX}»:»-39.txt»},
{«{#FILESIZELINUX}»:»/root/test/_40.txt», «{#NAMEFILELINUX}»:»_40.txt»},
{«{#FILESIZELINUX}»:»/root/test/+41.txt», «{#NAMEFILELINUX}»:»+41.txt»},
{«{#FILESIZELINUX}»:»/root/test/{42.txt», «{#NAMEFILELINUX}»:»{42.txt»},
{«{#FILESIZELINUX}»:»/root/test/[43.txt», «{#NAMEFILELINUX}»:»[43.txt»},
{«{#FILESIZELINUX}»:»/root/test/a1.txt», «{#NAMEFILELINUX}»:»a1.txt»},
{«{#FILESIZELINUX}»:»/root/test/b2.txt», «{#NAMEFILELINUX}»:»b2.txt»},
{«{#FILESIZELINUX}»:»/root/test/c3.txt», «{#NAMEFILELINUX}»:»c3.txt»},
{«{#FILESIZELINUX}»:»/root/test/d4.txt», «{#NAMEFILELINUX}»:»d4.txt»},
{«{#FILESIZELINUX}»:»/root/test/e5.txt», «{#NAMEFILELINUX}»:»e5.txt»},
{«{#FILESIZELINUX}»:»/root/test/f6.txt», «{#NAMEFILELINUX}»:»f6.txt»},
{«{#FILESIZELINUX}»:»/root/test/g7.txt», «{#NAMEFILELINUX}»:»g7.txt»},
{«{#FILESIZELINUX}»:»/root/test/h8.txt», «{#NAMEFILELINUX}»:»h8.txt»},
{«{#FILESIZELINUX}»:»/root/test/i9.txt», «{#NAMEFILELINUX}»:»i9.txt»},
{«{#FILESIZELINUX}»:»/root/test/j10.txt», «{#NAMEFILELINUX}»:»j10.txt»},
{«{#FILESIZELINUX}»:»/root/test/k11.txt», «{#NAMEFILELINUX}»:»k11.txt»},
{«{#FILESIZELINUX}»:»/root/test/l12.txt», «{#NAMEFILELINUX}»:»l12.txt»},
{«{#FILESIZELINUX}»:»/root/test/m13.txt», «{#NAMEFILELINUX}»:»m13.txt»},
{«{#FILESIZELINUX}»:»/root/test/n14.txt», «{#NAMEFILELINUX}»:»n14.txt»},
{«{#FILESIZELINUX}»:»/root/test/o15.txt», «{#NAMEFILELINUX}»:»o15.txt»},
{«{#FILESIZELINUX}»:»/root/test/p16.txt», «{#NAMEFILELINUX}»:»p16.txt»},
{«{#FILESIZELINUX}»:»/root/test/pro bel d», «{#NAMEFILELINUX}»:»pro bel d»},
{«{#FILESIZELINUX}»:»/root/test/q17.txt», «{#NAMEFILELINUX}»:»q17.txt»},
{«{#FILESIZELINUX}»:»/root/test/r18.txt», «{#NAMEFILELINUX}»:»r18.txt»},
{«{#FILESIZELINUX}»:»/root/test/s19.txt», «{#NAMEFILELINUX}»:»s19.txt»},
{«{#FILESIZELINUX}»:»/root/test/t20.txt», «{#NAMEFILELINUX}»:»t20.txt»},
{«{#FILESIZELINUX}»:»/root/test/—- ——-.txt», «{#NAMEFILELINUX}»:»—- ——-.txt»},
{«{#FILESIZELINUX}»:»/root/test/u21.txt», «{#NAMEFILELINUX}»:»u21.txt»},
{«{#FILESIZELINUX}»:»/root/test/v22.txt», «{#NAMEFILELINUX}»:»v22.txt»},
{«{#FILESIZELINUX}»:»/root/test/w23.txt», «{#NAMEFILELINUX}»:»w23.txt»},
{«{#FILESIZELINUX}»:»/root/test/x24.txt», «{#NAMEFILELINUX}»:»x24.txt»},
{«{#FILESIZELINUX}»:»/root/test/y25.txt», «{#NAMEFILELINUX}»:»y25.txt»},
{«{#FILESIZELINUX}»:»/root/test/z26.txt», «{#NAMEFILELINUX}»:»z26.txt»}
]
—- ——- тут было слово на русском написанное на Windows b скопировано в Linux
После создают Элементы данных
{#NAMEFILELINUX} — Имя файла
Время изменения свойств файла {#FILESIZELINUX} vfs.file.time[{#FILESIZELINUX},change]
Время изменения файла {#FILESIZELINUX} vfs.file.time[{#FILESIZELINUX},modify]
Время последнего доступа {#FILESIZELINUX} vfs.file.time[{#FILESIZELINUX},access]
Наличие файла {#FILESIZELINUX} vfs.file.exists[{#FILESIZELINUX}]
Размер файла {#FILESIZELINUX} vfs.file.size[{#FILESIZELINUX}]
Команда Ключ Windows
size-file.sh[{HOST.CONN},{$HOST.PORTS},discoverywin,{$PUTFILE},{$FILTRFILE},{$HIDEFILE},{$KODR},{HOST.HOST},{$HOST.PORTSACTIV}]
/usr/local/share/zabbix/externalscripts/size-file.sh 192.168.xxx.xxx 10050 discoverywin «C:\Users\Public;D:\test» «.*» «^$» «cp866» «HOSTNAME» «10051»
[
{«{#FILESIZEWIN}»:»C:\\Users\\Public\\desktop.ini», «{#NAMEFILEWIN}»:»desktop.ini»},
{«{#FILESIZEWIN}»:»D:\\test\\!32.txt», «{#NAMEFILEWIN}»:»!32.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\#33.txt», «{#NAMEFILEWIN}»:»#33.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\$30.txt», «{#NAMEFILEWIN}»:»$30.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\(37.txt», «{#NAMEFILEWIN}»:»(37.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\)38.txt», «{#NAMEFILEWIN}»:»)38.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\+41.txt», «{#NAMEFILEWIN}»:»+41.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\,29.txt», «{#NAMEFILEWIN}»:»,29.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\-27.txt», «{#NAMEFILEWIN}»:»-27.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\-39.txt», «{#NAMEFILEWIN}»:»-39.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\.28.txt», «{#NAMEFILEWIN}»:».28.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\@31.txt», «{#NAMEFILEWIN}»:»@31.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\a1.txt», «{#NAMEFILEWIN}»:»a1.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\b2.txt», «{#NAMEFILEWIN}»:»b2.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\c3.txt», «{#NAMEFILEWIN}»:»c3.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\d4.txt», «{#NAMEFILEWIN}»:»d4.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\e5.txt», «{#NAMEFILEWIN}»:»e5.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\f6.txt», «{#NAMEFILEWIN}»:»f6.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\g7.txt», «{#NAMEFILEWIN}»:»g7.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\h8.txt», «{#NAMEFILEWIN}»:»h8.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\i9.txt», «{#NAMEFILEWIN}»:»i9.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\j10.txt», «{#NAMEFILEWIN}»:»j10.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\k11.txt», «{#NAMEFILEWIN}»:»k11.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\l12.txt», «{#NAMEFILEWIN}»:»l12.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\m13.txt», «{#NAMEFILEWIN}»:»m13.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\n14.txt», «{#NAMEFILEWIN}»:»n14.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\o15.txt», «{#NAMEFILEWIN}»:»o15.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\p16.txt», «{#NAMEFILEWIN}»:»p16.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\pro bel d.txt», «{#NAMEFILEWIN}»:»pro bel d.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\q17.txt», «{#NAMEFILEWIN}»:»q17.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\r18.txt», «{#NAMEFILEWIN}»:»r18.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\s19.txt», «{#NAMEFILEWIN}»:»s19.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\t20.txt», «{#NAMEFILEWIN}»:»t20.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\u21.txt», «{#NAMEFILEWIN}»:»u21.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\v22.txt», «{#NAMEFILEWIN}»:»v22.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\w23.txt», «{#NAMEFILEWIN}»:»w23.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\x24.txt», «{#NAMEFILEWIN}»:»x24.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\y25.txt», «{#NAMEFILEWIN}»:»y25.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\z26.txt», «{#NAMEFILEWIN}»:»z26.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\[43.txt», «{#NAMEFILEWIN}»:»[43.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\^35.txt», «{#NAMEFILEWIN}»:»^35.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\_40.txt», «{#NAMEFILEWIN}»:»_40.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\{42.txt», «{#NAMEFILEWIN}»:»{42.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\Тест русский.txt», «{#NAMEFILEWIN}»:»Тест русский.txt»},
{«{#FILESIZEWIN}»:»D:\\test\\№34.txt», «{#NAMEFILEWIN}»:»№34.txt»}
]
Что бы оставить правильные слеши и не разворачивать их в lld нужно передавать в 2 раза больше их чем нужно нам если нам нужен \ то передаем \\
После создают Элементы данных
{#NAMEFILEWIN} — Имя файла
Время изменения свойств файла {#FILESIZEWIN} vfs.file.time[{#FILESIZEWIN},change]
Время изменения файла {#FILESIZEWIN} vfs.file.time[{#FILESIZEWIN},modify]
Время последнего доступа {#FILESIZEWIN} vfs.file.time[{#FILESIZEWIN},access]
Наличие файла {#FILESIZEWIN} vfs.file.exists[{#FILESIZEWIN}]
Размер файла {#FILESIZEWIN} vfs.file.size[{#FILESIZEWIN}]
Далее у нас идут команды для zabbix trapper
Скрипт для Linux dir-file-trappet.sh
ls -aF путь до файлов|grep -av «/» — отобразить содержимое кроме папок
du -sb —time путь до файлов — размера в байтах и даты изменения разбор по столбцам
du -sb —time=ctime путь до файлов| awk ‘{print $2, $3}’ -Время изменения свойств файла в формате ГГГГ.ММ.ДД ЧЧ:ММ
du -sb —time=atime путь до файлов| awk ‘{print $2, $3}’ -Время последнего доступа в формате ГГГГ.ММ.ДД ЧЧ:ММ
Локальная проверка
/etc/zabbix/scripts/dir-file-trappet.sh «ИмяХоста» «10051» «/путь» «.*» «^$»
Запуск удаленного скрипта обнаружение файлов, через заббикс агент Linux
system.run[‘{$SCRIPT.TRAPFILE}’ «{HOST.HOST}» «{$HOST.PORTSACTIV}» «{$PUTFILE}» «{$FILTRFILE}» «{$HIDEFILE}»,nowait]
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ ‘ИмяХоста’ ‘10051’ ‘/путь’ ‘.*’ ‘^$»,nowait]
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ «ИмяХоста» «10051» «/путь» «.*» «^$»‘]
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ «ИмяХоста» «10051» «/путь» «.*» «^$»‘,nowait]
zabbix_get -s 192.168.XXX.XXX -k system.run[«‘/etc/zabbix/scripts/dir-file-trappet.sh’ ‘ИмяХоста’ ‘10051’ ‘/путь’ ‘.*’ ‘^$'»,nowait]
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ ‘agentzabbixserver’ ‘10051’ ‘/root’ ‘.*’ ‘^$»]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
Ошибка так как в скрипте сместилась первая строка #!/bin/bash , первая была пустая вторя содержала #!/bin/bash
Запускается через sh изначально с команды system.run
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ «agentzabbixserver» «10051» «/root» «.*» «^$»‘]
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ ‘agentzabbixserver’ ‘10051’ ‘/root’ ‘.*’ ‘^$»]
zabbix_get -s 192.168.XXX.XXX -k system.run[‘»/etc/zabbix/scripts/dir-file-trappet.sh» ‘agentzabbixserver’ ‘10051’ ‘/root’ ‘.*’ ‘^$»]
ZBX_NOTSUPPORTED: Invalid item key format.
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(«/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»),nowait’]
1
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(«/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»),nowait’]
1
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(«/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»),nowait’]
1
zabbix_get -s 192.168.XXX.XXX -k system.run[‘`»/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»`,nowait’]
1
zabbix_get -s 192.168.XXX.XXX -k system.run[‘`»/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»`’,nowait]
1
zabbix_get -s 192.168.XXX.XXX -k system.run[`»/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»`,nowai
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(«/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»),nowait’]
1
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(«/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(«/etc/zabbix/scripts/dir-file-trappet.sh» «agentzabbixserver» «10051» «/root» «.*» «^$»)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(/etc/zabbix/scripts/dir-file-trappet.sh «agentzabbixserver» «10051» «/root» «.*» «^$»)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(/etc/zabbix/scripts/dir-file-trappet.sh «‘agentzabbixserver'» «‘10051′» «‘/root'» «‘.*'» «‘^$'»)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(/etc/zabbix/scripts/dir-file-trappet.sh ‘»agentzabbixserver»‘ ‘»10051″‘ ‘»/root»‘)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(/etc/zabbix/scripts/dir-file-trappet.sh ‘agentzabbixserver’ ‘10051’ ‘/root’)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘$(‘/etc/zabbix/scripts/dir-file-trappet.sh’ ‘agentzabbixserver’ ‘10051’ ‘/root’)’]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[‘/etc/zabbix/scripts/dir-file-trappet.sh’ ‘agentzabbixserver’ ‘10051’ ‘/root’]
zabbix_get [12244]: invalid parameter «agentzabbixserver»
zabbix_get [12244]: invalid parameter «10051»
zabbix_get [12244]: invalid parameter «/etc]»
Try ‘zabbix_get —help’ for more information.
zabbix_get -s 192.168.XXX.XXX -k system.run[/etc/zabbix/scripts/dir-file-trappet.sh ‘agentzabbixserver’ ‘10051’ ‘/root’]
zabbix_get [12540]: invalid parameter «agentzabbixserver»
zabbix_get [12540]: invalid parameter «10051»
zabbix_get [12540]: invalid parameter «/etc]»
Try ‘zabbix_get —help’ for more information.
zabbix_get -s 192.168.XXX.XXX -k system.run[/etc/zabbix/scripts/dir-file-trappet.sh «agentzabbixserver» «10051» «/root»]
zabbix_get [13012]: invalid parameter «agentzabbixserver»
zabbix_get [13012]: invalid parameter «10051»
zabbix_get [13012]: invalid parameter «/etc]»
Try ‘zabbix_get —help’ for more information.
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ ‘agentzabbixserver’ ‘10051’ ‘/root»]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ ‘agentzabbixserver’ ‘10051’ ‘/root’ ‘.*’ ‘^$»]
/etc/zabbix/scripts/dir-file-trappet.sh: 24: /etc/zabbix/scripts/dir-file-trappet.sh: Syntax error: redirection unexpected
Ошибка так как в скрипте сместилась первая строка #!/bin/bash , первая была пустая вторя содержала #!/bin/bash
Запускается через sh изначально с команды system.run
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ «agentzabbixserver» «10051» «/root» «.*» «^$»‘]
Response from «192.168.XXX.XXX:10051»: «processed: 1; failed: 0; total: 1; seconds spent: 0.000141»
sent: 1; skipped: 0; total: 1
zabbix_get -s 192.168.XXX.XXX -k system.run[»/etc/zabbix/scripts/dir-file-trappet.sh’ «agentzabbixserver» «10051» «/root» «.*» «^$»‘,nowait]
1
Запуск удаленного скрипта обнаружение файлов, через основной Linux
size-file.sh[{HOST.CONN},{$HOST.PORTS},runscript,'{$SCRIPT.TRAPFILE}’,»‘{HOST.HOST}'»,»‘{$HOST.PORTSACTIV}'»,»‘{$PUTFILE}'»,»‘{$FILTRFILE}'»,»‘{$HIDEFILE}'»]
/size-file.sh 192.168.XXX.XXX 10050 runscript «‘/etc/zabbix/scripts/dir-file-trappet.sh'» «‘ИмяХоста'» «‘10051′» «‘/путь'» «‘.*'» «‘^$'»
Запрос через скрипт Windows
C:\zabbix\Scripts\dir-file-trapper-win-cp866-File.bat «ИмяХоста» «10051» «D:\test» «26.txt» «^$» «cp866»
C:\zabbix\Scripts\dir-file-trapper-win-cp866-File.bat «ИмяХоста» «10051» «D:\test» «26.txt» «^$» «cp866»
C:\zabbix\Scripts\dir-file-trapper-win-cp866-File.bat «ИмяХоста» 10051 «C:\Users\Public;D:\test» «.*» «^$» «cp866»
Запуск удаленного скрипта обнаружение файлов, через заббикс агент Windows
system.run[{$SCRIPT.TRAPFILE} «{HOST.HOST}» «{$HOST.PORTSACTIV}» «{$PUTFILE}» «{$FILTRFILE}» «{$HIDEFILE}» «{$KODR}»,nowait]
zabbix_get -s 192.168.XXX.XXX -p 10050 -k system.run[‘C:\zabbix\Scripts\dir-size-trapper-win-cp866-File.bat «ИмяХоста» «10051» «C:\Users\Public;D:\test» «.*» «^$» «cp866»,nowait’]
zabbix_get -s 192.168.XXX.XXX -p 10050 -k system.run'[C:\zabbix\Scripts\dir-size-trapper-win-cp866-File.bat «ИмяХоста» «10051» «C:\Users\Public;D:\test» «.*» «^$» «cp866»,nowait]’
zabbix_get -s 192.168.XXX.XXX -p 10050 -k system.run[‘C:\zabbix\Scripts\dir-size-trapper-win-cp866-File.bat «ИмяХоста» «10051» «C:\Users\Public;D:\test» «.*» «^$» «cp866″‘,nowait]
Вид команды прилетает в лог заббикс агента:
‘C:\zabbix\Scripts\dir-size-trapper-win-cp866-File.bat «ИмяХоста» «10051» «C:\Users\Public;D:\test» «.*» «^$» «cp866″‘
выполняется уже без одинарных кавычек, первое значение путь до скрипта нельзя включить в кавычки не будет запускаться, если только прописать первую команду на запуск скрипта!
Ошибка:
zabbix_get -s 192.168.ХХХ.ХХХ -p 10050 -k system.run'[«C:\zabbix\Scripts\dir-size-trapper-win-cp866-File.bat» «ИмяХоста» «10051» «C:\Users\Public;D:\test» «.*» «^$» «cp866»,nowait]’
ZBX_NOTSUPPORTED: Invalid item key format.
Linux экранирование идет сперва двойные кавычки, после одинарные. можно начинать с самого первого элемента
Windows экранирование сперва одинарные кавычки, после двойные. первый элемент экранировать нельзя
Запуск удаленного скрипта обнаружение файлов, через основной Windows
size-file.sh[{HOST.CONN},{$HOST.PORTS},runscriptwin,'{$SCRIPT.TRAPFILE}’,'»{HOST.HOST}»‘,'»{$HOST.PORTSACTIV}»‘,'»{$PUTFILE}»‘,'»{$FILTRFILE}»‘,'»{$HIDEFILE}»‘,'»{$KODR}»‘]
/usr/local/share/zabbix/externalscripts/size-file.sh 192.168.XXX.XXX 10050 runscriptwin «C:\zabbix\Scripts\dir-file-trapper-win-cp866-File.bat» ‘»ИмяХоста»‘ ‘»10051″‘ ‘»C:\Users\Public;D:\test»‘ ‘».*»‘ ‘»^$»‘ ‘»cp866″‘
Тесты слов с пробелами и экранированием
Для ключа в кавычках: traptest[«6»]
zabbix_sender -z 192.168.XXX.XXX -p 10051 -s «Имя хоста» -k traptest[\»6\»] -o «4096»
Для ключа в кавычках и с пробелом: traptest[«test top»]
zabbix_sender -z 192.168.XXX.XXX -p 10051 -s «Имя хоста» -k traptest[\»»test top»\»] -o «40999996»
Для ключа без кавычек с пробелом: traptest[test top] (На выходе с траппера кавычки нужны в элементе нет)
zabbix_sender -z 192.168.XXX.XXX -p 10051 -s «Имя хоста» -k traptest[«test top»] -o «409554jjj44556»
Без кавычек не создается элемент со спец символами например: folder[«/root/test/,29»]
Первый способ самый простой обнаружение элементов и работа через zabbix agent если ответ будет успевать приходить за 15-30 секунд, используем следующие правила обнаружения в зависимости от OS:
Linux Обнаружение файлов в определенной директории
Windows Обнаружение файлов в определенной директории
- LLD обнаружение файлов Linux Windows Работа через Zabbix Agent
Правило обнаружения: Linux Обнаружение файлов в определенной директории
- Linux Обнаружение файлов в определенной директории
Имя: Linux Обнаружение файлов в определенной директории
Тип: Внешняя проверка
Ключ: size-file.sh[{HOST.CONN},{$HOST.PORTS},discovery,{$PUTFILE},{$FILTRFILE},{$HIDEFILE},{$KODR},{HOST.HOST},{$HOST.PORTSACTIV}]
Интервал обновления: 24h
Период сохранения потерянных ресурсов: 7d
Описание:
Директория где искать задается в Макросе узла
Так же указать порт если он отличается от 10050
- Linux Прототипы элементов данных свойств файлов
- Прототип элемента Время изменения свойств файла
Имя: Время изменения свойств файла {#NAMEFILELINUX}
Тип: Zabbix Агент
Ключ: vfs.file.time[«{#FILESIZELINUX}»,change]
Тип информации: Числовой (с плавающей точкой)
Единица измерения: unixtime
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание: в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
Создать активированным: V
- Прототип элемента Время изменения файла
Имя: Время изменения файла {#NAMEFILELINUX}
Тип: Zabbix Агент
Ключ: vfs.file.time[«{#FILESIZELINUX}»,modify]
Тип информации: Числовой (с плавающей точкой)
Единица измерения: unixtime
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание: в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
Создать активированным: V
- Прототип элемента Время последнего доступа
Имя: Время последнего доступа {#NAMEFILELINUX}
Тип: Zabbix Агент
Ключ: vfs.file.time[«{#FILESIZELINUX}»,access]
Тип информации: Числовой (с плавающей точкой)
Единица измерения: unixtime
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание: в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
Создать активированным:
- Прототип элемента Наличие файла
Имя: Наличие файла {#NAMEFILELINUX}
Тип: Zabbix Агент
Ключ: vfs.file.exists[«{#FILESIZELINUX}»]
Тип информации: Числовой (целое положительное)
Единица измерения:
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание:
1 — файл найден
0 — файл не найден
Создать активированным: V
- Прототип элемента Размер файла
Имя: Размер файла {#NAMEFILELINUX}
Тип: Zabbix Агент
Ключ: vfs.file.size[«{#FILESIZELINUX}»]
Тип информации: Числовой (с плавающей точкой)
Единица измерения: B
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание: Запрос 4 раза в сутки, получаем размер файла в байтах
Создать активированным: V
Прототипы триггеров
- Linux Обнаружение файлов Прототипы триггеров
- Linux Обнаружение файлов Прототип триггера Размер файла Более
Имя: {HOST.NAME}-Размер-файла-{#NAMEFILELINUX}-Более>9GB
Важность: Средняя
Выражение:
{Discovery-size-file:vfs.file.size[«{#FILESIZELINUX}»].last()}>9663676416 or
{Discovery-size-file:vfs.file.size[«{#FILESIZELINUX}»].nodata(25h)}=1
Разрешить закрывать вручную: V
Описание:
Размер файла {#FILESIZELINUX} на {HOST.NAME} более ГБ
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Если данных нет 25 часов ошибка
Создать активированным: V
- Linux Обнаружение файлов Прототип триггера Файл старый или отсутствует либо битый
Имя: Файл старый или отсутствует либо битый {#NAMEFILELINUX}
Важность: Средняя
Выражение:
{Discovery-size-file:vfs.file.exists[«{#FILESIZELINUX}»].max(25h)}=0 or
{Discovery-size-file:vfs.file.time[«{#FILESIZELINUX}»,modify].fuzzytime(25h)}=0 or
{Discovery-size-file:vfs.file.size[«{#FILESIZELINUX}»].last(#2)}/{Discovery-size-file:vfs.file.size[«{#FILESIZELINUX}»].last()}<0.9 or
{Discovery-size-file:vfs.file.size[«{#FILESIZELINUX}»].last()}/{Discovery-size-file:vfs.file.size[«{#FILESIZELINUX}»].last(#2)}>1.1
Разрешить закрывать вручную: V
Описание:
Проверки:
1.Наличие файла
2.Дата изменения файла не более 25 часов
3.Проверяем что файл не битый и увеличения размера происходит нормально.
Старый размер делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1
Путь {#FILESIZELINUX}
Создать активированным: V
Windows Обнаружение файлов в определенной директории
- Windows Обнаружение файлов в определенной директории
Прототипы Элементов Windows Обнаружение файлов
- Прототипы Элементов Windows Обнаружение файлов
Windows Обнаружение файлов Прототипы триггеров
- Windows Обнаружение файлов Прототипы триггеров
Прототипы элемента данных Windows, все аналогично прототипам Элементов данных Linux
Прототипы триггеров так же аналогичны Linux прототипам
Отличие в макросах:
{#NAMEFILEWIN} — Имя файла
{#FILESIZEWIN} — путь и имя файла
При возникновении ошибки в правиле обнаружения ошибка прилетает в элемент данных
Имя: Ошибки Правила Обнаружения Файлов
Тип: Zabbix траппер
Ключ: errordiscoveryfile
Тип информации: Текст
Период хранения истории: 90d
Группы элементов данных: Проверка файлов
Активировано: V
- Ошибки Правила Обнаружения Файлов
Скрипт size-file.sh
Код: Выделить всё
#!/bin/bash
#2021/09/01 v1
# Автор Мамзиков Артём Андреевич Описание по скрипту
# Получение списка файлов в папке в определенной директории и мониторинг их размера
# Объявим входные переменные(variable) и если входная переменная пустая задаем дефолтные настройки для некоторых переменных
IP=$1
PORT=${2:-10050}
BLOCSCRIPT=$3
DIRPUT=$4
FILTR=${5:-.*}
HIDE=${6:-^$}
KODR="${7:-cp866}"
HOSTNAME=$8
ACTIVPORT=${9:-10051}
# Для теста просмотр входных переменных
STV=$(date "+%F %T")
#echo "${STV}" "${IP}" "${PORT}" "${BLOCSCRIPT}" "${DIRPUT}" "${FILTR}" "${HIDE}" "${HOSTNAME}" "${ACTIVPORT}" >> /tmp/log
IFS=$'\n'
SEP=""
if [[ $BLOCSCRIPT = "discovery" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $DIRPUT)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
# ls -aF a -отобразить все содержимое, параметр F -Добавить специальные символы к именам файлов, которые показывают, что это за файл, -v "/" не отображать директории(папки)
get=`zabbix_get -s $IP -p $PORT -k system.run["ls -aF "${puti}"|grep -av "/""]`
# Запрашиваем файлы в папке циклом, так же можем задать соответствие имен через |
#for filep in $(echo "${get}" 2>/dev/null| grep -i -E -a -w "$5")
# убрать спец символы в конце файлов|Для выполнения команды в sed указать команду $(команда) например $(date +"%d.%m.%Y") можно дополнить \|искомые\|искомые'/Ip' получаем sed -n '/'$(date +"%d.%m.%Y")'\|искомые\|искомые'/Ip'
for filep in $(echo "${get}" 2>/dev/null|sed 's/\*$\|\@$//g'|sed -n '/'$FILTR'/Ip'|sed -e '/'$HIDE'/d')
do
JSON=$JSON"$SEP\n{\"{#FILESIZELINUX}\":\""${puti}"/$filep\", \"{#NAMEFILELINUX}\":\"$filep\"}"
SEP=", "
done
done
# Выводим результат в json
JSON="["$JSON"\n]"
echo -e "${JSON}"
fi
if [[ $BLOCSCRIPT = "discoverywin" ]]
then
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo $DIRPUT)
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
get=`zabbix_get -s $IP -p $PORT -k system.run["dir /a-d /B \""${puti}"\""]`
# Избавимся от CR Возврат каретки если нужно можно еще от LF Перевод строки \r \n ; главное убрать \r иначе ломает весь вывод
obr=$(echo "${get}"|tr -d '\r')
# Запрашиваем файлы циклом
#for filep in "${obr}"
# Если корректно не отображается русский перекодируем из cp866 или cp1251 в utf8
for filep in $(echo "${obr}"|iconv -f "${KODR}" -t utf8| sed -n '/'$FILTR'/Ip'|sed -e '/'$HIDE'/d')
do
# Для передачи на заббикс сервер при выводе должно быт два слеша \\ (на каждом этапе теряется 1 слеш и 1 слеш экранирует другой)
#put=$(echo "${puti}"|sed 's/\\/\\\\\\/g')
SL='\\\'
put="${puti//\\/\'\\\\\\\'}"
JSON=$JSON"$SEP\n{\"{#FILESIZEWIN}\":\""${put}"'$SL'"${filep}"\", \"{#NAMEFILEWIN}\":\"$filep\"}"
# Ввиду сложности передачи слешей windows, преобразуем в пути \ в обратные слеши /
#put=$(echo "${puti}"|sed 's/\\/\//g')
#put="${puti//\\//}"
# Объединим все в один путь, в одну выходную переменную
#JSON=$JSON"$SEP\n{\"{#FILESIZEWIN}\":\""${put}"/$filep\", \"{#NAMEFILEWIN}\":\"$filep\"}"
SEP=", "
done
done
# Выводим результат в json
JSON="["$JSON"\n]"
# Вывод построчно с экранированными кавычками слешами '\\'
JSON=$(echo -e "${JSON}")
# Избавимся от одинарных кавычек ' и получим читаемый построчный вариант
echo "${JSON//\'/}"
fi
# Проверка на ошибки, так как для 1 узла одновременно могут быть указаны несколько программ одна из них может давать ошибку в этом случае от другой программы JONS не примется, поэтому скрываем ошибки
# Ответы с хоста|Преобразуем в 1 строку|Ищем регуляркой ошибки, если найдено выводим ERROR и убираем из вывода HW с ошибкой. А ошибки отправляем траппером в элемент "Ошибки Правила Обнаружения HM"|Скрыть вывод
check=$(echo "${get}"|tr -d '\r\n'| sed -n 's/No Instance(s) Available.*\|Node.*\|ERROR.*\|Invalid.*\|fatal:.*\|команда не найдена.*\|.*невозможно получить доступ.*\|.*Cannot obtain file information.*\|.*Нет такого файла или каталога.*\|.*No such file or directory.*\|.*Файл не найден.*/ERROR/Ip')
# Указываем IP или DNS Заббикс сервера, по умолчанию должно работать localhost так как скрипт находится на самом сервере заббикс.
IPZBXSERVER=localhost
# Очистить строки если ошибка в ПО, по имени программы удалим строки из вывода содержащие ее.; отправить траппер с ошибкой.
if [[ ${check} == *ERROR* ]]; then zabbix_sender -z $IPZBXSERVER -p $ACTIVPORT -s ""${HOSTNAME}"" -k errordiscoveryfile -o ""${get}"" > /dev/null;fi
if [[ $BLOCSCRIPT = "runscript" ]]
then
zabbix_get -s $IP -p $PORT -k system.run["$4 $5 $6 $7 $8 $9 ${10}",nowait]
# Для тестирования вывод в лог
#SDATE=`date '+%d.%m.%y %H:%M:%S'`
#echo ${SDATE} zabbix_get -s $1 -p $2 -k system.run["$4 $5 $6 $7 $8 $9 ${10}",nowait] >> /tmp/log
fi
if [[ $BLOCSCRIPT = "runscriptwin" ]]
then
# Удалим одинарные кавычки из входных переменных, так как они не принимаются в cmd нужны только 2-ные кавычки
four=`echo $4|sed 's/^'\''\|'\''$//g'`
five=`echo $5|sed 's/^'\''\|'\''$//g'`
six=`echo $6|sed 's/^'\''\|'\''$//g'`
seven=`echo $7|sed 's/^'\''\|'\''$//g'`
eight=`echo $8|sed 's/^'\''\|'\''$//g'`
nine=`echo $9|sed 's/^'\''\|'\''$//g'`
ten=`echo ${10}|sed 's/^'\''\|'\''$//g'`
zabbix_get -s $IP -p $PORT -k system.run["${four} ${five} ${six} ${seven} ${eight} ${nine} ${ten}",nowait]
# Для тестирования вывод в лог
#SDATE=`date '+%d.%m.%y %H:%M:%S'`
#echo ${SDATE} zabbix_get -s $1 -k system.run["${four} ${five} ${six} ${seven} ${eight} ${nine} ${ten}",nowait] >> /tmp/log
fi
2 Способ получение данных через trapper
Обнаружение происходит аналогично 1 способу, но прототипы элементов отличаются от первого варианта.
Для долгих запросов которые не успевают опоросится через Zabbix Agent.
- LLD обнаружение файлов Linux Windows Работа через Trapper
Имя: Linux Обнаружение Файлов в определенной директории Trapper
Тип: Внешняя проверка
Ключ: size-file.sh[{HOST.CONN},{$HOST.PORTS},discovery,{$PUTFILE},{$FILTRFILE},{$HIDEFILE},{$KODR},{HOST.HOST},{$HOST.PORTSACTIV},trapper]
Интервал обновления: 24h
Период сохранения потерянных ресурсов: 7d
Описание:
Директория где искать задается в Макросе узла
Так же указать порт если он отличается от 10050
Для долгих запросов, используем скрипт, через крон или заббикс элемент и траппер для передачи данных информации о файлах
- Linux Обнаружение Файлов в определенной директории Trapper
- Linux Прототипы элементов данных свойств файлов Trapper
Имя: Trapper-Время изменения свойств файла {#NAMEFILELINUX}
Тип: Zabbix траппер
Ключ: trapstimechange[«{#FILESIZELINUX}»]
Тип информации: Текст
Группы элементов данных: Проверка файлов
Описание: в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
Создать активированным: V
На момент написание дата приходит как есть, а не в числовом значении unixtime .
- Trapper-Время изменения свойств файла {#NAMEFILELINUX}
Остальные прототипы элементов так же идентичны 1 способу.
Отличие в том что:
1.В имя добавлено: Trapper-
2.Тип: Zabbix траппер
3.Ключи: trapstimechange[«{#FILESIZELINUX}»] ; trapstimemodify[«{#FILESIZELINUX}»] ; trapstimeaccess[«{#FILESIZELINUX}»] ; trapexists[«{#FILESIZELINUX}»] ; trapsizefile[«{#FILESIZELINUX}»]
Данные приходят в элементы при помощи скрипта который необходимо поместить на наблюдаемый узел.
Пример расположения: /etc/zabbix/scripts/dir-file-trappet.sh
Код: Выделить всё
#!/bin/bash
# Входные данные $1 -Имя узла сети {HOST.HOST} ; $2 -Активный порт агента ;$3 - директории через точку запятую какие нужно проверить
# Пример команды ./ИмяТекущегоСкрипта.sh "HOST.HOST" "/root;/var/www/owncloud/data"
# Данный скрипт в указанной папке сканирует файлы, далее поочередно запрашивает их размер
# Объявим входные переменные(variable) и если входная переменная пустая задаем дефолтные настройки для некоторых переменных
NAMEHOST=$1
PORT=${2:-10051}
DIRPUT=$3
FILTR=${4:-.*}
HIDE=${5:-^$}
# Для теста просмотр входных переменных
STV=$(date "+%F %T")
#echo "${STV}" "${NAMEHOST}" "${DIRPUT}" "${FILTR}" "${HIDE}" >> log
# Указываем IP или DNS Заббикс сервера, по умолчанию должно работать localhost так как скрипт находится на самом сервере заббикс.
IPZBXSERVER=192.168.175.111
# Проверка нескольких директорий на 1 хосте, делим через ;
IFS=';' read -ra sumdir < <(echo "${DIRPUT}")
# Печать разделенной строки
for puti in "${sumdir[@]}"
do
# # ls -aF a -отобразить все содержимое, параметр F -Добавить специальные символы к именам файлов, которые показывают, что это за файл|скроем из вывода директории (папки)
get=`ls -aF "${puti}"|grep -av "/"`
# Запрашиваем файлы циклом
IFS=$'\n'
for filep in $(echo "${get}" 2>/dev/null|sed 's/\*$\|\@$//g'|sed -n '/'$FILTR'/Ip'|sed -e '/'$HIDE'/d')
do
putfile="${puti}"/"${filep}"
#Наличие файла
if [ -f "${putfile}" ]; then exists=1; else exists=0; fi
# Получение размера в байтах и даты изменения
features=`du -sb --time "${putfile}"`
# Получение размера в байтах | первый столбец
sizefile=`echo "${features}"| awk '{print $1}'`
# Время изменения файла в формате ГГГГ.ММ.ДД ЧЧ:ММ
timemodify=`echo "${features}"| awk '{print $2, $3}'`
# Время изменения свойств файла в формате ГГГГ.ММ.ДД ЧЧ:ММ
timechange=`du -sb --time=ctime "${putfile}"| awk '{print $2, $3}'`
# Время последнего доступа в формате ГГГГ.ММ.ДД ЧЧ:ММ
timeaccess=`du -sb --time=atime "${putfile}"| awk '{print $2, $3}'`
# Формирование массива JONS
JSON=$JSON""${putfile}" exists:"${exists}" sizefile:"${sizefile}" timemodify:"${timemodify}" timechange:"${timechange}" timeaccess:"${timeaccess}"\n"
# Вывод по очередно и отправка траппетом для каждого файла отдельно, Для правила обнаружения Linux Обнаружение Файлов в определенной директории Trapper
#echo "${putfile}" exists:"${exists}" sizefile:"${sizefile}" timemodify:"${timemodify}" timechange:"${timechange}" timeaccess:"${timeaccess}"
# Отправка данных Наличие файла
#zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapexists[\"""${putfile}""\"] -o ""${exists}""
# Отправка данных Размер файла
#zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapsizefile[\"""${putfile}""\"] -o ""${sizefile}""
# Отправка данных Время изменения файла
#zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapstimemodify[\"""${putfile}""\"] -o ""${timemodify}""
# Отправка данных Время изменения свойств файла
#zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapstimechange[\"""${putfile}""\"] -o ""${timechange}""
# Отправка данных Время последнего доступа
#zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapstimeaccess[\"""${putfile}""\"] -o ""${timeaccess}""
# Очистка переменных, от случайного попадания предыдущего значения
exists=
sizefile=
timemodify=
timechange=
timeaccess=
done
done
# Вывод одним списком для всех файлов и отправка в виде Лога, Для правила обнаружения Linux Обнаружение Файлов в определенной директории Trapper Логом, через элемент Info-File-Trapper-LOG-Linux
#echo -e "${JSON}"
# Вывод визуально построчно
JSON=$(echo -e "${JSON}")
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k filelog -o "${JSON}"
# Проверка на ошибки, так как для 1 узла одновременно могут быть указаны несколько программ одна из них может давать ошибку в этом случае от другой программы JONS не примется, поэтому скрываем ошибки
# Ответы с хоста|Преобразуем в 1 строку|Ищем регуляркой ошибки, если найдено выводим ERROR и убираем из вывода HW с ошибкой. А ошибки отправляем траппером в элемент "Ошибки Правила Обнаружения HM"|Скрыть вывод
check=$(echo "${get}"|tr -d '\r\n'| sed -n 's/No Instance(s) Available.*\|Node.*\|ERROR.*\|Invalid.*\|fatal:.*\|команда не найдена.*\|невозможно получить доступ.*\|Cannot obtain file information.*\|Нет такого файла или каталога.*\|No such file or directory.*\|.*Файл не найден.*/ERROR/Ip')
# Очистить строки если ошибка в ПО, по имени программы удалим строки из вывода содержащие ее.; отправить траппер с ошибкой.
if [[ ${check} == *ERROR* ]]; then zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k errordiscoveryfile -o ""${get}"" > /dev/null;fi
Для 2 способа раскомментировать данный блок в скрипте как показано ниже
Его нужно раскоментировать в скрипте для данного способа
Код: Выделить всё
# Отправка данных Наличие файла
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapexists[\"""${putfile}""\"] -o ""${exists}""
# Отправка данных Размер файла
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapsizefile[\"""${putfile}""\"] -o ""${sizefile}""
# Отправка данных Время изменения файла
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapstimemodify[\"""${putfile}""\"] -o ""${timemodify}""
# Отправка данных Время изменения свойств файла
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapstimechange[\"""${putfile}""\"] -o ""${timechange}""
# Отправка данных Время последнего доступа
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k trapstimeaccess[\"""${putfile}""\"] -o ""${timeaccess}""
Данную строку наоборот закомментировать, она для 3 способа
Код: Выделить всё
#zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k filelog -o "${JSON}"
Как запускается скрипт dir-file-trappet.sh
Запуск происходит через элемент данных в заббиксе, при желании можно сделать через Cron указав переменные.
- Запуск удаленного скрипта обнаружение файлов Linux Trapper
Имя: Запуск удаленного скрипта обнаружение файлов, через заббикс агент Linux
Тип: Zabbix Агент
Ключ: system.run[‘{$SCRIPT.TRAPFILE}’ «{HOST.HOST}» «{$HOST.PORTSACTIV}» «{$PUTFILE}» «{$FILTRFILE}» «{$HIDEFILE}»,nowait]
Тип информации: Числовой(целое положительное)
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание:
Запуск удаленного скрипта, через заббикс агент
Для получение данных о размере файлов через trapper
Вместо крона запуск со стороны заббикс сервера
Активировано:
- Запуск удаленного скрипта обнаружение файлов, через заббикс агент Linux
Имя: Запуск удаленного скрипта обнаружение файлов, через основной Linux
Тип: Внешняя проверка
Ключ: size-file.sh[{HOST.CONN},{$HOST.PORTS},runscript,'{$SCRIPT.TRAPFILE}’,»‘{HOST.HOST}'»,»‘{$HOST.PORTSACTIV}'»,»‘{$PUTFILE}'»,»‘{$FILTRFILE}'»,»‘{$HIDEFILE}'»]
Тип информации: Числовой(целое положительное)
Интервал обновления: 6h
Группы элементов данных: Проверка файлов
Описание:
Запуск удаленного скрипта, через основной
Для получение данных о размере файлов через trapper
Вместо крона запуск со стороны заббикс сервера
Получаем команду
zabbix_get -s $IP -p $PORT -k system.run[«$4 $5 $6 $7 $8 $9 ${10}»,nowait]
Активировано:
- Запуск удаленного скрипта обнаружение файлов, через основной Linux
3 Способ получение данных через trapper-Log
Похож на 2 способ, отличие в том что скрипт (тот же самый dir-file-trappet.sh) собирает данные и одним разом отправляет их в 1 элемент данных. Далее прототипы элементов данных Зависимы от основанного элемента куда пришли все данные, после предобработкой регулярным выражением разбираются данные.
Данная строка должны быть раскомментирована
Код: Выделить всё
zabbix_sender -z "${IPZBXSERVER}" -p "${PORT}" -s ""${NAMEHOST}"" -k filelog -o "${JSON}"
Если используются оба 2 и 3 условия для разных узлов, оба варианта в скрипте должны быть раскомментированы!
Возможно для таких случаев сделать условие в скрипте и добавить макрос. (лишний раз впустую не запускать zabbix_sender и не отправлять данные в никуда)
Данные будут попадать в элемент:
Имя: Info-File-Trapper-LOG-Linux
Тип: Zabbix траппер
Ключ: filelog
Тип информации: Текст
Период хранения истории: 90d
Группы элементов данных: Проверка файлов
Описание:
Для долгих элементов подсчета размера файлов
Общий Лог пути и размер файлов, на него настраиваем зависимые элементы
Активировать необходимо если используется правило авто обнаружения
Linux Обнаружение файлов в определенной директории Trapper Логом
Активировано: V
- Info-File-Trapper-LOG-Linux
- LLD обнаружение файлов Linux Windows Работа через Trapper-Log
Имя: Linux Обнаружение Файлов в определенной директории Trapper Логом
Тип: Внешняя проверка
Ключ: size-file.sh[{HOST.CONN},{$HOST.PORTS},discovery,{$PUTFILE},{$FILTRFILE},{$HIDEFILE},{$KODR},{HOST.HOST},{$HOST.PORTSACTIV},trapper_log]
Интервал обновления: 24h
Период сохранения потерянных ресурсов: 7d
Описание:
Директория где искать задается в Макросе узла
Так же указать порт если он отличается от 10050
Для долгих запросов,используем скрипт, через крон или элемент заббикс далее траппер отправляет данные одним разом (логом) в 1 элемент, после зависимые элементы распаривают данные.
- Linux Обнаружение Файлов в определенной директории Trapper Логом
- Linux Прототипы элементов данных свойств файлов Trapper-Log
Прототип элемента данных
Имя: Trapper-LOG-Время изменения свойств файла {#NAMEFILELINUX}
Тип: Зависимый элемент данных
Основной элемент данных: Обнаружение файлов и запрос их размера: Info-File-Trapper-LOG-Linux
Ключ: logtimechange[«{#FILESIZELINUX}»]
Тип информации: Текст
Группы элементов данных: Проверка файлов
Описание:
Получаем Время изменения свойств файла {#NAMEFILELINUX} с помощью скрипта и траппера , которые долго обсчитываются. Получаем их из общего лога элемента и обрабатываем регулярным выражением.
Полный путь {#FILESIZELINUX}
формате ГГГГ.ММ.ДД ЧЧ:ММ
Создать активированным: V
Предобработка
Регулярное выражение
{#FILESIZELINUX}.*timechange:(.*) timeaccess:
вывод \1
- Trapper-LOG-Время изменения свойств файла {#NAMEFILELINUX}
Остальные прототипы элементов так же идентичны 1 и 2 способу.
Отличие в том что:
1.В имя добавлено: Trapper-LOG-
2.Тип: Зависимый элемент данных
3.Основной элемент данных: Обнаружение файлов и запрос их размера: Info-File-Trapper-LOG-Linux
4.Ключи: logtimechange[«{#FILESIZELINUX}»] ; logtimemodify[«{#FILESIZELINUX}»] ; logtimeaccess[«{#FILESIZELINUX}»] ; logexists[«{#FILESIZELINUX}»] ; logsizefile[«{#FILESIZELINUX}»]
5. Предобработка: регулярное выражение
{#FILESIZELINUX}.*timechange:(.*) timeaccess:
{#FILESIZELINUX}.*timemodify:(.*) timechange
{#FILESIZELINUX}.*timeaccess:(.*)
{#FILESIZELINUX}.*exists:(.*) sizefile:
{#FILESIZELINUX}.*sizefile:(.*) timemodify:
Вывод везде в: \1
Есть несколько серверов на Centos,(Cpanel) требуется мониторить работу системы бэкапа. Проверять кол-во и размер дневных бэкапов. Думал мониторить забиксом 2 файла в которых значения размера папки, и имена папок. Рисовать график на основе этих двух значений(именя папок по Х размеры по У), но не получается скормить правильно заббиксу эти данные.
Данные в файлах обновляются 1 раз в сутки по средствам du и ls. В файле получается массив данных, а не одно значение.
Или может есть готовы решения для такого плана мониторинга.
-
Вопрос задан
-
9929 просмотров
В свое время задался аналогично задачей, только парк серверов был значительно больше. В результате получил такое решение goo.gl/Z2kAFb , берите за основу и настраивайте под свои задачи.
Пригласить эксперта
А зачем заббикс к этому привлекать?
Вы же можете настроить скрипт на серваке, который будет проверять наличие файлов, и при отсутствии сделать уведомление на почту.
используйте не >> а > при выводе в файл. и будет одно значени
Добрый день,
Могу порекомендовать Вам обратить внимание на vfs.file.ХХХ. Можете проверять наличие файлов, дату их изменения, соответствие regexp и т.д. Вот тут подробнее.
Более гибкий, имхо, вариант — использовать UserParameter с внешним скриптом. Скрипт выполняется и передает zabbix-agent’у результат. Вы, в свою очередь, вольны настроить отдаваемые скриптом значения так, как Вам надо, а на сервере прикрутить на них триггеры.
Если вы хотите это видеть на одном графике то вам нужен некий bar chart а не график, и заббикс такого не умеет (репорты не считаем).
Если содержимым файлов вы можете управлять можете подогнать его под формат zabbix_sender и высылать метрики им. Но придется на каждое имя папки создать свою метрику. Создавать опять же можно автоматически через LLD.
Войдите, чтобы написать ответ
-
Показать ещё
Загружается…