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

Вход в Graylog с помощью Spring Boot

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

1. Введение

Graylog — это служба агрегации журналов. Проще говоря, он способен собирать миллионы сообщений журнала из нескольких источников и отображать их в едином интерфейсе.

Кроме того, он предоставляет ряд других функций, таких как оповещения в реальном времени, информационные панели с графиками и диаграммами и многое другое.

В этом руководстве мы увидим, как настроить сервер Graylog и отправлять на него сообщения журнала из приложения Spring Boot.

2. Настройка Graylog

Есть несколько способов установить и запустить Graylog. В этом руководстве мы обсудим два самых быстрых способа: Docker и Amazon Web Services.

2.1. Докер

Следующие команды загрузят все необходимые образы Docker и запустят контейнер для каждой службы:

$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms2g -Xmx4g" \
-e "discovery.type=single-node" -e "xpack.security.enabled=false" \
-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 \
-d docker.elastic.co/elasticsearch/elasticsearch:5.6.11
$ docker run --name graylog --link mongo --link elasticsearch \
-p 9000:9000 -p 12201:12201 -p 514:514 -p 5555:5555 \
-e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" \
-d graylog/graylog:2.4.6-1

Панель инструментов Graylog теперь доступна по URL-адресу http://localhost:9000/ , а имя пользователя и пароль по умолчанию — admin .

Хотя установка Docker самая простая, она требует значительного объема памяти. Он также не работает в Docker для Mac, поэтому может не подходить для всех платформ.

2.2. Веб-сервисы Амазонки

Следующим самым простым вариантом настройки Graylog для тестирования является Amazon Web Services. Graylog предоставляет официальный AMI, который включает в себя все необходимые зависимости , хотя после установки требует дополнительной настройки.

Мы можем быстро развернуть экземпляр EC2 с помощью Graylog AMI, нажав здесь и выбрав регион. Graylog рекомендует использовать инстанс с объемом памяти не менее 4 ГБ .

После запуска экземпляра нам нужно подключиться к хосту по SSH и внести несколько изменений. Следующие команды настроят для нас службу Graylog:

$ sudo graylog-ctl enforce-ssl
$ sudo graylog-ctl set-external-ip https://<EC2 PUBLIC IP>:443/api/
$ sudo graylog-ctl reconfigure

Нам также необходимо обновить группу безопасности, созданную с экземпляром EC2, чтобы разрешить сетевой трафик через определенные порты. На рисунке ниже показаны порты и протоколы, которые необходимо включить:

./bf081fd390f0710a52d26a770b893c4a.jpg

Панель инструментов Graylog теперь доступна по URL-адресу https://<EC2 PUBLIC IP>/ , а имя пользователя и пароль по умолчанию — admin .

2.3. Другие установки Graylog

Помимо Docker и AWS, существуют также пакеты Graylog для различных операционных систем. При таком подходе нам также приходится настраивать сервис ElasticSearch и MongoDB .

По этой причине Docker и AWS гораздо проще настроить, особенно для целей разработки и тестирования.

3. Отправка сообщений журнала

Теперь, когда Graylog запущен и работает, мы должны настроить наше приложение Spring Boot для отправки сообщений журнала на сервер Graylog.

Любая среда ведения журналов Java может поддерживать отправку сообщений на сервер Graylog с использованием протокола GELF.

3.1. Лог4Дж

В настоящее время единственной официально поддерживаемой системой ведения журналов является Log4J. Graylog предоставляет приложение, доступное на Maven Central .

Мы можем включить его, добавив следующую зависимость Maven в любой файл pom.xml :

<dependency>
<groupId>org.graylog2</groupId>
<artifactId>gelfj</artifactId>
<version>1.1.16</version>
</dependency>

Мы также должны исключить начальный модуль ведения журнала везде, где мы используем начальный модуль Spring Boot:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

Теперь мы можем определить новый аппендер в нашем файле log4j.xml :

<appender name="graylog" class="org.graylog2.log.GelfAppender">
<param name="graylogHost" value="<GRAYLOG IP>"/>
<param name="originHost" value="localhost"/>
<param name="graylogPort" value="12201"/>
<param name="extractStacktrace" value="true"/>
<param name="addExtendedInformation" value="true"/>
<param name="facility" value="log4j"/>
<param name="Threshold" value="INFO"/>
<param name="additionalFields" value="{'environment': 'DEV', 'application': 'GraylogDemoApplication'}"/>
</appender>

Это настроит все сообщения журнала с уровнем INFO или выше для перехода к приложению Graylog, которое, в свою очередь, отправляет сообщение журнала на сервер Graylog.

3.2. Другие платформы ведения журналов

На торговой площадке Graylog есть дополнительные библиотеки, которые поддерживают множество других сред ведения журналов, таких как Logback, Log4J2 и другие. Просто имейте в виду, что эти библиотеки не поддерживаются Graylog . Некоторые из них заброшены, а на другие практически нет документации.

Следует соблюдать осторожность при использовании этих сторонних библиотек.

3.3. Коляска для сборщика Graylog

Еще один вариант сбора логов — Graylog Collector Sidecar . Sidecar — это процесс, который выполняется вместе с сборщиком файлов и отправляет содержимое файла журнала на сервер Graylog.

Sidecar — отличный вариант для приложений, в которых изменение файлов конфигурации журналов невозможно. А поскольку он считывает файлы журналов непосредственно с диска, его также можно использовать для интеграции сообщений журнала с любой платформы и языка программирования .

4. Просмотр сообщений в Graylog

Мы можем использовать панель управления Graylog, чтобы подтвердить успешную доставку наших сообщений журнала. Использование фильтра source:localhost покажет сообщения журнала из нашего примера конфигурации log4j выше:

./2747368ad30ec0ff9074000cab17cc9a.jpg

5. Вывод

Graylog — это лишь один из многих сервисов агрегации журналов. Он может быстро искать миллионы сообщений журнала, визуализировать данные журнала в режиме реального времени и отправлять предупреждения, когда выполняются определенные условия.

Для интеграции Graylog в приложение Spring Boot требуется всего несколько строк конфигурации и без какого-либо нового кода.

Образцы кода, как всегда, можно найти на GitHub .