Ответ
На последнем проекте использовался стек ELK (Elasticsearch, Logstash, Kibana) для централизованного управления логами.
Архитектура и настройка:
- На стороне приложения (Java/Spring Boot): Использовался
Logbackсlogstash-logback-encoderдля отправки структурированных логов (JSON) напрямую в Logstash по TCP.<!-- Пример фрагмента logback-spring.xml --> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${LOGSTASH_HOST}:5000</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"app":"my-service", "env":"prod"}</customFields> </encoder> </appender> - Logstash: Принимал логи, применял фильтры (парсинг, обогащение метаданными) и отправлял в Elasticsearch.
- Elasticsearch: Хранил индексированные логи для быстрого поиска.
- Kibana: Предоставляла веб-интерфейс для визуализации, поиска и создания дашбордов.
Дополнительные меры:
- Настройка ротации и retention-политики логов на самих серверах (via
logrotateилиTimeBasedRollingPolicy) для предотвращения переполнения диска. - Отправка в лог только нефункциональных данных (исключая PII), структурированных по уровням (
ERROR,WARN,INFO).