пятница, 15 марта 2019 г.

graylog - начало


Централизованный сбор логов - это хорошо известная технология, которая применяется десятилетиями.
Практически любая Linux система имеет на борту rsyslog или syslog-ng, которые из коробки умеют отправлять все логи на удаленный сервер.
Но основная проблема в том, что с ними дальше делать, ведь логи нужно парсить, хранить так чтобы можно было искать, нужны уведомления когда что-то произойдет.
Подобные задачи относительно недавно начали успешно решать, и один из лидеров такого решения - это знаменитый ELK.
Elastic стек - позволяет принимать самые разнообразные данные (big data), производить нормализацию данных (приведение к общему виду), и создавать дашборды для визуализации.
Возможности ELK очень широкие, множество корпораций использует ELK, но при этом стек все же несколько громоздкий и не так прост в конфигурировании.

С другой стороны, есть еще один крупный игрок на рынке сбора данных - это Graylog.




Graylog местами пересекается некоторым функционалом с ELK, но при этом имеет несколько преимуществ.
Он более прост в развертывании (большинство параметров настроены по дефолту), он имеет встроенную систему алертов (в ELK это платная фича, хотя есть и обходные варианты), graylog поддерживает из коробки сообщения syslog (RFC 5424 и RFC 3164) и его интерфейс очень прост и можно сказать даже минималистичен.
И в целом, graylog заточен под одну задачу - сбор, обработка и хранения логов.

Основные компоненты при работе с graylog - это Inputs, Streams, Search, Alerts, Dashboards, Extractors.
Разберем каждый из них по отдельности.

Inputs - ключевой компонент, для того чтобы graylog мог принимать сообщения для начала нужно создать input с указанием протокола и порта, на котором он будет слушать. Здесь стоит пояснить, что предполагается что graylog будет работать от низкопривилегированного пользователя, поэтому порты ниже 1024 он занять не сможет.
Поддерживается как стандартный syslog, собственный вариант GELF (Graylog Extended Log Format), так и filebeat (от ELK).
Именно с создания input и начинается работа с graylog.

Streams - тоже важная фича, некий аналог тэгирования входящих сообщений. Потоки - это механизм, который используется для сортировки сообщений по различным категориям в реальном времени. Сообщения могут принадлежать одному или нескольким потокам. Важно, что уведомления и алерты применяются только на поток.

Search - graylog позволяет производить поиск по логам напрямую, при этом используется упрощенный очень понятный синтаксис.
Результаты поиска можно сохранять или визуализировать, выводя их на дашборды в виде виджетов.

Dashboards - дашборды - это визуализация информации которая находится в логах. В каждом дашборде можно навесить множество различных виджетов - суммарную информацию, счетчики, графики, гистограммы и т.д.

Alerts - это то что выгодно отличает graylog от ELK, функция которая позволяет гибко настроить срабатывание уведомления по заданным условиям.
Условия алертов прикручиваются к потокам и могут основываться на содержимом поля сообщения или превышение количества сообщения. Уведомление срабатывает когда выполнится условие, так же сразу есть функция отправки письма на указанную почту.

Extractors - вместо того чтобы изобретать input и парсер для тысяч различных устройств, форматов и прошивок, graylog разработали концепт в виде экстрактора. Соответственно эти экстракторы подключаются к input и позволяют graylog хосту извлекать данные из любого текста в приходящих сообщениях, чтобы затем поместить этот текст в новое поле.
Звучит немного запутанно, но на деле ничего сложного в этом нет.
Предположим что нам нужно собирать статистику по неудачным попыткам входа по ssh, или рисовать ip-адреса нарушителей на карте (в graylog входит отличный Geo IP модуль). Но проблема в том что по дефолту поле message выглядит так: "Failed password for invalid user john from xxx.xxx.xxx.xxx port 26634 ssh2".
В результате если создать экстрактор который будет по регулярному выражению парсить текстовое поле в определенных сообщениях, и  сохранять ip-адрес в новое поле, которое можно назвать например "attacker_ip", то затем это новое поле уже можно использовать и в дашбордах или в обычном поиске graylog.
К слову, в экстракторах можно использовать конвертеры (converters) на извлекаемых значениях, тем самым появляется возможность конвертировать строку из чисел в integer, или изменить регистр строки, или даже создать хеш.
Так же, с помощью экстракторов можно производить нормализацию сообщений, это бывает необходимо в случае если приходят сообщения, которые немного отличающиеся друг от друга.

Пару слов про Graylog Marketplace.
Это что-то вроде небольшого репозитория (https://marketplace.graylog.org/) где пользователи могут выкладывать так называемые Content Packs - по сути это сохраненная конфигурация (в формате json), которая может включать в себя множество параметров начиная с input и дашбордов и до сохраненных grok паттернов.

Итоги:
graylog - это очень интересное решение для работы с логами, но это не серебряная пуля, там нет магии и сообщения не будут сами фильтроваться и выводится по каким-нибудь приоритетам или критериям.
Но потратив время, вполне можно добиться видимости происходящего в инфраструктуре, а так же оперативно производить быстрый поиск проблем не подключаясь к каждому хосту по отдельности.

Комментариев нет:

Отправить комментарий