Spring Boot и ELK - PullRequest
       26

Spring Boot и ELK

0 голосов
/ 04 февраля 2019

У меня есть серия микросервисов, созданных с использованием Spring Boot, работающих в качестве док-контейнеров с docker-compose.Я хочу централизовать файлы журналов, поэтому я думаю об использовании ELK (работает в другом контейнере).Как я могу получить файлы журнала из докерских контейнеров на основе Spring Boot в ELK, они передаются из контейнеров в ELK или наоборот?

Любая примерная конфигурация или последние библиотеки будут высоко оценены.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Две проблемы:

  1. Вы не хотите анализировать файлы журналов.Потому что никто не хочет писать регулярные выражения для разбора, и это подвержено ошибкам.
  2. Если у вас более динамическая настройка контейнера, вы не хотите входить в файлы, так как настройка всех подключенных в каталог каталогов или файлов выполняетсяa PITA.

Чтобы устранить первую проблему, добавьте приложение журнала для входа в JSON.Я использую Logback здесь, и вам нужно добавить net.logstash.logback:logstash-logback-encoder зависимость:

<appender name="json" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH:-.}/your-app-name.json</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>your-app-name.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <mdc/>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                    "log.level": "%level",
                    "service.name": "${springAppName:-}",
                    "process.pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger",
                    "mdc": "%mdc",
                    "message": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

Затем вы можете собрать этот файл и отправить его в Elasticsearch;все поля будут хорошо извлечены, и ваши многострочные операторы журнала (например, трассировки стека) также не будут разбиты:

filebeat.inputs:

# Collect the JSON log files from the Spring Boot apps
- type: log
  paths:
    - /var/log/apps/*.json
  json.keys_under_root: true
  json.add_error_key: true

output.elasticsearch:
  hosts: ["{{ elasticsearch_host }}"]

Вторая проблема немного сложнее.Я бы использовал журнал JSON по умолчанию, который предоставляет Docker, чтобы ваше Java-приложение могло просто войти в консоль:

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{36} [%thread] - %mdc - %msg %n</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

Тогда Filebeat может автоматически собрать все журналы Docker (Filebeat должен иметь доступ к /var/lib/docker/containers:/var/lib/docker/containers:ro чтобы это работало):

filebeat.autodiscover:
  providers:
    - type: docker

Чтобы избежать проблемы с анализом в первой части, вам действительно нужно зарегистрировать JSON на консоли, а затем собрать это.

0 голосов
/ 29 июля 2019

Вы можете использовать нижеприведенную архитектуру,

Загрузочное приложение Spring -> Kafka -> ELK

Для этой архитектуры: 1. Сконфигурируйте приложение Kafka для xml-файла Log4j.Затем журналы автоматически отправляются в тему Кафки.2. Настройте конфигурацию Log-stash в качестве подписчика на тему Kafka.3. А так же вы можете использовать любые фильтры на Log-stash.

ref: https://www.devglan.com/apache-kafka/stream-log4j-logs-to-kafka

0 голосов
/ 07 февраля 2019

Вы можете отправлять данные из источника в ELK с помощью сборщика данных.

Один из них - Filebeat

Предположим, у вас есть приложение Spring-boot, работающее поверх Ubuntu Server.

Предположим, вы настроили приложение для хранения журнала в / home / user / log / folder.

Теперь для отправки этого журнала данных в ELK.

1.Вам необходимо установить Filebeat

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-amd64.deb
sudo dpkg -i filebeat-6.6.0-amd64.deb

Подробнее здесь

2.Откройте Filebeat conf и добавьте ваше местоположение журнала.

sudo nano /etc/filebeat/filebeat.yml


filebeat.inputs:
- type: log
  enabled: true // enable this
  paths:
    - /var/log/*.log
    - /home/user/log/*.log // add your log path

измените IP для ELK в разделе Elastic / Logstash и Kibana в одном файле.

Примечание: Вы можете разрешить вывод в Elastic или Logstash, поэтому раскомментируйте любой раздел.Я бы предложил сначала попробовать эластик.

3.Запустите Filebeat для отправки журнала.

Примечание: Сервер ELK должен быть запущен и доступен с вашего сервера начальной загрузки.

Для запуска

sudo filebeat -e

Если все хорошо, вы должны увидеть в журнале ударов файла следующее:

Harvesting Data from your log path.
Обновите приборную панель Kibana и начните просматривать журнал.По умолчанию индекс будет создан filebeat-*
...