Как читать значения из текстового файла в Zabbix: contents, regexp и log items
Текстовый файл может содержать одно текущее значение, небольшой статус или постоянно дописываемый журнал. Для этих сценариев в Zabbix нужны разные item keys. Ошибка старых конфигураций — пытаться читать любой файл одним и тем же способом.
Одно значение или небольшой файл
Когда приложение перезаписывает небольшой файл целиком, удобно получить его содержимое через vfs.file.contents[], а затем извлечь нужное значение preprocessing-правилом. Для поиска одной строки подойдут vfs.file.regexp[] или vfs.file.regmatch[].
Журнал, который постоянно растёт
Для логов используйте специализированные log-items, а не чтение всего файла при каждом опросе. Они отслеживают новые строки и позволяют фильтровать события регулярным выражением. При ротации журналов выбирайте механизм, который учитывает смену файлов.
Dependent items вместо повторного чтения файла
Если один файл содержит сразу несколько метрик, полезно создать master item, получить содержимое один раз и разобрать его в несколько dependent items. Это уменьшает число обращений к диску и упрощает поддержку шаблона.
Права доступа агента
Проверка должна выполняться от того пользователя, под которым работает Zabbix agent. То, что файл читается от root, ещё не означает, что его сможет прочитать агент. Не решайте проблему выдачей чрезмерных прав на весь каталог: лучше дать минимально необходимый read-доступ к конкретным данным.
Не путайте пустое значение и отсутствие данных
Пустая строка может быть допустимым содержимым файла, а отсутствие нового значения — отдельной проблемой. Для важных checks добавляйте контроль свежести item и времени обновления исходного файла, чтобы обнаружить зависший скрипт, который перестал генерировать данные.
Хороший пример архитектуры
- приложение пишет компактный JSON или key=value файл;
- Zabbix получает его одним master item;
- preprocessing извлекает отдельные метрики;
- dependent items хранят значения;
- triggers проверяют диапазоны и отсутствие обновлений.
Итог: сначала определите характер файла. Статусный файл, конфигурационный фрагмент и потоковый лог — это три разные задачи, и Zabbix умеет решать их без тяжёлых внешних скриптов.