Skip to content

mxxntype/elk-lab

Repository files navigation

Практическая работа №00 "Стэк ELK"
ELK Stack overview


[!NOTE] Изначально планировалось настроить для стэка ELK несколько proof-of-concept сервисов, которые бы отправляли телеметрию стэку в реальном времени. Однако в процессе реализации такого стэнда я столкнулся со следующими проблемами:

  1. Такой стенд состоял бы из минимум 6-7 сервисов и (как показала практика) работает крайне нестабильно даже на машине с 32Гб RAM и процессором i9. Официальная документация Elastic не рекомендует развертывать более одного сервиса на одной физической машине.
  2. Elastic крайне активно склоняют пользователей к использованию их платного hosted-продукта, и основная работа ведется именно над ним. Смысл всей лабораторной работы в self-хостинге этих сервисов, однако сами Elastic не настроены помогать в этом инженерам, особенно с адресами из РФ. Ввиду этого, развернуть полноценный стэнд с real-time клиентами крайне сложно - необходимый elastic agent буквально отказывается работать, а все интеграции (с postgresql, auditd и другими) невозможно установить не только с российским IP, но и под некоторыми зарубежными.

Исходя из этого, лабораторная работа центрируется вокруг развертывания коренных сервисов стэка (Elasticsearch + Logstash + Kibana) и минимальных сопровождающих сервисов (Filebeat и Metricbeat). На практике такой тестовый стенд позволяет достаточно неплохо изучить основы Elastic, а так же поработать с живыми данными внутри Kibana.

Обзор

![[elk_preview.png]]

Стэк ELK состоит из трёх сервисов:

  1. Elasticsearch - распределённая система поиска и аналитики, основанная на JSON.
  2. Logstash - открытая система сбора данных в реальном времени.
  3. Kibana - фронтенд для эффективного анализа и мониторинга данных, собранных вышеупомянутыми сервисами.

А так же (в рамках этой работы) двух дополнительных сервисов:

  1. Metricbeat - инструмента для мониторинга самого стэка ELK.
  2. Filebeat - Инструмента для работы с всевозможными форматами данных и логов. В рамках работы именно в нём должны происходить взаимодействие и обработка телеметрии.

Important

Некоторая часть документации Elastic, а так же репозитории docker-контейнеров и интеграций Elasticsearch могут быть недоступны для просмотра и использования с российских IP-адресов, использование VPN решает эту проблему.

Задача

Развернуть тестовый стенд со стэком ELK на Linux-хосте. За основу Linux-хоста допускается взять любой дистрибутив, в котором нет GUI-интерфейса, например:

  • Ubuntu Server
  • Debian Server
  • Arch Linux
  • Void Linux

Caution

Единственные GUI-инструменты, которые допускается использовать - это те, что являются частью самого ELK (Kibana / Metricbeat), вся остальная часть работы должна выполняться строго в командной строке.

Так же необходимо запустить и подготовить к работе (привязать к стеку) Metricbeat и Filebeat. Стоит подготовить собственные наборы данных для импорта (например, любой датасет в .csv формате)

Настроить все сервисы так, чтобы логи развернутых сервисов попадали в обработку самого стэка ELK (на скриншоте видно, что в стэк попали данные от двух запусков его самого, а так же данные из вручную добавленного датасета):

![[kibana_self_injested_logs.png]]

При корректной настройке всех сервисов, мониторинг самого стенда и работа с данными через Filebeat будут доступны в Kibana "из коробки". Если доступ к данному функционалу требует дополнительной привязки или конфигурации - это сигнал о том, что что-то развернуто неправильно.

Методы проверки работы

todo!()

Рекомендации по выполнению

Стэк ELK на тестовом стэнде удобнее всего развернуть с помощью docker compose, однако допустима и нативное развертывание.

Первым должен стартовать сервис Elasticsearch, так как Kibana может нормально подключится только к полностью настроенному и готову сервису. Logstash должен запускаться после Kibana, а после запуска всех трёх сервисов - можно запускать Metricbeat и Filebeat.

ВАЖНО: Для адекватной работы стенда необходимо настроить TLS для Elasticsearch, Kibana и Logstash. Сервисы могут функционировать и по простому http-соединению, однако в таком случае есть большой шанс столкнуться с недоступным функционалом и предупреждениями от сервисов, что помешает выполнению лабораторной работы.

Исправление вероятных ошибок

  1. Контейнер с Elasticsearch может не запускаться с ошибкой Elasticsearch exited unexpectedly. Для решения проблемы стоит выполнить следующую команду:

    sudo sysctl -w vm.max_map_count=262144
  2. После команды из пункта №1 ошибка может смениться на Elasticsearch died while starting up with exit code 137. Для решения этой ошибки можно либо ограничить использование памяти для Elasticsearch (как именно - разобраться самостоятельно), либо просто увеличить объем доступной памяти для контейнера в файле .envrc, если вычислительные мощности хоста позволяют.


Инструкция по построению рабочего стенда

[!CAUTION] Это "материал для преподователя" - (скорее всего) надо убрать из лабораторной работы, ибо это можно все скопировать и получить рабочий стенд.

NOTE: На моём опыте, развернуть ELK нативно, без использования контейнеризации, крайне проблематично. Сервисы ругаются друг на друга, конфликтуют с хостом и иногда просто не работают, в зависимости от дистрибутива и пакета. Поэтому docker compose. Его можно избежать, однако в таком случае мне кажется, что одна лишь задача запуска ELK - уже достаточно сложная и объемная для одной лабораторной работы.

  1. Получаем репозиторий. Я либо открою доступ к репозиторию на GitHub, либо пришлю .zip архив с исходным кодом. Репозиторий не хочется делать открытым, ибо тогда все оттуда спишут :)

  2. Поднимаем контейнеры:

    docker compose up --detach # Запуск всего стэка.
    docker compose down # Остановка всего стэка.
    docker compose logs --follow # Просмотр логов стэка.
    
    # Ахтунг!
    # Удаление всех данных стэка. Нужно, чтобы "начать заново"!
    docker compose down --volumes
  3. Отправляемся на localhost:5601 - главную страницу Kibana, логинимся. Имя пользователя - elastic, пароль взять из .envrc, скорее всего changeme.

  4. Если все хорошо, то увидим дэшборд:

    ![[Study/Semester 5/Telemetry Lab/kibana_dashboard.png]]

    Тут нам нужен желтый Search, жмём на него и под заголовком Ingest your content загружаем файл1 с данными через кнопку Upload file.

  5. Далее, Kibana предложит множество возможностей повзаимодействовать с данными из файла, что именно здесь выставлять как задачу - я не определился. Возможно, на этом этапе студенту стоит продемонстрировать уникальность данных для проверки, ну или сделать какую-то примитивную выборку.

  6. Если перезапустить стенд несколько раз, то в списке индексов вероятно появится один или несколько относящихся к телеметрии самого стэка.

Footnotes

  1. Либо filebeat_ingest_data/Air_Quality.log, либо logstash_ingest_data/Air_Quality.csv. Для обоих файлов скорее всего придется вручную проставить галочку напротив Has header row в разделе Override settings, потому что строка с заголовками столбцов почему-то не определяется сама.

About

MIREA Linux course | ELK Stack lab

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages