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 и создать сценарий оболочки, который анализирует ваш файл.