Регистрация Thorntail (рой мух) в Greylog

Как я могу включить ведение журнала роя диких мух в greylog — или, другими словами: вести ведение журнала в формате gelf? Кто-нибудь сделал это уже?

Кажется, на рынке Graylog есть только фреймворки, которые работают вместе с log4j (gelfj) или logback, но не с помощью системы ведения журнала jboss. И из других вопросов о SO я предполагаю, что невозможно настроить thorntail для регистрации с помощью log4j (что в любом случае будет несколько неправильным: регистрация канала через вход jboss в log4j, чтобы направить его в gelf ..)

Основное требование заключается в том, что я хочу докерировать свое приложение swarm и использовать greylog в качестве централизованного ведения журнала. Я понимаю, что могу настроить докер для входа в gelf, но это будет означать, что у меня нет контроля над расширенными функциями gelf в моем приложении, верно?

Каким будет предпочтительный способ централизованного ведения журнала из thorntail/swarm?


person Lasrik    schedule 18.06.2018    source источник
comment
Раньше я использовал Logstash или FluentD в качестве централизованного механизма ведения журнала.   -  person Ken    schedule 18.06.2018
comment
К сожалению, я привязан к Graylog для этого проекта :(   -  person Lasrik    schedule 18.06.2018


Ответы (1)


Да, в thorntail можно отправлять журналы в Graylog, потому что некоторые реализовали для нас обработчик журналов gelf, совместимый с jboss. Некоторые ограничения заключаются в том, какую структуру ведения журнала вы используете. Мне пришлось использовать логгер jboss через slf4j и не тратить больше времени на запуск log4j. Может быть, вы узнаете, как этого можно достичь.

Где взять совместимый с jboss обработчик логов для gelf?

Здесь вы найдете git-репозиторий совместимого с jboss обработчика журналов, который поддерживает формат gelf.

https://github.com/mp911de/logstash-gelf

Как настроить обработчик журнала?

См. следующую ссылку для документа этого обработчика журнала.

https://logging.paluch.biz/

Как мне интегрировать его в Торнтейл?

Для этого нужно проделать некоторую работу.

1. Добавьте зависимость к вашему pom.xml

  <dependency>
        <groupId>biz.paluch.logging</groupId>
        <artifactId>logstash-gelf</artifactId>
        <version>1.12.0</version>
        <scope>provided</scope>
    </dependency>

2. Создайте собственный файл module.xml для Thorntail.

src/main/resources/modules/biz/paluch/logging/main/module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="biz.paluch.logging">
    <resources>
        <artifact name="biz.paluch.logging:logstash-gelf:1.11.2" />
        <artifact name="redis.clients:jedis:2.9.0" />
        <artifact name="org.apache.commons:commons-pool2:2.4.3" />
    </resources>

    <dependencies>
        <module name="org.apache.log4j" />
        <module name="org.slf4j" />
        <module name="javax.api" />
        <module name="org.jboss.logmanager" />
    </dependencies>
</module>

3. Настройте Thorntail для использования этого обработчика журнала.

swarm:
  jaeger:
  logging:
    file-handlers:
    custom-handlers:
      GELF-HTTP:
        named-formatter: MY_LOG_PATTERN
        attribute-class: biz.paluch.logging.gelf.wildfly.WildFlyGelfLogHandler
        module: biz.paluch.logging
        properties:
          host: "http://graylog"
          extractStackTrace: true
          includeFullMdc: true
          maximumMessageSize: 1048576
    root-logger:
      level: WARN
      handlers:
        - CONSOLE
        - GELF-HTTP

Как сделать регистратор доступным в моем приложении?

import org.jboss.logging.Logger;
import org.slf4j.LoggerFactory;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;

/**
 * This produces and configures the logger.
 *
 * @author Thomas Herzog <[email protected]>
 * @since 06/08/18
 */
@ApplicationScoped
public class LoggerConfiguration {

    @Produces
    @Default
    @Dependent
    Logger createLogger(final InjectionPoint ip) {
        if (ip.getBean() != null) {
            return Logger.getLogger(ip.getBean().getBeanClass());
        } else if (ip.getMember() != null) {
            return Logger.getLogger(ip.getMember().getDeclaringClass());
        } else {
            return Logger.getLogger("default");
        }
    }
}
person Thomas Herzog    schedule 31.03.2019