ELK6.X版本对log4j2日志系统功能进行了一次整合,它和filebeat的实现方式不同,filebeat是采取读日志文件的方式进行同步到elasticsearch,相当于是读文件同步。现在有了log4j2,我们可以通过socket的方式以log4j2的日志项目作为客户端,发送生成的日志信息到Logstash,从而同步日志信息到elasticsearch。
本文是windows环境下进行,采用的ELK、分词器都是6.8.6版本的。
一、配置分词器
在6.4版本后的elasticsearch中,配置IK分词器非常的简单:
第一步:下载IK分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases
选择与elasticsearch相同版本的分词器,即6.8.6:
第二步:下载完成后解压到elasticsearch的文件夹中plugins目录下的analysis-ik,没有就创建,这样分词器就配置成功了,不需要像之前那样再去修改elasticsearch的配置文件夹
第三步:启动elasticsearch
二、配置Kibana
第一步:在官网下载Kibana
https://www.elastic.co/cn/downloads/past-releases/kibana-6-8-6
下载后直接解压
第二步:可以在config目录下的kibana.yml中配置kibana的地址和端口号,以及es的地址
第三步:运行bin下面的kibana.bat,启动kibana
启动成功后可以看到:
三、配置Logstash
Logstash的配置方式与原来一样,创建一个新的配置文件,连接日志系统,我们在bin目录下创建一个logstash.conf,文件的内容:
input { tcp { mode => "server" host => "127.0.0.1"#日志系统的地址 port => 4568#日志系统的端口号 } } output { elasticsearch { hosts => ["localhost:9200"] index => "log"#在ES中创建的索引名称 document_type => "log4j2" } }
然后通过命令启动logstash
logstash -f logstash.conf
四、log4j2的日志系统
现在大多数项目都开始选用了log4j2的日志工具,这个工具非常方便,至于它的优点我们不详细介绍了,这里就以一个基于springboot的demo给es发送日志信息,
第一步:引入maven,这里我只贴上了log4j2和lombok的maven
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
第二步:配置log4j2-spring.xml文件
在log4j2中,弃用了原来的properties配置文件方式,取而代之的是我们原来使用的xml文件,在这里,我们只介绍socket的配置
<?xml version="1.0" encoding="UTF-8" ?> <Configuration> <Properties> <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1}:%L -%m%n</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT" follow="true"> <PatternLayout pattern="${LOG_PATTERN}" /> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </Console> <!--这个是连接到Logstash的socket配置,IP和端口就是Logstash中创建的配置文件的IP和端口 --> <Socket name="logstash-tcp" host="localhost" port="4568" protocol="TCP"> <PatternLayout pattern="${LOG_PATTERN}" /> </Socket> </Appenders> <Loggers> <Root level="DEBUG"> <AppenderRef ref="Console"/> <AppenderRef ref="logstash-tcp" /> </Root> </Loggers> </Configuration>
第三步:编写测试代码,启动项目
import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class Main { @RequestMapping("/getUser") public String getUser(){ log.debug("debug 这个是debug!"); log.info("info 这个是info!"); log.warn("warn 这个是warn!"); log.error("error 这个是error!"); return "返回成功"; } }
五、测试
启动日志demo后,访问http://localhost:80/getUser,然后我们去kibana界面,kibana界面地址是http://localhost:5601,配置我们的信息
第一步:创建index
点击Management → 点击Create index pattern → 输入log(这个就是在Logstash配置文件中创建的index)→ next step
具体操作如图:
第二步:创建好index后,我们点击discover就可以看见我们同步的日志信息了