Zabbix Log Monitoring
Zabbix Мониторинг логов
Это практически первый мой опыт с заббиксом. Если есть ошибки или сделано неоптимально - просьба сообщить
Задача: есть приложение на PHP. Время от времени в логах - ошибки о которых нужно сообщать разработчикам. В лоб воспроизвести ошибки нельзя - они возникают по неясной мне причине.
Кроме того хочется реализовать следующий workflow для разработчиков
- При возникновении ошибки (строка в логах) - поднять алерт (триггер)
- При повторном появлении строки - триггер остается поднятым
- При отсутствии новых ошибок триггер остается поднятым
- Ack подразумевает что разработчик посмотрел на ошибку в логах и начал с ней работать. При нажатии Ack триггер тухнет.
Из-коробки в заббиксе нет ручного выключения триггерров. Отсюда несколько странная логика работы
- На агенте: анализируем строку и шлем через zabbix_sender данные в соответствующий item
- В триггере проверяем данные из item на соответствие и поднимаем триггер
- В триггере есть action который имеет условие Ack = True (и соответственно не работает сразу после поднятия триггера)
- Action содержит команду которая отправит в item данные заведомо не подходящие под условие триггера. Что соответственно вызывает его опускание.
Настройка
Бегло прикинуть какие ошибки бывают:
cat sample1 | grep --color '\[error\]' | sed 's~2016/06/1[0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] \[error\] [0-9]*#0: \*[0-9]*~~' | sed 's~client: [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*,~~' | sed 's~/adrequest.php?order_line_id.*\ HTTP~/adrequest.php~g' | sed 's~GET d=.*HTTP~GET d=.~g' | sed '~adrequest.php?publisher_id.*\HTTP~HTTP~g'| grep 'PHP' | sort | uniq
Ошибки 3 типов (внезапно!):
PHP message: PHP Fatal error PHP message: PHP Warning PHP message: PHP Notice
Zabbix Server
Item
Для каждой из типов ошибок (error, warning, notice) нужно создать свой item:
- Тип - Trap (zabbix_sender работает только с этим типом)
- Тип данных - лог
- Разрешить получение данных со всех хостов
Trigger
Триггер содержит простое условие - если строка содержит собщение об ошибке (ворнинг или нотис) - триггер срабатывает
{Additional_Custom_Checks:nginx_err_log_php_error.str(PHP message: PHP Fatal error)}=1
Action
Trigger: {TRIGGER.NAME} Trigger status: {TRIGGER.STATUS} Trigger severity: {TRIGGER.SEVERITY} Trigger URL: {TRIGGER.URL} Item values: 1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1} Original event ID: {EVENT.ID}
99Act1.png 99Act2.png 99Act3.png
123
screen -dmS zbx_nginx_err /usr/local/zabbix_scripts/monitor_nginx_log_error.sh screen -dmS zbx_nginx_warn /usr/local/zabbix_scripts/monitor_nginx_log_warning.sh screen -dmS zbx_nginx_notice /usr/local/zabbix_scripts/monitor_nginx_log_notice.sh
screen -x There are several suitable screens on: 22143.zbx_nginx_warn (06/17/2016 12:05:25 PM) (Detached) 22080.zbx_nginx_notice (06/17/2016 12:04:33 PM) (Detached) 21435.zbx_nginx_err (06/17/2016 11:35:06 AM) (Detached)