JavaRush /Курси /Модуль 5. Spring /Лекція 256: Практика: налаштування логування через Logsta...

Лекція 256: Практика: налаштування логування через Logstash та Elasticsearch

Модуль 5. Spring
Рівень 20 , Лекція 5
Відкрита

Логування в мікросервісах — це не просто трюк, щоб здаватися професіоналом, це життєво важливий інструмент. Коли ваші мікросервіси починають переписуватися між собою, ви маєте бути впевнені, що можете легко відстежити, де щось пішло не так. Уявіть, що ваш код — це театр коду, а логи — це щось на кшталт щоденника закулісного життя. ELK-стек (Elasticsearch, Logstash, Kibana) робить цей щоденник зручним для читання, пошуку та аналізу.


Чому саме ELK?

Чим частіше ваші додатки спілкуються між собою, тим хаотичнішим стає процес моніторингу логів. ELK вирішує цю проблему за допомогою:

  • Elasticsearch — потужної бази даних, заточеної під пошукові запити.
  • Logstash — універсального транспортировщика логів.
  • Kibana — системи візуалізації логів через гарненькі дашборди.

А тепер найголовніше: замість читання JSON-виводів у вашому терміналі ви зможете «милуватися графіками» в Kibana. Звучить привабливо? Тоді приступаймо!


Підготовчі кроки

Встановлення компонентів ELK-стека

  1. Elasticsearch:
    Завантажуємо Elasticsearch і запускаємо його локально. Команда для запуску після розпакування:
    ./bin/elasticsearch
    
    Переконайтесь, що він запущений, відвідавши http://localhost:9200 у браузері.
  2. Logstash:
    Завантажуємо Logstash і готуємо його до бою. Logstash потрібно буде налаштувати за допомогою конфігураційного файлу, про це трохи пізніше.
  3. Kibana:
    Завантажуємо Kibana. Після запуску Kibana буде доступна за адресою http://localhost:5601.

Підготовка Spring Boot додатка

Створимо Spring Boot додаток з базовою структурою для логування. Додамо наступні залежності в наш pom.xml (або build.gradle):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
</dependencies>

Чому Log4j2? Він гнучкий і чудово інтегрується з Logstash.


Налаштування проекту для логування

Конфігурація log4j2

Створіть файл log4j2.xml в директорії src/main/resources. Приклад конфігурації:


<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- Консольний апендер -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <!-- Logstash апендер -->
        <Socket name="Logstash" host="localhost" port="5044">
            <JsonLayout complete="true" compact="true" eventEol="true" />
        </Socket>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="Logstash" />
        </Root>
    </Loggers>
</Configuration>

Тут ми налаштували:

  1. Логи виводяться в консоль.
  2. Логи відправляються на Logstash через сокет.

Налаштування Logstash

Створіть файл logstash.conf:


input {
  tcp {
    port => 5044
    codec => json
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "application-logs"
  }
  stdout {
    codec => rubydebug
  }
}

Пояснимо, що тут відбувається:

  • input — Logstash очікує дані по TCP на порті 5044.
  • output — логи зберігаються в Elasticsearch в індексі application-logs і виводяться в консоль для допитливих очей.

Запустіть Logstash з цим конфігураційним файлом:

./bin/logstash -f logstash.conf

Перевірка роботи

  1. Написання коду: У вашому Spring Boot додатку додайте кілька логів:
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class LogController {
        private final Logger logger = LoggerFactory.getLogger(LogController.class);
    
        @GetMapping("/log")
        public String generateLog() {
            logger.info("Привіт, ELK! Це мій перший лог.");
            logger.error("Houston, у нас проблема!");
            return "Лог відправлено";
        }
    }
    
  2. Запуск: Підійміть Spring Boot додаток, відкрийте браузер і введіть:
    http://localhost:8080/log
    
  3. Перевірка в Kibana:
    • Зайдіть в Kibana (http://localhost:5601).
    • Перейдіть в Management -> Index Patterns.
    • Налаштуйте індексний шаблон для application-logs.
    • Перейдіть в Discover, і ви побачите всі свої прекрасні логи.

Корисні поради

  1. Завжди тестуйте конфігурацію з невеликими логами перед впровадженням у production. Нерабоче логування в реальній системі — це біль.
  2. Переконайтесь, що ваш Logstash витримує навантаження. Якщо ні, використовуйте кластеризацію або альтернативи, наприклад Fluentd.
  3. Налаштовуйте ротацію індексів в Elasticsearch, щоб кластери не захлиналися від гігабайтів даних.

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

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ