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
<dependency>
<groupId>com.gitee.dengmin</groupId>
<artifactId>logback-kafka-appender</artifactId>
<version>1.0</version>
</dependency>
spring.application.name
из файла конфигурации Spring Boot проекта для удобства поиска журналов через имя проекта в Elasticsearch<springProperty scope="context" name="name" source="spring.application.name"/>
# Замена темы и хостов в аппендере
<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("/**");
}
}
Редактирование файла конфигурации /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 )