В «Магните» только по 1С-системам суточный объем логов переваливает за 100 Гб. Их нужно обрабатывать, использовать, выделять ценные данные. Конечно, мы пользуемся Discover с различными дашбордами и визуализациями. Но иногда необходима оперативность. Тогда пригождается система алертингов: она позволяет создавать оповещения и уведомлять пользователей о различных событиях или изменениях в данных. В рунете не так много материалов по настройке алертингов, поэтому мы решили поделиться своим мануалом в надежде, что это поможет кому-то сберечь драгоценное время. В статье познакомимся с основами работы с алертингами в OpenSearch и настроим один способ доставки оповещений — в Telegram. Ключевой объект системы алертингов OpenSearch — монитор (Monitor). Если в двух словах, то в мониторе необходимо указать: как получать данные для проверки (Query), какие условия проверять в результате запроса выше, какие действия совершить при выполнении условий проверки. Действия — это отправка сообщения по настроенному шаблону в выбранный канал (Channel) оповещений. Мониторов есть несколько типов: Per query monitor – монитор по запросу Per bucket monitor – монитор по подготовленному (агрегированному) набору данных Per cluster metrics monitor – монитор состояния кластера Per document monitor – монитор по документам Composite monitor – составной монитор, нужен для совмещения нескольких мониторов В примерах ниже я буду использовать самый простой монитор по запросу (Per query monitor). Channels – каналы для отправки сообщений. Раньше они назывались Destinations, но команда Amazon сделала ребрендинг (привет, милиция—полиция). Есть 5 типов каналов: Slack – популярный мессенджер Chime – решение от Amazon для проведения онлайн-встреч и совещаний Custom webhook – универсальная отправка HTTP-запросов на нужный адрес с необходимыми данными Email – отправка электронной почты через SMTP Amazon SNS – сервис уведомлений от создателей В зависимости от типа канала открываются дополнительные настройки. Их разберём чуть позже. Представим, что не так давно мы настроили доменную авторизацию в OpenSearch, но пока не отключили базовые учетные записи. Давайте сделаем мониторинг, который будет оповещать нас о факте логина под учетной записью admin. Эти данные по умолчанию OpenSearch собирает в индексы с шаблоном имени security-auditlog-* Вот пример записи, по которой необходимо получить оповещение. Для начала необходимо создать нужный канал. Для этого открываем Management -> Notifications И с помощью кнопки Create channel создаем новый элемент, в котором заполняем имя и описание создаваемого канала, а в качестве типа (Channel type) укажем Custom webhook. Отправлять запросы будем через API Telegram, поэтому указываем настройки согласно правилам используемого API. Method – POST Define endpoints by — Webhook URL Webhook URL — https://api.telegram.org/botТокен_Вашего_Бота/sendMessage?chat_id=ID_Чата_Для_Сообщений Если с сервера OpenSearch обращения к API Telegram нужно делать через прокси, то необходимо выполнить следующие настройки: 1. 	В конфигурационном файле настроек JVM, который можно найти или создать на сервере с OpenSearch по пути opensearch/config/jvm.options, необходимо прописать следующие параметры: 2. 	Если нужно указать пользователя для работы с прокси, то необходимо добавить следующие параметры: После создания канала для отправки сообщений можно приступить к созданию монитора (monitor). Для этого в разделе OpenSearch Plugins выбираем пункт Alerting. В открывшемся окне переходим на вкладку Monitors и создаем новый монитор с помощью команды Create monitor. Указываем, что это будет обычный монитор: Monitor type — Per query monitor. Далее для настройки я буду использовать визуальный редактор. При желании все настройки можно указать с помощью специального синтаксиса. Настроим расписание, по которому будет работать монитор. Я настрою запуск на каждые 10 минут. В блоке Data source необходимо указать, из каких индексов будут выбираться данные, и поле, которое содержит отметку времени. Для решения прикладной задачи я буду выбирать данные из всех логов безопасности OpenSearch. Далее настрою выполнение запроса на выборку данных за последние 10 минут (так как интервал запуска монитора — каждые 10 минут) и установлю отбор по имени пользователя audit_request_effective_user is admin. По умолчанию результат запроса не содержит детальных записей, и если нет необходимости выводить информацию по каждой записи в сообщение, то можно оставить запрос так. Результат запроса без детальных записей: Мне же нужно вывести информацию по первым пяти записям, и я изменю запрос уже в текстовом редакторе. Можно сделать и больше записей, но у Telegram есть ограничение на размер сообщения. Переключу формат редактора на Extraction query editor. В боке редактирования запроса изменю размер выборки "size": 5 Важно помнить, что переключение в визуальный редактор сбрасывает настройки, которые были сделаны в текстовом редакторе, поэтому такие тонкие настройки нужно делать в самом конце. Далее создаем триггер и указываем условие его срабатывания. В моём примере мне необходимо выполнять оповещения, если есть хотя бы одна запись. В триггере необходимо создать действие или действия, которые должны быть выполнены при выполнении условия. Я пока укажу одно событие – отправку сообщения в созданный канал с веб-хуком. А в поле Message необходимо указать шаблон тела POST-запроса к API Telegram, а именно JSON, где в поле text будет находиться шаблон сообщения. Шаблон указывается с использованием синтаксиса mustache. Для примера выведем все IP-адреса, с которых произошёл логин под учетной записью admin. На этом настройка завершена: сохраняем монитор и ждём сообщений в канал Telegram. Описанный подход подойдёт и для решения других задач оповещения: комбинируя различные типы мониторов и каналов, можно решить практически любую задачу. Подход останется прежним: есть данные, условия (triggers) и шаблон сообщения, который отправляется в выбранный канал.