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

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

Модуль 5. Spring
26 уровень , 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!

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ