Elasticsearch — инструмент для сбора и анализа данных среднего объёма
Если бизнес предполагает выполнение анализа статистических данных, которые поступают из разных источников, то вам в любом случае потребуется эти данные не только собирать и хранить, но и индексировать, анализировать и даже преобразовывать в другие данные. Какое решение подойдёт лучше, если речь идёт о данных среднего объёма? Об этом — наша статья.
На практике мы нередко сталкиваемся с тем, что масштаб проекта недостаточен для внедрения крупных платформ типа Hadoop. В таком случае следует обратить внимание на стандартные NoSQL-решения, позволяющие эффективно работать с данными среднего объёма. Именно к таковым решениям и относится Elasticsearch.
Elasticsearch — что это?
Elasticsearch представляет собой кластерную NoSQL с JSON REST API. Его можно назвать нереляционным хранилищем документов в JSON-формате и поисковой системой на базе полнотекстового Lucene-поиска. Аппаратной платформой является JVM — Java Virtual Machine. При этом официальные клиенты доступны на: • Python, • Groovy, • Java, • NET (C#), • PHP, • Perl, • JavaScript, • Ruby.
Elasticsearch разработан компанией Elastic одновременно со связанными проектами (их называют Elastic Stack) — Logstash, Elasticsearch, Beats, Kibana. Kibana осуществляет визуализацию данных через web-интерфейс. Beats — это отправители данных с разных устройств и легковесные агенты. Logstash обеспечивает сбор и обработку данных зарегистрированных событий. Что касается хранения и поиска данных, то за них отвечает Elasticsearch.
В настоящее время Elastic Stack широко используется такими компаниями, как eBay, Adobe, Uber, Volkswagen, Microsoft, Netflix, Amazon и пр. Так почему Elasticsearch так привлекателен?
Пару фактов о системе
Elasticsearch отлично подходит для работы в рамках определённого объёма данных (20–30 млрд документов в индексах, 2–10 терабайт в год), плюс прекрасно интегрируется с кластером Spark.
Агенты (Beats) помогают собирать интересующую информацию на конкретном сервере или устройстве. Посредством этих агентов мы можем собирать различного рода данные: логи ОС Linux, системную информацию Windows, данные устройства на Android. Также есть возможность самостоятельно выполнять анализ трафика с устройства, будь то HTTP, TCP и так далее.
При этом Logstash, локальный для инфраструктуры каждого здания, прекрасно справляется с отправкой данных, которые собирают агенты устройств в централизованный кластер Elasticsearch. Ну а Kibana предоставляет нам удобный способ построения web-отчётов.
О масштабируемости
Эта подсистема статистики способна работать с любой сферой деятельности, в которой нужен сбор и анализ статистических данных, имеющих средний объём. Как пример — обработка статистической информации с одной тысячи до 30 тысяч ноутбуков, мобильных устройств, интерактивных панелей, холодильников и т. п.
Если устройств меньше 1–3 тысячи, то система является избыточной, поэтому лучше обратить внимание на более простые решения. Оптимальный вариант — количество устройств в пределах 10–30 тысяч единиц. Если устройств будет 50 тысяч и более, мы столкнёмся с усложнением системы, поэтому тут тоже лучше искать другое решение. Впрочем, если воспринимать 50–100 тысяч устройств в качестве трёх сегментов по 15–30 тысяч, то мы можем просто запустить 3 подсистемы нашей статистики.
Главная идея — чем больше изолированы «сектора», тем проще использовать решение формата «3 по 30».
Что на базе собранных данных могут получить аналитики?
Наиболее часто встречающийся сценарий — сбор и хранение всей статистики (сырой) по всем сервисам и устройствам за последний месяц и с последующей агрегацией статистики по дням и группировкой по зданиям с «бессрочным» хранением результата. То есть Raw-индексы перезаписываются новыми данными ежемесячно, а Agg-индексы накапливаются «бесконечно» по дням, пока это позволяет дисковое пространство. Прочие пожелания по разбивке и группировке данных (например, по визуальному представлению, аналитическим срезам и т. п.) осуществляются аналитиками самостоятельно с помощью Kibana или Power BI.
Время от времени некоторые данные (обычно новые, получаемые из исходных), выделяют в отдельную задачу предварительного расчёта. Эта задача выполняется посредством вычислительной платформы Spark «по расписанию» с последующим сохранением в очередной Agg-индекс, из которого эти данные уже попадают в сложные отчёты.
По материалам статьи «Почему Elasticsearch — хороший выбор для сбора и анализа данных среднего объёма».