logback通过kafka接入ELK详解

本文详细介绍了开发人员如何使用ELK,重点讲解了logback如何接入ELK,包括配置解释如是否包含上下文、日志来源、自定义附加字段、主键分区策略等,以及kafka消息提交策略的异步和阻塞策略。同时,文章还讨论了如何处理日志格式、使用不同kafka topic以及处理非INFO日志级别问题。
摘要由CSDN通过智能技术生成

首先鄙视 红黑联盟 抓取本文,本文已更新。

数据流向图示参考(图片来自百度以图搜图,向原作者致敬)

日志流向

参考图示 图片来自网络

这里写图片描述

开发人员如何使用elk

开发人员需要做的就是将日志信息通过各种渠道发到kafka,本实例以logback为例进行说明,其他接入方式请自行搜索。请先行准备好可以正常使用的已经接入logback的系统,如果你没有准备好,本文将假装你已经准备好。

logback接入elk

  1. 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>
  1. 代码中使用
  • 如果你将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");
  1. 数据查询
    在一切顺利的情况下,你可以通过kibana查到类似的记录
    kibana 查询示例

配置解释

前面我们按照配置成功的将项目的日志信息写入到了elk中,并在kibana上查到了相应的日志信息。接下来我们相信解析一下前面的配置。

是否包含上下文

<includeContext>true</includeContext>

开启的话会包含hostname等logback的context信息<

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值