首先鄙视 红黑联盟 抓取本文,本文已更新。
数据流向图示参考(图片来自百度以图搜图,向原作者致敬)
开发人员如何使用elk
开发人员需要做的就是将日志信息通过各种渠道发到kafka,本实例以logback为例进行说明,其他接入方式请自行搜索。请先行准备好可以正常使用的已经接入logback的系统,如果你没有准备好,本文将假装你已经准备好。
logback接入elk
- pom文件引入如下依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>com.github.danielwegener</groupId>
<artifactId>logback-kafka-appender</artifactId>
<version>0.1.0</version>
<scope>runtime</scope>
</dependency>
2.在logback配置文件中增加相应的appender
<appender name="KafkaAppender" 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>{"system":"test"}</customFields>
<fieldNames class="net.logstash.logback.fieldnames.ShortenedFieldNames"/>
</layout>
<charset>UTF-8</charset>
</encoder>
<!--kafka topic 需要与配置文件里面的topic一致 否则kafka会沉默并鄙视你-->
<topic>applog</topic>
<keyingStrategy class="com.github.danielwegener.logback.kafka.keying.HostNameKeyingStrategy" />
<deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
<producerConfig>bootstrap.servers=10.39.232.218:9092</producerConfig>
</appender>
<!--你可能还需要加点这个玩意儿-->
<logger name="Application_ERROR">
<appender-ref ref="KafkaAppender"/>
</logger>
<!--还有这个玩意儿-->
<root>
<level value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="KafkaAppender" />
</root>
- 代码中使用
- 如果你将KafkaAppender添加到了root标签下 那么你的INFO极其更严格的基本的日志都将发给kafka,例如你可以这样使用
Logger logger = LoggerFactory.getLogger(this.getClass());
logger.debug("This is a debug message"); 此条日志收日志级别限制 不会同步到kafka
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
- 如果你将KafkaAppender添加到了Application_ERROR下 那么你可以这样使用
Logger logger= LoggerFactory.getLogger("Application_ERROR");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
- 数据查询
在一切顺利的情况下,你可以通过kibana查到类似的记录
配置解释
前面我们按照配置成功的将项目的日志信息写入到了elk中,并在kibana上查到了相应的日志信息。接下来我们相信解析一下前面的配置。
是否包含上下文
<includeContext>true</includeContext>
开启的话会包含hostname等logback的context信息<