logback篇
前面记录了搭建环境等步骤,完成了日志文件内容通过Logstash输出到ES,再到kibana展示等一系列步骤。这一篇文章记录了由logback.xml通过tcp通道方式发送日志到logstash,由logstash传输到ES,kibana展示。
环境配置:
logstash,ES,kibana,搭建在云服务器上
logback.xml配置在项目中,放置在本机上运行
项目是一个springboot项目
1.配置logback.xml文件
首先在pom文件中导入jar包
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
然后在properties文件中配置环境和项目名称参数,如下:
然后在logback.xml中导入环境和项目名称参数
接着建立logback发送日志到logstash的appender节点
destination中配置logstash的云服务地址(外网IP)和端口
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>1.1.1.11:9600</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
logback.xml的root节点执行appender
到这里,logback.xml中的配置已经完成了。
2.新建与logback.xml通信脚本
在logstash云服务器上的 /etc/logstash/conf.d/下建立脚本,例如我的脚本:logbacklog.conf,内容如下:
仔细看脚本内容,index参数那一项,两个参数就是在logback.xml中导入的参数,索引采用:环境+项目名+日期组成。例如:dev-order:2019-03-06
input {
tcp{
port => 9600
codec => json_lines
type => "boot"
}
}
output {
elasticsearch {
hosts => ["1.1.1.11:9200"]
action => "index"
codec => rubydebug
index => "%{[spring_profiles_active]}-%{[spring_application_name]}:%{+YYY-MM-dd}"
template_name => "%{[spring_application_name]}"
user => "elastic"
password => "changeme"
}
}
脚本建立好了,用命令检测一下脚本是否正常,按照上一篇搭建笔记之logstash篇步骤进行检查,如无问题。重启logstash。
3.进行日志发送
在demo项目中写一个测试方法,打印日志
然后启动项目,访问此方法。待结果返回出来,进入kibana,查看是否生成了索引和log日志是否记录下来了,我的日志内容如下:
备注:不知道如何查看的朋友,可以按照搭建笔记之kibana篇进行索引和日志查看。
到这里完成了我们logback.xml发送日志到logstash,logstash进行日志存储到ES,kibana展示的全过程,
4.日志精准发送
像刚才的示例方法中的日志,四个级别,info,error,debug,warn,一股脑的发送到了logstash上,在有些时候,我们只需要记录下error级别日志就够了,其他的日志完全浪费ES的空间。或者是另一种情况,指定到具体的包具体的文件中发送指定级别的日志,这种需求。这个时候我们就不能把日志不进行区分的全部发送过去了。如何精准发送?只需要修改logback.xml文件就行了,注释root中的logstash节点,新增一个logger节点
logger节点意思
name 发送日志的目录,也就是只会发送com.guhui.demo.controller路径下所有文件的日志
level 日志级别,定义日志只发送那个级别的日志,进行日志过滤
additivity additivity的作用在于 logger是否使用 root配置的appender进行输出。就像switch的穿透一样
false:表示只用当前logger的appender-ref。
true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。
然后我们新建一个不同的包,包下建一个类,写一个测试方法,如图:
然后重启项目,分别访问两个方法,进入kibana,查看索引下的日志,发现只有controller目录的日志记录下来了,test目录的日志没有记录。
如果索引的日志太多了,不好查看,可以在Dev Tools 中删除索引,执行:DELETE index。index是你索引名称
通过logger节点,指定包,指定日志级别,发送日志,实现日志的精准发送,就完成了
demo项目,在我个人的github上,感兴趣的可以下载下来进行参考:demo项目
丶clearwater