前言
在生产环境中,有时候会出现一些意想不到的问题,需要进入服务器进行日志排查。但是出于服务器安全问题,生产环境的服务器又不能交于每个开发手中。故而需要一个日志系统用于线上日志排查。
话不多说进入正题--
流程图
用户发生请求产生日志信息,Logback讲日志信息发送并存储到Kafka某个topic中(下面会说配置)等待消费,logstash获取到kafka中日志信息后,将其写入到es中,最终由kibana从es中进行读取展示。
PS:kafka不是必须的,也可以直接通过logstash进行文件分析存储到es,但是我们建议kafka
Logback配置
- pom.xml文件引入logback-kafka 相关jar包
<dependency>
<groupId>com.github.danielwegener</groupId>
<artifactId>logback-kafka-appender</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
logback-spring.xml 日志配置
日志传输到kafka的关键配置,下面配置都是简要配置,如想深入配置可参考官方文档
<appender name="kafka-appender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
<encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder">
<layout class="net.logstash.logback.layout.LogstashLayout" >
<includeContext>true</includeContext>
<includeCallerData>true</includeCallerData>
<customFields>{"service-name":"auth-service"}</customFields>
<fieldNames class="net.logstash.logback.fieldnames.ShortenedFieldNames"/>
</layout>
<charset>UTF-8</charset>
</encoder>
<!--kafka topic 需要与logstash配置的topic一致 -->
<topic>auth-service-log</topic>
<keyingStrategy class="com.github.danielwegener.logback.kafka.keying.HostNameKeyingStrategy" />
<deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
<producerConfig>bootstrap.servers=Your kafka ip:port</producerConfig>
</appender>
<root level="INFO">
<appender-ref ref="kafka-appender" />
</root>