Springboot используют коллекцию журнала Graylog

Spring Boot

В этой статье описывается, как использовать коллекцию журналов Graylog SpringBoot.

1. Введение в Graylog

Graylog — это система сбора журналов производственного уровня, которая объединяет Mongo и Elasticsearch для сбора журналов. Среди них Mongo используется для хранения метаданных и информации о конфигурации Graylog, а ElasticSearch — для хранения данных.

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

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

2. Установите Graylog

Многие методы установки рекомендуются в официальных документах, здесь мы берем метод docker-compose в качестве примера для установки Graylog, mongo и elasticsearch.

Далее следует docker-compose.yml (здесь немного изменено на основе официального сайта):

version: '2'
services:
  # MongoDB: https://hub.docker.com/_/mongo/
  mongodb:
    image: mongo:3
  # Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/docker.html
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.6.1
    environment:
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 512m
  # Graylog: https://hub.docker.com/r/graylog/graylog/
  graylog:
    image: graylog/graylog:3.0
    environment:
      # CHANGE ME (must be at least 16 characters)!
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      # Password: admin
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://106.13.35.42:9000/
    links:
      - mongodb:mongo
      - elasticsearch
    depends_on:
      - mongodb
      - elasticsearch
    ports:
      # Graylog web interface and REST API
      - 9000:9000
      # Syslog TCP
      - 1514:1514
      # Syslog UDP
      - 1514:1514/udp
      # GELF TCP
      - 12201:12201
      # GELF UDP
      - 12201:12201/udp

Среди них 106.13.35.42 — мой внешний сетевой IP-адрес, а локальная служба может использовать 127.0.0.1.

Для других способов вы можете просмотреть официальную документацию,docs.Gray log.org/en/3.0/afraid…

3. Настройте Graylog

Зайдите на http://ip:9000 в браузере, как показано на рисунке:

Имя пользователя и пароль по умолчанию здесь — admin, как показано на рисунке после ввода.

Выберите вход с помощью кнопки Система и введите источник входа, как показано на рисунке.

Здесь возьмем GELF UDP в качестве примера, выберем GELF UDP в позиции на рисунке, после выбора нажмем Launch new input, как показано на рисунке

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

После сохранения, как показано на рисунке, здесь настройка завершена.

4. Вывод журнала SpringBoot в Graylog

Вот примеры журналов Logback и журналов Log4j2 соответственно.

4.1 Журнал регистрации

Используемый здесь logback-gelf выводит логи в Graylog. На github есть подробное введение в использование logback-gelf. Вот простой пример. Адрес на гитхабе:GitHub.com/OSI, например, март/….

Создайте новый проект, добавьте зависимость logback-gelf, и файл pom будет выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dalaoyang</groupId>
    <artifactId>springboot2_graylog</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2_graylog</name>
    <description>springboot2_graylog</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>de.siegmar</groupId>
            <artifactId>logback-gelf</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Добавьте конфигурацию журнала журналов, создайте новый файл logback-spring.xml со следующим содержимым:

<configuration>

    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
        <graylogHost>106.13.35.42</graylogHost>
        <graylogPort>12201</graylogPort>
    </appender>

    <!-- 控制台输出日志级别 -->
    <root level="info">
        <appender-ref ref="GELF" />
        <appender-ref ref="STDOUT" />
    </root>


</configuration>

Запустите проект, текущий порт проекта — 8081, проверьте консоль Graylog, как показано на рисунке:

4.2 Журналы Log4j2

В журнале log4j2 используется зависимость log4j2-gelf. На github также есть соответствующее введение. Файл pom выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dalaoyang</groupId>
    <artifactId>springboot2_graylog_log4j</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2_graylog_log4j</name>
    <description>springboot2_graylog_log4j</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.graylog2.log4j2</groupId>
            <artifactId>log4j2-gelf</artifactId>
            <version>1.3.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Создайте log4j2-spring.xml для настройки и вывода информации журнала следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF" packages="org.graylog2.log4j2">
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss:SSS} - %-5level  - %pid - %t - %c{1.}:%L - %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
        <GELF name="gelfAppender" server="106.13.35.42" port="12201" hostName="appserver01.example.com">
            <PatternLayout pattern="%logger{36} - %msg%n"/>
            <Filters>
                <Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
                <Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
            </Filters>
            <!-- Additional fields -->
            <KeyValuePair key="foo" value="bar"/>
            <KeyValuePair key="jvm" value="${java:vm}"/>
        </GELF>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="gelfAppender"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Номер порта, используемый этим проектом, — 8888, что хорошо видно в логе.

5. ELK vs Graylog

Здесь мы возьмем в качестве примера только сбор логов и кратко поговорим о выборе между ними.Мое личное предложение зависит от существующего стека технологий.Например, если есть готовый Mongodb, то выбор Graylog может сэкономить много стоит.ELK аналогичен.Не гонитесь слепо за технологиями и не выбирайте.

6. Исходный код

адрес источника springboot2_graylog:git ee.com/Большой Брат Ян/Да…

springboot2_graylog_log4j Исходный адрес:git ee.com/Большой Брат Ян/Да…