Zabbix: создание элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Автор: | 11/10/2013

zab_logoВ продолжение статей о сервере мониторинга Zabbix – создадим новый элемент данных (item), который будет отслеживать файл лога. К нему – добавим триггер (trigger), который должен срабатывать при появлении определённой строки в файле.

Предполагается, что сервер установлен согласно статье CentOS: установка сервера мониторинга Zabbix, и к нему подключен для наблюдения хост, согласно статье Zabbix: настройка мониторинга — элементы данных (items), графики (graphs), шаблоны (teamplates).

Одно различие – проверки выполняются на локальном хосте.

Начнём с настройки zabbix-agent. Редактируем файл /etc/zabbix/zabbix_agentd.conf:

# устанавливаем в 1, что бы разрешить удалённое выполнение команд - потребуется в будущем для выполнения дейстий (actions)
EnableRemoteCommands=1

# включаем логгирование выполнения удалённых команд
LogRemoteCommands=1

# определяем агенту, какой IP адрес прослушивать для получения команд, указывается внешний IP
ListenIP=127.0.0.1

# задаём внешний IP сервера, с которого будут поступать команды на выполнение активных проверок
ServerActive=127.0.0.1

# задаём имя хоста, должно совпадать с полем Host name в конфигурации хоста на zabbix-сервере
Hostname=lms-teamcity

# разрешаем запуск агента от пользователя root (можно попробовать и без этого)
AllowRoot=1

Последнюю опцию можно установить, например, в случае ошибок вида:

12503:20131008:131447.267 cannot stat '/home/teamcity/logs/limits-app.log': [13] Permission denied
12503:20131008:131447.267 Active check [log["/home/teamcity/logs/limits-app.log","DEBUG"]] is not supported. Disabled.

Не забываем после каждого изменения в файле конфигурации zabbix-агента перезапустить его:

# service zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]

Проверяем лог-файл агента:

# tail /var/log/zabbix/zabbix_agentd.log
23011:20131009:105219.265 Got signal [signal:15(SIGTERM),sender_pid:9288,sender_uid:0,reason:0]. Exiting ...
23010:20131009:105219.265 Got signal [signal:15(SIGTERM),sender_pid:9288,sender_uid:0,reason:0]. Exiting ...
23008:20131009:105219.265 Got signal [signal:15(SIGTERM),sender_pid:9288,sender_uid:0,reason:0]. Exiting ...
23008:20131009:105221.272 Zabbix Agent stopped. Zabbix 2.0.8 (revision 38017).
9302:20131009:105223.459 Starting Zabbix Agent [lms-teamcity]. Zabbix 2.0.8 (revision 38017).
9308:20131009:105223.462 agent #4 started [active checks]
9306:20131009:105223.463 agent #2 started [listener]
9307:20131009:105223.464 agent #3 started [listener]
9305:20131009:105223.464 agent #1 started [listener]
9304:20131009:105223.464 agent #0 started [collector]

Проверяем, под каким пользователем запустился агент:

# ps aux | grep zabbix_agent
root      9159  0.2  0.0 105440  1016 pts/10   S+   10:50   0:00 less /var/log/zabbix/zabbix_agentd.log
root      9302  0.0  0.0  74364  1272 ?        S    10:52   0:00 /usr/sbin/zabbix_agentd
root      9304  0.0  0.0  74364  1208 ?        S    10:52   0:00 /usr/sbin/zabbix_agentd
root      9305  0.0  0.0  74364  1264 ?        S    10:52   0:00 /usr/sbin/zabbix_agentd
root      9306  0.0  0.0  74364  1232 ?        S    10:52   0:00 /usr/sbin/zabbix_agentd
root      9307  0.0  0.0  74364  1028 ?        S    10:52   0:00 /usr/sbin/zabbix_agentd
root      9308  0.0  0.0  74364  1320 ?        S    10:52   0:00 /usr/sbin/zabbix_agentd
root      9362  0.0  0.0 103240   860 pts/8    S+   10:52   0:00 grep zabbix_agent

Переходим к настройке сервера.

В в разделе Configuration > Hosts напротив нужного хоста – нажимаем items:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Кликаем по Create item:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Заполняем поля:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Обязательно указать Type – Zabbix agent (active). Про активный тип проверок можно читать тут>>>.

Key – ключ для элемента данных, подробно описаны тут>>>. На примере проверки лог-файла – указываем путь/к/файлу,выражение,кодировка,количество_строк:

log["/home/teamcity/logs/limits-app.log"]

Проверяется файл /home/teamcity/logs/limits-app.log. Можно указать выражение (regexp), кодировку и количество строк, передаваемых в секунду:

log["/home/teamcity/logs/limits-app.log","ERROR","UTF-8","100"]

Что бы использовать только параметр “количество строк” – разделите пустые поля простыми запятыми, например:

log["/home/teamcity/logs/limits-app.log",,,"100"]

Type of information – Log

Остальные параметры опциональны.

Жмём Save, и переходим к созданию триггера (trigger), который будет срабатывать на этот элемент данных (item).

Кликаем на triggers:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Кликаем на Create trigger:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Заполняем поле Имя (Name). Что бы упростить задачу создания триггера и связать его с только что созданным элементом данных – жмём на Add, в появившемся окне жмём Select и выбираем наш элемент:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Выбираем приложение, далее – выбираем Function – это уже само выражение, согласно которому будет срабатывать триггер.

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Полученное выражение:

Find string V in last () value. N = 1 if found, 0 - otherwise
{lms-teamcity:log["/home/teamcity/logs/limits-app.log"].str(ERROR)}=1

Логика такая: “Найти строку V в последних полученных данных от элемента lms-teamcity:log["/home/teamcity/logs/limits-app.log"], если строка присутствует (N = 1, т.е. found) – то триггер срабатывает, и переходит в статус PROBLEM".

1 - found
0 - otherwise

Что бы проверить как срабатывает выражение – жмём Expression constructor:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Жмём Test:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Выбираем Value = 0 (т.е. string (ERROR) не найдена), жмём Test и получаем результат FALSE – т.е. триггер не сработает или перейдёт в состояние OK, если перед этим был в PROBLEM.

Меняем Value = 1 (т.е. в последних полученных данных слово ERROR найдено) – и получаем результат TRUE:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Необходимо учитывать, что слова в выражении чувствительны к регистру.

Полный список функций для триггеров доступен тут>>> и тут>>>.

Сохраняем триггер, убеждаемся что он готов к работе:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

Если есть ошибка “Trigger just added. No status update so far." – попробуйте подождать 5 минут, либо – перейдите в редактирование триггера и без каких-либо изменений – и нажмите Save ещё раз. И, конечно же, не забывайте проверять логи агента (/var/log/zabbix/zabbix_agentd.log) и сервера (/var/log/zabbix/zabbix_server.log).

Переходим в Monitoring > Events, и наблюдаем как срабатывает триггер:

Zaabix: созадние элемента данных (item) для наблюдения за лог-файлом и добавление триггера

В следующий раз мы создадим Action (Действие), которое должно будет выполняться при срабатывании триггера. Это может быть либо выполнение команды/скрипта на наблюдаемом хосте, либо отправка письма-отчета о срабатывании.