Перейти к основному содержимому

Отправка журналов приложения Java в эластичный стек (ELK)

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы шаг за шагом обсудим, как отправлять журналы приложений в Elastic Stack (ELK).

В более ранней статье мы сосредоточились на настройке Elastic Stack и отправке в него данных JMX.

2. Настройте логбэк

давайте начнем с настройки Logback для записи журналов приложений в файл с помощью FileAppender :

<appender name="STASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logback/redditApp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logback/redditApp.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="DEBUG">
<appender-ref ref="STASH" />
</root>

Обратите внимание, что:

  • Мы храним журналы каждого дня в отдельном файле с помощью RollingFileAppender с TimeBasedRollingPolicy (подробнее об этом приложении здесь )
  • Мы будем хранить старые журналы только неделю (7 дней), установив для параметра maxHistory значение 7 .

Также обратите внимание, как мы используем LogstashEncoder для кодирования в формат JSON, который проще использовать с Logstash.

Чтобы использовать этот кодировщик, нам нужно добавить следующую зависимость в наш pom.xml :

<dependency> 
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>

Наконец, давайте удостоверимся, что у приложения есть разрешения на доступ к каталогу журналов:

sudo chmod a+rwx /var/lib/tomcat8/logback

3. Настройте Логсташ

Теперь нам нужно настроить Logstash для чтения данных из файлов журналов, созданных нашим приложением, и отправки их в ElasticSearch.

Вот наш файл конфигурации logback.conf :

input {
file {
path => "/var/lib/tomcat8/logback/*.log"
codec => "json"
type => "logback"
}
}

output {
if [type]=="logback" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "logback-%{+YYYY.MM.dd}"
}
}
}

Обратите внимание, что:

  • входной файл используется, так как на этот раз Logstash будет читать журналы из файлов журналов.
  • путь установлен к нашему каталогу журналов, и все файлы с расширением .log будут обработаны
  • index установлен на новый индекс «logback-%{+YYYY.MM.dd}» вместо стандартного «logstash-%{+YYYY.MM.dd}»

Чтобы запустить Logstash с новой конфигурацией, мы будем использовать:

bin/logstash -f logback.conf

4. Визуализируйте журналы с помощью Kibana

Теперь мы можем видеть наши данные Logback в индексе ' logback-* '.

Мы создадим новый поиск «Logback logs», чтобы разделить данные Logback, используя следующий запрос:

type:logback

Наконец, мы можем создать простую визуализацию наших данных Logback:

  • Перейдите на вкладку «Визуализация».
  • Выберите «Вертикальная гистограмма».
  • Выберите «Из сохраненного поиска».
  • Выберите поиск «Logback logs», который мы только что создали.

Для оси Y обязательно выберите Aggregation: Count

Для оси X выберите:

  • Агрегация: Условия
  • Поле: уровень

После запуска визуализации вы должны увидеть несколько столбцов, представляющих количество журналов на уровне (DEBUG, INFO, ERROR, …)

5. Вывод

В этой статье мы изучили основы настройки Logstash в нашей системе, чтобы передавать генерируемые им данные журнала в Elasticsearch и визуализировать эти данные с помощью Kibana.