最近需要使用Elasticsearch做一个日志系统,本文只介绍log4j内容同步到Elasticsearch,至于日志的查询和分类,会在后面介绍。
一、配置并打开Elasticsearch
这个操作不在叙述,需要注意的是,本文使用的是elasticsearch-5.6.8版本的elasticsearch,所以logstash和filebeat也是5.6.8,本文使用的环境是windows系统。
二、配置filebeat
之前我们已经介绍了使用logstash来同步mysql数据库,那么logstash是否也能同步log4j?在查询文档后发现,logstash在低版本情况下是可以直接同步log4j的,但是如果使用logstash5.X的版本,logstash变不在支持log4j转而将这个功能放入到了Filebeat实现,所以使用log4j的日志系统将采用Elasticsearch+logstash +filebeat+log4j的形式。
首先介绍一下什么是Filebeat。Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放,接下来将介绍配置filebeat。
1.下载filebeat,需要注意的是filebeat版本应该elasticsearch版本一致,官网地址:
https://www.elastic.co/downloads/beats/filebeat
2.修改filebeat文件中的filebeat.yml文件
input_type:long
path:
- 你的log4j文件绝对路径
在filebeat.yml文件中的Elasticsearch output项可以修改Elasticsearch 的地址
在filebeat.yml文件中的Logstash output项修改Logstash的地址(这个地址和端口号必须与接下来配置Logstash的.conf文件一致)
以上的配置已经可以同步,其他的详细配置,可以参考这篇博客:https://blog.csdn.net/haozhuxuan/article/details/79738447
3.启动filebeat
打开命令终端,进入filebeat文件夹运行:
filebeat -e -c filebeat.yml
三、配置Logstash文件
1.在Logstash文件夹下创建conf文件夹
2.在创建的conf文件夹中创建log4j.conf文件,文件的内容为:
input{
beats {
port => 9600
}
}
output{
stdout{ codec => rubydebug }
elasticsearch {
hosts => "localhost:9200"
index => "t-server-%{+YYYY.MM.dd}"
document_type => "log4j_type"
}
}
3.运行log4j.conf文件:
使用windows终端进入Logstash文件下,运行:
logstash -f ../conf/log4j.conf
完成这一步,整个同步过程就已经完成了
四、测试
本文使用的是spring boot项目,需要添加log4j的依赖:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
在application.properties同一级下创建log4j.properties文件:
### 设置###
log4j.rootLogger = debug,stdout,D ### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=E:/log/debug.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =E:/log/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
编写测试代码:
import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class LoginController { private static final Logger logger = Logger.getLogger(LoginController.class); @RequestMapping("/getUser")
public String getUser(){
logger.debug("debug message!");
logger.info("info message!");
logger.warn("warn message!");
logger.error("error message!"); try{
System.out.println(10/0);
}catch(Exception e){
logger.error(e);
}
return "返回成功"; } }
测试代码
访问:http://localhost:8880/getUser 后,我们可以在head中看见,刚才的日志信息已经同步到Elasticsearch中