Zabbix не обновляет значение из файла ни с помощью log[], ни с помощью элемента vfs.file.regexp[]

Я использую Zabbix 2.2.
У меня очень специфическая среда, где я должен генерировать нужные данные в файл с помощью скрипта, затем загружать этот файл на FTP с хоста и загружать его на Zabbix сервер с FTP.
После загрузки файла я проверяю его по элементам log[] и vfs.file.regexp[].

Я использую эти предметы, как показано ниже:

log[/path/to/file.txt,"C.*\s([0-9]+\.[0-9])$",Windows-1250,,"all",\1]
vfs.file.regexp[/path/to/file.txt,"C.*\s([0-9]+\.[0-9])$",Windows-1250,,,\1]

Строка, которую я анализирую, выглядит следующим образом:

                C:      8195Mb  5879Mb  2316Mb  28.2

Значение, которое я хочу извлечь, равно 28,2 в конце файла.

Проблема, которую я сейчас пытаюсь решить, заключается в том, что при обновлении файла (загрузка с хоста на ftp, затем загрузка с ftp на Zabbix сервер) значение не обновляется.

Я пытался только log[] при запуске, но я подозреваю, что log[] обрабатывает файл как настоящий файл журнала и не проверяет те же строки (хотя, следуя документации, он должен иметь значение "all"), поэтому Я также добавил элемент vfs.file.regexp[].

Журнал [] получил значение в прошлом, но он не обновляется.
Vfs.file.regexp [] до сих пор не получил никакого значения.
Файл file.txt несколько раз перезагружался и перезагружался, и ситуация не меняется.
Кажется, что log[] читает только новые строки в файле, он не проверяет строки, уже перехваченные, если есть какие-либо изменения.

Файл zabbix_agentd.log не сообщает о каких-либо проблемах с доступом к файлу или с конструкцией regexp (он сообщал о "неподдерживаемом" ключе log[], когда у меня что-то не так настроено).

Я использую уровень ведения журнала отладки для агента - я не нашел никакой интересной информации об этой проблеме.

Я понятия не имею, что я могу делать неправильно или что я не знаю о том, как Zabbix выполняет эти проверки. Я вижу два решения для этого: добавление большего количества строк в файл вместо создания нового или создание новых файлов и проверка их с помощью logrt [], но это не удовлетворяет моим желаниям.
Любая помощь очень ценится.
Конечно, я предоставлю дополнительную информацию, если потребуется - пока я не знаю, что еще может быть полезным.

2 ответа

Решение

Элемент log[] предназначен для файлов, размер которых увеличивается построчно, поэтому в вашем случае правильным подходом будет придерживаться vfs.file.regexp[].

С vfs.file.regexp [] вы все делаете правильно, за исключением того, что в Zabbix есть ошибка (сообщаемая как ZBX-8248), которая не позволяет символу $ в регулярных выражениях совпадать с окончаниями строк Windows.

Таким образом, чтобы заставить его работать, вы должны опустить "$" в регулярном выражении.

Я не пробовал функциональность журналов Zabbix, но я предполагаю, что файл журнала открывается один раз при запуске агента Zabbix, а затем остается открытым. Это означает, что даже если вы перезаписываете свой файл, старый дескриптор файла остается открытым, и Zabbix считывает данные оттуда.

Если это так, я предлагаю вам два решения:

1) Каким-то образом отправить сигнал HUP агенту Zabbix (чтобы он снова открыл файлы для чтения)

или же

2) Используйте External script функциональность в Zabbix и создать сценарий оболочки, который анализирует ваш файл.

Другие вопросы по тегам