Tuesday, January 28, 2020

ELK-стек, немного теории

Индекс
Индекс в Elasticsearch - это набор документов, которые совместно используют некоторые
общие признаки. Каждый индекс содержит несколько типов, которые, в свою очередь, содержат несколько документов, и каждый документ содержит несколько полей. Индекс состоит из нескольких документов JSON, их может быть сколько угодно.
Примерно так:
http://localhost:9200/[index]/[type]/[doc]

Document
Документ в Elasticsearch - это документ JSON, хранящийся в индексе. Каждый
документ имеет тип и соответствующий идентификатор, который представляет его однозначно.
Типовой пример документа:
{
"_index" : "packtpub",

"_type" : "elk",

"_id" : "1",

"_version" : 1,

"found" : true,

"_source":{

    book_name : "learning elk" }
}

Тип
Тип используется для обеспечения логического разделения внутри индексов. Представляет собой класс аналогичных документов. Индекс может иметь
несколько типов, и мы можем определить их в соответствии с контекстом.
Например, индекс для Facebook может иметь "сообщение" в качестве одного из типов, комментарии - это другие типы документов.

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

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

Кластер
Кластер - это совокупность узлов, на которых хранятся индексированные данные.
Elasticsearch обеспечивает горизонтальную масштабируемость. Каждый кластер представлен именем кластера (имя кластера задается свойством с именем cluster.name в
конфигурация Elasticsearch elasticsearch.yml). По умолчанию, название кластера - Elasticsearch

Узел
Узел - это единственный запущенный экземпляр Elasticsearch, который принадлежит одному
из скоплений. По умолчанию каждый узел в Elasticsearch присоединяется к кластеру. Каждый Узел может иметь свою собственную конфигурацию, определенную в elasticsearch.yml, так же узел может иметь различные настройки относительно распределение памяти и ресурсов.

Data node
Узел данных - индексирует документы и выполняют поиск по ним. Всегда рекомендуется добавлять дополнительные узлы данных для повышения производительности или масштабирования кластера. Узел может быть представлен как узел данных, благодаря данным настройкам в формате YML
node.master = false
node.data=true

Masternode
Главный узел - отвечает за управление группой узлов. Для больших кластеров рекомендуется иметь три выделенных главных узла (один основной и два резервных), которые действуют только как главные узлы и не хранят индексы и не выполняют поиск. Узел может быть
сконфигурирован как выделенный главный узел с этой конфигурацией в формате YML:
node.master =true
node.data=false

Routing node or load balancer node
Узел маршрутизации или узел балансировки нагрузки - эти узлы не играют
роль либо главного узла, либо узла данных, но просто выполняют балансировку нагрузки, либо занимаются маршрутизацией запросов на поиск или индексирование документа в
соответствующие узлы. Это полезно для больших объемов поиска информации. Узел может быть настроен как узел маршрутизации в формате YML:
node.master =false
node.data=false

Успехов!

  
 

ELK: логи

Немного теории про логи (из книги Pranav SHukla и SHarat_Kumar ElasticSearch)
 
Логи — это записи об инцидентах или наблюдениях. Логи создаются широким спектром ресурсов, таких как системы, приложения, устройства и т.д. 
Типовой лог:
Log = Timestamp + Data
Логи используются для следующих целей.
Устранение неполадок. Когда сообщается о баге или проблеме, в первую очередь информацию об этом нужно искать в логе. Например, при отслеживании стека исключений в логах можно легко найти причину проблемы.
• Понимание поведения системы/приложения. Во время работы приложения/системы лог работает как черный ящик. Изучая логи, вы поймете, что происходит внутри системы/приложения. Например, в логах можно отслеживать время, использованное разными фрагментами кода внутри приложения, и таким образом выявить узкие места и оптимизировать код для лучшей производительности.
• Аудит. Многие организации должны придерживаться тех или иных процедур проверки на соответствие и вынуждены вести логи. Например, входы пользователей в систему или их транзакции обычно хранятся в логах определенный промежуток времени, чтобы можно было провести аудит или анализ злоумышленной деятельности пользователей/хакеров.
• Предиктивная аналитика. С развитием машинного обучения, искусственного интеллекта и методов извлечения данных появился новый тренд — предиктивная аналитика.Как правило, используется для анализа пользовательских действий и показа ему рекламы=)
Каждая система записывает логи в своем собственном формате, поэтому администратору или конечному пользователю важно уметь разбираться в форматах логов, созданных каждой системой/приложением. Поскольку форматы различаются, поиск по разным типам логов может быть затруднительным, поэтому на помощь спешит Logstash.

Logstash — популярный движок сбора данных с открытым исходным кодом. Он также имеет возможности работы с контейнерами в реальном времени. Logstash позволяет легко строить контейнеры для сбора данных из широкого спектра источников и обрабатывать их, дополнять, унифицировать и отправлять на хранение в различные места. Logstash предоставляет набор плагинов, известных как фильтры ввода и плагины вывода. 

Перечислим некоторые из особенностей Logstash.
Гибкая архитектура, основанная на плагинах. Logstash содержит более 200 плагинов, разработанных компанией Elastic и сообществом открытого исходного кода. Вы можете использовать их для объединения, сопоставления и организации различных источников ввода, фильтров и выводов, а также создания контейнеров для обработки данных.
• Расширяемость. Компонент Logstash написан на Jruby и поддерживает гибкую архитектуру. Допускается создание собственных плагинов для персональных нужд.
• Централизованная обработка данных. Данные из любых источников можно легко извлекать с применением разнообразных плагинов ввода, а также дополнять их, изменять и отправлять различным получателям.
• Универсальность. Logstash поддерживает обработку всех типов логов, таких как логи Apache, NGINIX, системные логи, логи событий Windows. Он также предоставляет сбор метрик из широкого спектра приложений через TCP и UDP. Logstash может трансформировать запросы HTTP в события, поддерживает такие приложения, как Meetup, GitHub, JIRA и др. Возможен также сбор данных из имеющихся реляционных/NoSQL баз данных и очередей, включая Kafka, RabbitMQ и т.п. Контейнер обработки данных Logstash может быть легко масштабирован горизонтально. Начиная с Logstash 5, поддерживаются постоянные очереди, благодаря чему обеспечивается возможность надежно обрабатывать большие объемы входящих событий/данных.
Совместная работа. Logstash имеет высокую связность с компонентами Elasticsearch, Beats и Kibana, что облегчает создание сквозных решений для анализирования логов.