В продолжение статей о сервере мониторинга 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:
Кликаем по Create 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:
Кликаем на Create trigger:
Заполняем поле Имя (Name). Что бы упростить задачу создания триггера и связать его с только что созданным элементом данных — жмём на Add, в появившемся окне жмём Select и выбираем наш элемент:
Выбираем приложение, далее — выбираем Function — это уже само выражение, согласно которому будет срабатывать триггер.
Полученное выражение:
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:
Жмём Test:
Выбираем Value = 0
(т.е. string (ERROR) не найдена), жмём Test и получаем результат FALSE — т.е. триггер не сработает или перейдёт в состояние OK
, если перед этим был в PROBLEM
.
Меняем Value = 1
(т.е. в последних полученных данных слово ERROR найдено) — и получаем результат TRUE:
Необходимо учитывать, что слова в выражении чувствительны к регистру.
Полный список функций для триггеров доступен тут>>> и тут>>>.
Сохраняем триггер, убеждаемся что он готов к работе:
Если есть ошибка «Trigger just added. No status update so far."
— попробуйте подождать 5 минут, либо — перейдите в редактирование триггера и без каких-либо изменений — и нажмите Save ещё раз. И, конечно же, не забывайте проверять логи агента (/var/log/zabbix/zabbix_agentd.log
) и сервера (/var/log/zabbix/zabbix_server.log
).
Переходим в Monitoring > Events, и наблюдаем как срабатывает триггер:
В следующий раз мы создадим Action (Действие), которое должно будет выполняться при срабатывании триггера. Это может быть либо выполнение команды/скрипта на наблюдаемом хосте, либо отправка письма-отчета о срабатывании.