Обнаружение смонтированных файловых систем
Обзор
Можно обнаруживать смонтированные файловые системы и их свойства:
- имя точки монтирования
- тип файловой системы
- размер файловой системы
- статистика inode
- параметры монтирования
Для этого можно использовать сочетание следующих компонентов:
- элемента данных агента
vfs.fs.getв качестве главного элемента данных - правила обнаружения низкоуровневого обнаружения и прототипов элементов данных, зависящих от него
В режиме full (по умолчанию) статистика файловой системы возвращается только в том случае, если пользователь агента Zabbix имеет разрешение на проход по каждому каталогу в пути к точке монтирования; в противном случае соответствующая файловая система исключается из вывода vfs.fs.get.
Чтобы такие файловые системы обнаруживались и отображались как неподдерживаемые, а не молча пропускались, используйте обнаружение в кратком режиме.
Настройка
Основной элемент данных
Создайте элемент данных агента Zabbix, используя следующий ключ:
vfs.fs.get

Установите тип информации в значение "Text" для потенциально больших JSON-данных.
Данные, возвращаемые этим элементом данных, будут содержать примерно следующее для смонтированной файловой системы:
[
{
"fsname": "/",
"fstype": "ext4",
"bytes": {
"total": 249405239296,
"free": 24069537792,
"used": 212595294208,
"pfree": 10.170306,
"pused": 89.829694
},
"inodes": {
"total": 15532032,
"free": 12656665,
"used": 2875367,
"pfree": 81.487503,
"pused": 18.512497
},
"options": "rw,noatime,errors=remount-ro"
}
]
Зависимое правило LLD
Создайте правило обнаружения на низком уровне типа Зависимый элемент данных:

В качестве мастер-элемента данных выберите элемент vfs.fs.get, который мы создали.
На вкладке LLD macros задайте пользовательские макросы с соответствующим JSONPath:

На вкладке Filters можно добавить регулярное выражение, которое будет отфильтровывать только файловые системы read-write:

Прототип зависимого элемента данных
Создайте прототип элемента данных с типом "Dependent item" в этом правиле LLD.
В качестве мастер-элемента для этого прототипа выберите элемент vfs.fs.get, который мы создали.

Обратите внимание на использование пользовательских макросов в имени и ключе прототипа элемента данных:
- Name: Free disk space on {#FSNAME}, type: {#FSTYPE}
- Key: Free[{#FSNAME}]
В качестве типа информации используйте:
- Numeric (unsigned) для метрик вроде 'free', 'total', 'used'
- Numeric (float) для метрик вроде 'pfree', 'pused' (percentage)
На вкладке Preprocessing прототипа элемента данных выберите JSONPath и используйте следующее выражение JSONPath в качестве параметра:
$.[?(@.fsname=='{#FSNAME}')].bytes.free.first()

Когда обнаружение начнется, для каждой точки монтирования будет создан один элемент данных. Этот элемент данных будет возвращать количество свободных байтов для указанной точки монтирования.
Обнаружение в кратком режиме
В качестве альтернативы зависимому правилу обнаружения можно создать правило обнаружения типа Zabbix agent со следующим ключом:
vfs.fs.get[short]
В режиме short элемент данных возвращает список смонтированных файловых систем без статистики дискового пространства и inode, например:
[
{
"fsname": "/",
"fstype": "ext4",
"options": "rw,noatime,errors=remount-ro"
},
{
"fsname": "/home",
"fstype": "xfs",
"options": "rw,relatime,attr2,inode64,noquota"
}
]
Поскольку агент не запрашивает сами файловые системы, обнаружение не запускает автомонтирование и не задерживается из-за не отвечающих сетевых файловых систем. Его также можно запускать реже, чем сбор данных, например один раз в час.
На вкладке Макросы LLD определите пользовательские макросы с соответствующими выражениями JSONPath, например {#FSNAME} - $.fsname и {#FSTYPE} - $.fstype.
Затем создайте прототип элемента данных типа Zabbix agent, который возвращает статистику одной обнаруженной файловой системы:
- Ключ:
vfs.fs.get[full,{#FSNAME}] - Тип информации: Текст
- Предобработка: JSONPath
$[0]
Используйте этот прототип элемента данных как мастер-элемент для прототипов зависимых элементов данных, например с выражением JSONPath $.bytes.free, чтобы получить количество свободных байтов.
Если агент не может получить статистику обнаруженной файловой системы, например из-за отсутствия разрешений, vfs.fs.get[full,{#FSNAME}] возвращает пустой массив, шаг предобработки $[0] завершается с ошибкой, а элемент данных становится неподдерживаемым. Таким образом, проблема становится видимой, вместо того чтобы файловая система была незаметно пропущена.
Обратите внимание, что такая конфигурация выполняет отдельную проверку агентом для каждой обнаруженной файловой системы.
Этот подход используется в шаблонах ОС, поставляемых с Zabbix, и требует Zabbix agent версии 8.0 или более поздней.