image Привет, Хаброжители! Мы издали книгу по Elastic Stack, предназначенную для специалистов, работающих с большими объемами данных и желающих надежно извлекать их из любого источника в любом формате, а также искать, анализировать и визуализировать данные в режиме реального времени. Эта книга для вас, если вам необходимо фундаментальное понимание работы Elastic Stack в сферах распределенных вычислений и обработки данных в реальном времени.

Ниже будет предоставлена структура книги о приведен отрывок про агрегации.

Структура книги


Глава 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
}

  1. Элементы aggs или aggregations на верхнем уровне должны служить оберткой агрегации.
  2. Дайте агрегации имя. В данном случае мы выполняем агрегацию суммы в поле downloadTotal и выбрали соответствующее имя download_sum. Вы можете назвать ее как угодно. Это поле пригодится, когда нам понадобится найти эту конкретную агрегацию в результатах ответа.
  3. Мы делаем агрегацию суммы, следовательно, применяется элемент sum.
  4. Мы хотим сделать агрегацию терминов по полю downloadTotal.
  5. Укажите size = 0, чтобы предотвратить попадание в ответ необработанных результатов. Нам нужны только итоги агрегации, а не результаты поиска. Поскольку мы не указали никаких высокоуровневых элементов query, запрос будет работать со всеми документами. Нам не нужны в ответе необработанные документы (или результаты поисковой выдачи).

Ответ должен выглядеть следующим образом:

{
   "took": 92,
   ...
   "hits": {
      "total": 242836,                 1
      "max_score": 0,
      "hits": []
   },
   "aggregations": {                   2
      "download_sum": {                3
         "value": 2197438700           4
      }
   }
}

Разберемся в основных параметрах ответа.

  1. Элемент hits.total показывает количество документов, соответствующих контексту запроса. Если не указан дополнительный запрос или фильтр, будут включены все документы в типе или индексе.
  2. По аналогии с запросом этот ответ помещен внутрь агрегации для представления в таком виде.
  3. Ответ запрошенной нами агрегации имеет название download_sum, следовательно, мы получаем наш ответ от агрегации суммы внутри элемента с таким же именем.
  4. Фактическое значение выводится после применения агрегации суммы.

Агрегации среднего, максимального, минимального значений очень похожи. Кратко их рассмотрим.

Агрегация среднего значения


Агрегация среднего находит среднее значение по всем документам в контексте запроса:

GET bigginsight/_search
{
    "aggregations": {
       "download_average": { 1
          "avg": { 2
             "field": "downloadTotal"
          }
       }
    },
    "size": 0
}

Заметные отличия от агрегации суммы состоят в следующем.

  1. Мы выбрали другое название, download_average, чтобы было ясно, что данная агрегация призвана вычислить среднее значение.
  2. Тип выполняемой агрегации — 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)


  1. gladilindv
    15.05.2019 09:40

    EKL(MN), ну почему не ELK?


  1. Caraul
    15.05.2019 09:46

    В Elastic 5 предоставляется инструмент Ingest Node
    Сейчас уже версия 7, на которую с 5ой надо мигрировать в два шага — не староват ли материал?


    1. ph_piter Автор
      15.05.2019 12:00

      Книга по Elastic Stack 6.0


    1. AntoniusFirst
      15.05.2019 13:06

      В версии 7.0 уже и типы выведены из эксплуатации. Остались индексы и документы. По этой книге будет невозможно работать в 7 версии эластика. Книга «Machine Learning with the Elastic Stack» по мне так была бы более интересна.


  1. OnYourLips
    15.05.2019 10:33

    Почему вы не дублируете термины в оригинале? Ко всем вашим переводам претензия.

    В отрывке у вас глава называется узлом поглощения данных, почему вы не пишите сразу в заголовке «Ingest node — узел поглощения»?
    Это название концепции и перевод крайне важен, чтобы обеспечить его узнаваемость и закрепить у читателя термин, а не перевод термина.


  1. random1st
    15.05.2019 13:06
    +1

    Огрехи в переводе безусловно есть. Еще не встречал ни одного перевода технической литературы, который бы всех устраивал — аж с дремучих времен. К тому же охват широкий — девелоперам, девопсам, архитекторам — будет что посмотреть. Разницы между 6 и 7 версии принципиальной тоже нет. Хотелось бы некоторые штуки выпилить типа как X-Pack и прочие проприетарные вещи, и побольше информации внести в другие главы, но за неимением гербовой…


    1. AntoniusFirst
      15.05.2019 13:21

      Радикальных изменений в 7, конечно, не было, но весь этот перечень изменений всё равно заставляет переделывать некоторые вещи при обновлении.