Пример парсинга лога на удалённой машине по timestamp.
Создаётся Item для хоста, с которого будет проверяться лог.
Ключ Item:
log["/var/bash_scripts/test.log","error","UTF-8","10",skip]
Log time format. yyyypMMpddphhpmm соответствует штампу в лог файле test.log. Его содержимое:
.... 2017-10-02_15-57 : timestamp 2017-10-02_15-58 : timestamp 2017-10-02_15-59 : timestamp 2017-10-02_16-00 : timestamp ....
Файл test.log формируется скриптом:
#!/bin/sh log=/var/bash_scripts/test.log DATE=`date +"%Y-%m-%d_%H-%M"` echo "$DATE : timestamp" >> $log
Чтобы созданный Item начал собирать информацию по искомому слову «error» (указано в поле «key» при создании Item), в файл test.log надо поместить строчку с датой (timestamp) и приписать слово «error». Можно сделать скриптом или добавить новые строки в файл вручную.
#!/bin/sh log=/var/bash_scripts/test.log DATE=`date +"%Y-%m-%d_%H-%M"` echo "$DATE : timestamp - error 3" >> $log
В разделе мониторинга Latest Data можно наблюдать за обновлением данных.
*При выполнении данных действий по написанной инструкции, Item не получал данные с лога. Начал получать только тогда, когда я поставил в логе двоеточие после timestamp. Когда двоеточие снова убрал, Item остался рабочим. С чем связано, не разобрался.
Чтобы реагировать на появлением «error» в тестовом файле логов test.log, создаётся тригер для этого же хоста.
Триггер работает по выражению:
{storage:log["/var/bash_scripts/test.log","error","UTF-8","10",skip].count(#10,"error",regexp)}>0
Часть выражения count(#10,»error»,regexp)}>0 считает кол-во найденных «error» в последних десяти значениях Item, которые он взял с файла test.log. Если кол-во «error» будет больше 0 (т.е. появилась минимум одна ошибка), то триггер сработает.
Ещё я использовал такое выражение триггера:
{proxmox.office:log["/var/bash_scripts/rsync_gamework.log","error","UTF-8","10",skip].logsource(error)}=0
Созданный триггер не восстанавливается автоматически, но его можно закрыть вручную. Чтобы он восстанавливался автоматически, необходимо изменить условия его срабатывания. Я написал отдельную развёрнутую статью по этому вопросу, т.к. он требует отдельных разъяснений.
На тот случай, если лог по каким-то причинам перестанет обновляться, можно настроить Item на мониторинг времени изменения файла.
vfs.file.time[/var/log/sync_barman_ftp_err.log,modify]
Для этого Item создаётся триггер, которой сработает, если файл не обновится за какой-то период времени. В данном примере это одни сутки.
Выражение восстановления триггера содержит проверку на изменение файла за последнюю минуту. Т.е. если файл изменился и бэкап выполнен, то в течение минуты триггер восстановится.
Поддерживаемые функции триггеров — https://www.zabbix.com/documentation/3.0/ru/manual/appendix/triggers/functions