Друкарня від WE.UA
ELK STACK. The Elastic Logstash Kibana (ELK) Stack… | by Faisal Basha |  Medium

Інтро

У світі сучасної розробки та використання програмних продуктів, ефективне управління логами стало надзвичайно важливим. Це дозволяє забезпечити високу доступність, швидку діагностику та вирішення проблем, а також оптимізацію продуктивності. Один із найбільш популярних інструментів для цієї мети – це ELK стек.

ELK

ELK стек (Elasticsearch, Logstash, Kibana) є потужним інструментом для збору, обробки та візуалізації логів. Інтеграція Spring Boot застосунку з ELK стеком дозволяє централізовано зберігати логи, здійснювати їхній аналіз та створювати інформативні дашборди для моніторингу. У цьому пості ми розглянемо, як налаштувати Docker Compose для ELK стеку та Spring Boot застосунку, а також як налаштувати конфігурації для інтеграції.

Компоненти ELK стеку

Elasticsearch - це розподілений пошуковий та аналітичний двигун/сервер, побудований на Apache Lucene. Він забезпечує швидкий повнотекстовий пошук та аналіз великих обсягів даних у режимі реального часу.

Основні характеристики:

  • Розподілена архітектура, що забезпечує високу доступність та масштабованість

  • Підтримка RESTful API для взаємодії

  • Гнучкість схеми, що дозволяє зберігати дані різної структури

  • Можливість агрегації та аналізу даних

Logstash - це інструмент для збору, обробки та передачі логів. Він може приймати дані з різних джерел, трансформувати їх та відправляти в Elasticsearch або інші сховища.

Ключові особливості:

  • Підтримка широкого спектру вхідних та вихідних форматів

  • Можливість фільтрації та трансформації даних на льоту

  • Плагінна архітектура для розширення функціональності

  • Буферизація даних для забезпечення надійності передачі

Kibana - це веб-інтерфейс для візуалізації та аналізу даних, що зберігаються в Elasticsearch.

Основні можливості:

  • Створення інтерактивних дашбордів

  • Потужні інструменти для візуалізації даних (графіки, діаграми, etc)

  • Можливість виконання складних запитів до даних

  • Налаштування оповіщень на основі заданих умов

Як це працює разом

  1. Збір даних. Logstash збирає логи та метрики з різних джерел (файли, бази даних, мережеві потоки).

  2. Обробка. Logstash фільтрує та трансформує дані відповідно до заданих правил.

  3. Індексація. Оброблені дані відправляються в Elasticsearch для індексації та зберігання.

  4. Аналіз та візуалізація. Kibana дозволяє користувачам створювати запити до Elasticsearch та візуалізувати результати.

Розглянемо найпростіший спосіб інтеграції з ELK. Ми логи будемо писати у файл, читати з файлу і відправляти їх просто як рядки, не як json. По цьому можна зробити окремий пост.

Налаштування Docker Compose для ELK

Спочатку, подивимось на ієрархію директорій. Це важливо.

  • elk/logstash/config/logstash.yml

Файл logstash.yml використовується для загальної конфігурації Logstash. Він визначає основні параметри роботи сервісу Logstash, такі як налаштування мережі, шляхи до конфігураційних файлів, etc.

http.host: "0.0.0.0" # Вказує Logstash приймати HTTP-запити з будь-якої IP-адреси
log.level: debug # Рівень логування для виведення докладної інформації для відладки
node.name: logstash # Ім'я вузла Logstash в кластері
path.config: /usr/share/logstash/pipeline/logstash.conf # Шлях до конфігураційного файлу Logstash (logstash.conf)
path.logs: /usr/share/logstash/logs # Шлях до директорії для зберігання логів Logstash
  • elk/logstash/config/logstash.conf

Файл logstash.conf використовується для конфігурації Logstash, Цей файл містить три основні секції: input, filter та output, кожна з яких виконує специфічну роль у процесі обробки даних.

input - Ця секція визначає джерела даних, які Logstash буде збирати та обробляти. Вона вказує, звідки Logstash має отримувати логи або інші дані.

filter - Ця секція визначає, як обробляти, трансформувати або фільтрувати дані, які були отримані з джерел. Вона дозволяє виконувати різні операції, такі як парсинг, перетворення даних та видалення непотрібної інформації.

output - Ця секція визначає, куди будуть відправлені оброблені дані. Це може бути Elasticsearch, інші бази даних, файли або інші системи.

input {
  file {
    path => "/usr/share/logstash/logs/*.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "service-%{+YYYY.MM.dd}"
  }
}
  • elk/docker-compose.yml

version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.13
    ports:
      - "9200:9200" # Порт для доступу до Elasticsearch
      - "9300:9300" # (-)
    networks:
      - elk-network
    environment:
      - discovery.type=single-node # Налаштування для одновузлового кластера
      - xpack.security.enabled=false # Вимкнення безпеки X-Pack для спрощення налаштування

  logstash:
    image: docker.elastic.co/logstash/logstash:7.17.13
    ports:
      - "50000:50000" # Порт для отримання даних Logstash
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml # Налаштування Logstash
      - ./logstash/pipeline:/usr/share/logstash/pipeline # Конфігурації Logstash
      - ../logs:/usr/share/logstash/logs # Логи, які обробляються Logstash
    command: [ "-f", "/usr/share/logstash/pipeline/logstash.conf"] # Команда для запуску з конкретним конфігом
    depends_on:
      - elasticsearch # Запуск Logstash після Elasticsearch
    networks:
      - elk-network # Мережа для взаємодії з іншими сервісами ELK стеку

  kibana:
    image: docker.elastic.co/kibana/kibana:7.17.13
    ports:
      - "5601:5601" # Порт для доступу до Kibana
    depends_on:
      - logstash # Запуск Kibana після Logstash
    networks:
      - elk-network

volumes:
  esdata:
    driver: local # Локальний драйвер для зберігання даних Elasticsearch

networks:
  elk-network:
    driver: bridge # Тип мережі для взаємодії всіх сервісів ELK стеку

Зверніть увагу на volumes(томи) у logstash. Ви маєте правильно замаунтити локальну директорію з логами.

Контейнери взаємодіють через спільну мережу та томи. Застосунок записує логи у спільний том, доступний також контейнеру Logstash. Logstash зчитує ці логи з тому, обробляє їх і відправляє до Elasticsearch через спільну мережу. Elasticsearch індексує отримані дані, а Kibana використовує ці дані для створення візуалізацій і дашбордів для аналізу. Томи забезпечують спільний доступ до даних між контейнерами, а мережа дозволяє контейнерам обмінюватися даними та взаємодіяти один з одним.

Налаштування застосунку для роботи з ELK

  • application.yml (application level)

...
logging:
  level:
    root: info
  file:
    name: logs/community.log
  • docker-compose.yml (application level)

version: '1'
services:
  
  app:
    image: overpathz/communitybot
    build: .
    container_name: community-app
    ports:
      - "8080:8080"
    depends_on:
      - redis
      - rabbitmq
      - db
    environment:
      .. env vars
    volumes:
      - ./logs:/app/logs

.. other containers
- ./logs:/app/logs

Будучи в директорії elk →

docker-compose -f docker-compose.yml build && docker-compose -f docker-compose.yml up -d

Маємо побачити ось це

Запускаємо і дивимось логи

Щоб переконатися, що Kibana працює, переходимо за адресою:

http://localhost:5601/app/home

Чекаємо ще трішки, оновлюємо сторінку і потрапляємо сюди

Окей. ELK піднятий. Далі, билдаємо і ранимо наш застосунок. Та сама команда, але тепер в руті нашого проекту.

docker-compose -f docker-compose.yml build && docker-compose -f docker-compose.yml up -d

У вас може не бути стільки контейнерів, нас цікавить наш основний (якщо це не мікросервіс), в мене це app.

Заходимо всередину → Files → Маємо впевнитися, що наш лог файл справді існує і він не пустий (тобто, що в нього дійсно пишуться логи)

дабл тап на файл і побачимо що все окей

Заходимо в кібану.

Index Pattern (шаблон індексу) в Kibana визначає набір індексів в Elasticsearch для пошуку та візуалізації даних. Наприклад, шаблон service-* включатиме всі індекси, що починаються з service-, як-от service-2023.07.07.

Logstash відправляє* оброблені логи до Elasticsearch, де вони зберігаються в індексах з іменами у форматі service-YYYY.MM.dd. Щоб Kibana могла отримати доступ до цих індексів, потрібно створити відповідний Index Pattern. Таким чином, Logstash обробляє і відправляє дані до Elasticsearch, де вони індексуються і стають доступними для пошуку і візуалізації в Kibana через Index Pattern.

output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "service-%{+YYYY.MM.dd}"
  }
}

Тепер, після додавання індекс патерну, заходимо сюди:

Вуаля. Логи в кібані.


https://github.com/overpathz/elk-stack-java

Демо-версія проекту, де за тими ж інструкціями ви зможете запустити ELK стек та застосунок та подивитися на логи (які будуть автоматично згенеровані за вас).

Можливо, з’явиться довгочит про налаштування графани і прометеуса.
Але не від мене.
Yaroslav? :)

Статті про вітчизняний бізнес та цікавих людей:

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

7.5KПрочитань
1Автори
95Читачі
На Друкарні з 19 квітня

Більше від автора

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: