Ниже будет предоставлена структура книги о приведен отрывок про агрегации.
Структура книги
Глава 1 «Введение в Elastic Stack» знакомит с основными компонентами Elastic Stack, объясняет их роль в общей структуре, описывает назначение каждого компонента. В этой главе также рассказывается о необходимости распределенного, масштабируемого поиска и анализа, которые достигаются с помощью Elasticsearch. В конце приводится руководство по скачиванию и установке Elasticsearch и Kibana, чтобы можно было начать работу с этими инструментами.
Глава 2 «Начало работы с Elasticsearch» знакомит с ключевыми принципами работы поисковой системы Elasticsearch, которая является основой Elastic Stack. Вы познакомитесь с такими концепциями, как индексы, типы, узлы и кластеры. Вы также узнаете, как использовать REST API для выполнения основных операций.
Глава 3 «Поиск — вот что важно» фокусируется на методах поиска, предоставляемых Elasticsearch. Вы узнаете об основах анализа текста, токенизаторах, анализаторах, особенностях релевантного поиска. В этой главе также приводятся практические примеры релевантного поиска.
Глава 4 «Анализ данных с помощью Elasticsearch» расскажет о различных типах агрегации. Она включает примеры, которые позволят вам лучше понять принципы анализа данных. Вы научитесь использовать различные виды агрегаций — от простейших до сложных, чтобы сориентироваться в огромных массивах данных. Прочитав эту главу, вы узнаете, когда и какой вариант агрегации лучше задействовать.
Глава 5 «Анализ журнальных данных» содержит информацию о необходимости использования Logstash, его архитектуре, установке и настройке. В Elastic 5 предоставляется инструмент Ingest Node, который может заменить конфигурацию Logstash. Прочитав эту главу, вы научитесь создавать контейнеры с использованием Elastic Ingest Node.
Глава 6 «Разработка контейнеров с помощью Logstash» дает основополагающие знания о Logstash, позволяющем динамически идентифицировать данные из различных источников и нормализовать их с помощью выбранных фильтров. Вы узнаете, как наличие широкого набора фильтров ставит Logstash в один ряд с другими фреймворками потоковой обработки в реальном и околореальном времени без написания кода. Вы также познакомитесь с платформой Beats и компонентом FileBeat, используемым для транспортировки лог-файлов (файлов регистрации) с удаленных машин.
Глава 7 «Визуализация данных в Kibana» показывает эффективность использования Kibana для визуализации и впечатляющего представления ваших данных. На примере простого набора данных описывается создание визуализаций в пару кликов.
Глава 8 «Elastic X-Pack» рассказывает о расширении Elasticsearch. К этому времени вы уже изучите Elasticsearch и его ключевые компоненты для создания контейнеров данных и сможете подключать расширения для решения конкретных задач. В этой главе вы прочтете, как установить и настроить компоненты X-Pack в Elastic Stack, усвоите азы безопасности и мониторинга и научитесь добавлять различные уведомления.
Глава 9 «Запуск Elatic Stack в работу» дает рекомендации по запуску комплекса Elastic Stack в промышленную эксплуатацию. Вы получите рекомендации по внедрению вашего приложения в работу и изменению стандартных настроек согласно требованиям эксплуатации. Вы также узнаете, как использовать облачные сервисы Elastic Cloud.
Глава 10 «Создание приложения для анализа данных с датчиков» описывает создание приложения для анализа и обработки данных, получаемых из различных источников. Вы узнаете, как моделировать данные в Elasticsearch, создавать контейнеры данных и визуализировать их в Kibana. Вы также научитесь эффективно использовать компоненты X-Pack для обеспечения безопасности и мониторинга ваших контейнеров, получать уведомления о различных событиях.
Глава 11 «Мониторинг серверной инфраструктуры» демонстрирует возможности использования Elastic Stack для настройки мониторинга в реальном режиме времени для серверов и приложений, которые созданы целиком на Elastic Stack. Вы познакомитесь еще с одним компонентом платформы Beats — Metricbeat, который применяется для мониторинга серверов/приложений.
Агрегации суммы, среднего, максимального и минимального значений
Поиск суммы поля, минимального или максимального значения или среднего числа являются довольно распространенными операциями. В SQL запрос для вычисления суммы выглядит следующим образом:
SELECT sum(downloadTotal) FROM usageReport;
Таким образом будет вычислена сумма поля downloadTotal по всем записям в таблице. Для этого необходимо пройтись по всем записям таблицы или по всем записям в выбранном контексте и добавить значения выбранных полей.
В Elasticsearch вы можете написать похожий запрос, используя агрегацию суммы.
Агрегация суммы
Вот как написать простую агрегацию суммы:
GET bigginsight/_search
{
"aggregations": { 1
"download_sum": { 2
"sum": { 3
"field": "downloadTotal" 4
}
}
},
"size": 0 5
}
- Элементы aggs или aggregations на верхнем уровне должны служить оберткой агрегации.
- Дайте агрегации имя. В данном случае мы выполняем агрегацию суммы в поле downloadTotal и выбрали соответствующее имя download_sum. Вы можете назвать ее как угодно. Это поле пригодится, когда нам понадобится найти эту конкретную агрегацию в результатах ответа.
- Мы делаем агрегацию суммы, следовательно, применяется элемент sum.
- Мы хотим сделать агрегацию терминов по полю downloadTotal.
- Укажите size = 0, чтобы предотвратить попадание в ответ необработанных результатов. Нам нужны только итоги агрегации, а не результаты поиска. Поскольку мы не указали никаких высокоуровневых элементов query, запрос будет работать со всеми документами. Нам не нужны в ответе необработанные документы (или результаты поисковой выдачи).
Ответ должен выглядеть следующим образом:
{
"took": 92,
...
"hits": {
"total": 242836, 1
"max_score": 0,
"hits": []
},
"aggregations": { 2
"download_sum": { 3
"value": 2197438700 4
}
}
}
Разберемся в основных параметрах ответа.
- Элемент hits.total показывает количество документов, соответствующих контексту запроса. Если не указан дополнительный запрос или фильтр, будут включены все документы в типе или индексе.
- По аналогии с запросом этот ответ помещен внутрь агрегации для представления в таком виде.
- Ответ запрошенной нами агрегации имеет название download_sum, следовательно, мы получаем наш ответ от агрегации суммы внутри элемента с таким же именем.
- Фактическое значение выводится после применения агрегации суммы.
Агрегации среднего, максимального, минимального значений очень похожи. Кратко их рассмотрим.
Агрегация среднего значения
Агрегация среднего находит среднее значение по всем документам в контексте запроса:
GET bigginsight/_search
{
"aggregations": {
"download_average": { 1
"avg": { 2
"field": "downloadTotal"
}
}
},
"size": 0
}
Заметные отличия от агрегации суммы состоят в следующем.
- Мы выбрали другое название, download_average, чтобы было ясно, что данная агрегация призвана вычислить среднее значение.
- Тип выполняемой агрегации — avg вместо sum, как в предыдущем примере.
Структура ответа идентична ответу из предыдущего подраздела, но в поле значения мы увидим среднее значение запрошенных полей.
Агрегации минимального и максимального значений аналогичны.
Агрегация минимального значения
Найдем минимальное значение поля downloadTotal во всем индексе/типе:
GET bigginsight/_search
{
"aggregations": {
"download_min": {
"min": {
"field": "downloadTotal"
}
}
},
"size": 0
}
Агрегация максимального значения
Найдем максимальное значение поля downloadTotal во всем индексе/типе:
GET bigginsight/_search
{
"aggregations": {
"download_max": {
"max": {
"field": "downloadTotal"
}
}
},
"size": 0
}
Это очень простые агрегации. Теперь рассмотрим более усложненные агрегации статистики и расширенной статистики.
Агрегации статистики и расширенной статистики
Указанные агрегации вычисляют некоторые распространенные статистические значения в пределах одного запроса и без выполнения дополнительных запросов. Благодаря тому что статистические данные вычисляются в один заход, а не запрашиваются несколько раз, экономятся ресурсы Elasticsearch. Клиентский код также становится проще, если вы заинтересованы в нескольких видах таких данных. Взглянем на пример агрегации статистики.
Агрегация статистики
Агрегация статистики вычисляет сумму, среднее, максимальное, минимальное значение и общее количество документов в один заход:
GET bigginsight/_search
{
"aggregations": {
"download_stats": {
"stats": {
"field": "downloadTotal"
}
}
},
"size": 0
}
Запрос статистики по структуре аналогичен другим метрическим агрегациям, о которых вы уже знаете; ничего особенного здесь не происходит.
Ответ должен выглядеть следующим образом:
{
"took": 4,
...,
"hits": {
"total": 242836,
"max_score": 0,
"hits": []
},
"aggregations": {
"download_stats": {
"count": 242835,
"min": 0,
"max": 241213,
"avg": 9049.102065188297,
"sum": 2197438700
}
}
}
Как видите, ответ с элементом download_stats содержит общее количество, минимальное, максимальное, среднее значение и сумму. Такой вывод очень удобен, так как уменьшает количество запросов и упрощает клиентский код.
Взглянем на агрегацию расширенной статистики.
Агрегация расширенной статистики
Агрегация extended stats возвращает немного больше статистики в дополнение к предыдущему варианту:
GET bigginsight/_search
{
"aggregations": {
"download_estats": {
"extended_stats": {
"field": "downloadTotal"
}
}
},
"size": 0
}
Ответ будет выглядеть следующим образом:
{
"took": 15,
"timed_out": false,
...,
"hits": {
"total": 242836,
"max_score": 0,
"hits": []
},
"aggregations": {
"download_estats": {
"count": 242835,
"min": 0,
"max": 241213,
"avg": 9049.102065188297,
"sum": 2197438700,
"sum_of_squares": 133545882701698,
"variance": 468058704.9782911,
"std_deviation": 21634.664429528162,
"std_deviation_bounds": {
"upper": 52318.43092424462,
"lower": -34220.22679386803
}
}
}
}
В ответе вы также получаете сумму квадратов, расхождение, стандартное отклонение и его границы.
Агрегация мощности
Подсчет уникальных элементов может быть выполнен с помощью агрегации мощности. Это похоже на поиск результата запроса, как показано ниже:
select count(*) from (select distinct username from usageReport) u;
Определение мощности или количества уникальных значений для конкретного поля является довольно распространенной задачей. Например, если у вас есть поток кликов1 (click-stream) от различных посетителей вашего сайта, вы можете захотеть узнать, сколько уникальных посетителей на сайте в выбранный день, неделю или месяц.
Разберемся, как найти количество уникальных посетителей с помощью имеющихся данных сетевого трафика:
GET bigginsight/_search
{
"aggregations": {
"unique_visitors": {
"cardinality": {
"field": "username"
}
}
},
"size": 0
}
Ответ агрегации мощности выглядит так же, как и в других метрических агрегациях:
{
"took": 110,
...,
"hits": {
"total": 242836,
"max_score": 0,
"hits": []
},
"aggregations": {
"unique_visitors": {
"value": 79
}
}
}
Теперь, когда мы разобрались в простейших типах агрегаций, можем рассмотреть некоторые сегментарные агрегации.
Об авторах
Пранав Шукла — основатель и руководитель компании Valens DataLabs, инженер, муж и отец двоих детей. Разработчик архитектур больших данных и профессиональный программист, использующий языки программирования на базе JVM. Пранав более 14 лет занимается разработкой корпоративных приложений для компаний и стартапов Fortune 500. Его основная специализация — создание масштабируемых, управляемых данными приложений на основе JVM, Java/Scala, экосистемы Hadoop, Apache Spark и баз данных NoSQL. Активно развивается в сферах, связанных с организацией больших данных, аналитикой и машинным обучением.
Пранав основал Valens DataLabs, чтобы помочь другим компаниям использовать данные для повышения своей конкурентоспособности. Valens DataLabs специализируется на создании облачных приложений нового поколения для работы с большими данными и веб-технологиями. Работа компании основана на использовании гибких практик, принципов бережливого производства, разработки на основе тестов и поведения, постоянной и нтеграции и непрерывного развертывания устойчивых программных систем.
Шарат Кумар М. Н. получил степень магистра по компьютерным наукам в Техасском университете, Даллас, США. Он уже более десяти лет работает в IT-индустрии, в данный момент занимает должность разработчика решений на Oracle для Elasticsearch, является приверженцем Elastic Stack. Будучи заядлым оратором, он выступал на нескольких научно-технических конференциях, в том числе Oracle Code Event. Шарат — аттестованный преподаватель Elastic (Elastic Certified Instructor) — один из нескольких технических экспертов в мире, кому компания Elastic Inc. предоставила официальное право проводить тренинги «от создателей Elastic». Он также является энтузиастом в машинном обучении и науке о данных.
О научном редакторе
Марцело Очоа работает в лаборатории факультета точных наук в Национальном университете Центрального Буэнос-Айреса (Universidad Nacional del Centro de la Provincia de Buenos Aires), Аргентина. Он является техническим директором компании Scotas (www.scotas.com), которая специализируется на решениях в псевдореальном времени с использованием технологий Apache Solr и Oracle. Марцело успевает работать в университете и заниматься проектами, связанными с Oracle и технологиями больших данных. Ранее он работал с базами данных, веб- и Java-технологиями. В мире XML Марцело известен как разработчик DB Generator для проекта Apache Cocoon. Он принимал участие в создании таких проектов с открытым исходным кодом, как DBPrism, DBPrism CMS, а также Restlet.org, где работал над Oracle XDB Restlet Adapter, который является альтернативой для записи нативных веб-сервисов REST внутри базы данных JVM.
С 2006 года он принимает участие в программе Oracle ACE, а в последнее время подключился к работе над проектом Docker Mentor.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Elasticsearch
По факту оплаты бумажной версии книги на e-mail высылается электронная версия книги.
Комментарии (7)
Caraul
15.05.2019 09:46В Elastic 5 предоставляется инструмент Ingest Node
Сейчас уже версия 7, на которую с 5ой надо мигрировать в два шага — не староват ли материал?AntoniusFirst
15.05.2019 13:06В версии 7.0 уже и типы выведены из эксплуатации. Остались индексы и документы. По этой книге будет невозможно работать в 7 версии эластика. Книга «Machine Learning with the Elastic Stack» по мне так была бы более интересна.
OnYourLips
15.05.2019 10:33Почему вы не дублируете термины в оригинале? Ко всем вашим переводам претензия.
В отрывке у вас глава называется узлом поглощения данных, почему вы не пишите сразу в заголовке «Ingest node — узел поглощения»?
Это название концепции и перевод крайне важен, чтобы обеспечить его узнаваемость и закрепить у читателя термин, а не перевод термина.
random1st
15.05.2019 13:06+1Огрехи в переводе безусловно есть. Еще не встречал ни одного перевода технической литературы, который бы всех устраивал — аж с дремучих времен. К тому же охват широкий — девелоперам, девопсам, архитекторам — будет что посмотреть. Разницы между 6 и 7 версии принципиальной тоже нет. Хотелось бы некоторые штуки выпилить типа как X-Pack и прочие проприетарные вещи, и побольше информации внести в другие главы, но за неимением гербовой…
AntoniusFirst
15.05.2019 13:21Радикальных изменений в 7, конечно, не было, но весь этот перечень изменений всё равно заставляет переделывать некоторые вещи при обновлении.
gladilindv
EKL(MN), ну почему не ELK?