Всем стек ELK хорош, но вот не хватает мне обратной связи от него, а именно уведомлений на почту о каких-то аномальных событиях. Можно конечно в конфиг Logstash заложить отправку письма по определенному событию, но на этом всем возможности и заканчиваются. А хочется, например, получить уведомления, если вырос объем логов от какого-то устройства/сервиса.
Мне удалось найти два плагина для Kibana реализующих такой функционал:
- Официальный, платный.
- KAAE (Kibana Alert & Report App for Elasticsearch)
О втором и пойдет речь.
Устанавливаем его на наш ELK сервер:
# /opt/kibana/bin/kibana plugin —install kaae -u https://github.com/elasticfence/kaae/releases/download/snapshot/kaae-latest.tar.gz
Перемещаем конфиг файл kaae.json из /opt/kibana/installedPlugins/kaae в /etc/
И редактируем его:
{«es»: {«timefield»: «@timestamp»,«default_index»: «watcher»,«type»: «watch»,«alarm_index»: «watcher_alarms»},«kaae»: {«history»: 20,«results»: 50},«settings» : {«email» : {«user»: «[email protected]»,«password»: «пароль»,«host»: «ip_почтового_сервера»,«port»: «25»,«ssl»: false,«tls»: true,«active»: true},«slack» : {«username»: «KAAE»,«hook»: «https://hooks.slack.com/services/<token>»,«channel»: «#kaae»,«active»: false},«report» : {«tmp_path» : «/tmp/»,«active»: true},«pushapps» : {«api_key» : «<pushapps API Key>»,«active»: false}}}
В моем примере я включил отправку уведомлений по почте в Exchange (для этого задействуется emailjs, который поддерживает и авторизацию и tls, и ssl) и формирование отчетов. Так же можно задействовать Slack и пуши в приложение.
После перезагружаем наш сервер и заходим в WEB интерфейс Kibana. И видим новый значок вверху, позволяющий переключаться между приложениями.
Зайдем в KAAE и настроим первый, тестовый Alert:
У меня он выглядит так:
{«_index»: «watcher»,«_type»: «watch»,«_id»: «new»,«_score»: 1,«_source»: {«trigger»: {«schedule»: {«later»: «every 1 minutes»}},«input»: {«search»: {«request»: {«index»: [«<syslog-{now/d}>»,«<syslog-{now/d-1d}>»],«body»: {}}}},«condition»: {«script»: {«script»: «payload.hits.total > 100»}},«transform»: {«script»: {«script»: «payload.hits.total += 100»}},«actions»: {«email_admin»: {«throttle_period»: «1m»,«email»: {«from»: «[email protected]»,«to»: «[email protected]»,«subject»: «KaaE Alarm»,«priority»: «high»,«body»: «Found {{payload.hits.total}} Events»}}}}}
Как можно заметить он состоит из блоков:
Trigger— Schedule— Input— Search— Condition— Script— Transform— Script— Action— Actions
В моем случае раз в минуту с перерывом в минуту (масло… =) ) проверяется количество событий в индексе syslog и если их больше 100, то приходит уведомление на почту.
На этом пока все, продолжаю осваивать ELK и сопутствующую информацию.
P.s. Если письма на почту не приходят смотрите messages лог, я сталкивался со следующими событиями:
Error: message is not a valid Message instance at Object.Client.send — не хватало поле from в скрипте.
Unhandled rejection Error: spawn phantomjs ENOENT — нужно было установить phantomjs
«error»,»message»:»timedout while connecting to smtp server» — неправильно настроены параметры сервера в kaae.json