1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dengmin-logback-kafka-appender

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Логгер logback-kafka-appender

Описание

Logback-kafka-appender — это приложение, которое записывает журналы в виде JSON в очередь сообщений Kafka.

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

Отслеживание запросов с использованием traceID делает более удобным отслеживание и отладку журналов.

Формат JSON входных данных облегчает сбор данных с помощью Logstash.

Установка

git clone https://gitee.com/dengmin/logback-kafka-appender.git
cd logback-kafka-appender
mvn clean install

Добавление зависимости pom

<dependency>
    <groupId>com.gitee.dengmin</groupId>
    <artifactId>logback-kafka-appender</artifactId>
    <version>1.0</version>
</dependency>

Настройка файла конфигурации logback-spring.xml

  • Импорт переменной spring.application.name из файла конфигурации Spring Boot проекта для удобства поиска журналов через имя проекта в Elasticsearch
<springProperty scope="context" name="name" source="spring.application.name"/>
  • Конфигурирование аппендера для замены адресов Kafka в hosts и темы отправляемых сообщений
# Замена темы и хостов в аппендере
<appender name="kafka" class="com.gitee.dengmin.logback.KafkaAppender">
    <appName>${name}</appName>
    <topic>cloud_logs</topic>
    <hosts>10.10.47.6:9092,10.10.47.9:9092</hosts>
</appender>
<appender name="kafka-async" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>4096</queueSize>
    <includeCallerData>true</includeCallerData>
    <appender-ref ref="kafka"/>
</appender>
```## Конфигурация интерцептора

```java
@Override
public boolean preHandle(HttpServletRequest request,
                          HttpServletResponse response,
                          Object handler) throws Exception {
    String REQUEST_ID = "REQUEST-ID";
    MDC.put(REQUEST_ID, UUID.randomUUID().toString().replaceAll("-", ""));
    return true;
}

@Override
public void afterCompletion(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler, Exception ex) throws Exception {
    MDC.clear();
}
}
@Configuration
public class AutoConfiguration implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogMDCInterceptor()).addPathPatterns("/**");
    }
}

Конфигурация сборки логов с помощью logstash

Редактирование файла конфигурации /etc/logstash/conf.d/kafka.conf

input {
    kafka {
        bootstrap_servers => "10.10.47.6:9092,10.10.47.9:9092"
        topics => ["cloud_logs"]   # тема, указанная в аппендере
        consumer_threads => 5
        decorate_events => true
        codec => json {charset => "UTF-8"}
        auto_offset_reset => "latest"
        client_id => "kafka_log_collect"
    }
}

output {
    elasticsearch {
        hosts => "10.10.47.10:9200"
        # Для старых версий Logstash и новых версий формат отличается, в новой версии требуется добавление [kafka]
        index => "%{[@metadata][topic]}-%{+YYYY-MM-dd}"
        index => "%{[@metadata][kafka][topic]}-%{+YYYY-MM-dd}"
    }
    # stdout {codec=>rubydebug}
}
```### Формат данных, отправляемых в Kafka

{ "appName": "demo", "method": "restartedMain", "level": "INFO", "className": "org.springframework.cloud.context.scope.GenericScope", "dateTime": "2020-06-09 17:36:07", "line": "295", "message": "BeanFactory id=507e95a4-a9a1-3a1c-80dd-fcb5d8753cf2", "traceId": "5413d7d744ea497e84e2bca954587cd5" }


### Создание маппинга в Elasticsearch

curl -XPUT "http://192.168.0.111:9200/_template/cloud_logs" -H 'Content-Type: application/json' -d'{
"index_patterns": [ "cloud_logs*" ], "mappings": { "properties": { "line": { "type": "long" }, "@timestamp": { "type": "date" }, "dateTime": { "type": "text" }, "appName": { "type": "text" }, "message": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" }, "className": { "type": "text" }, "level": { "type": "text" }, "method": { "type": "text" }, "traceId": { "type": "text" }, "timestamp": { "type": "long" } } }, "aliases": {} }'


Комментарии ( 0 )

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

Введение

Логбэк (logback) с помощью пользовательского приложения записывает логи в Kafka. Через logstash они в итоге попадают в Elasticsearch. Простота и удобство использования: достаточно добавить зависимость в pom, код не требуется изменять. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dengmin-logback-kafka-appender.git
git@api.gitlife.ru:oschina-mirror/dengmin-logback-kafka-appender.git
oschina-mirror
dengmin-logback-kafka-appender
dengmin-logback-kafka-appender
master