ELK日志采集和查询方法

回顾

前两篇文章简单的介绍了JAVA通过代码如何使用MDC进行日志打印,去查看log4j MDC用户操作日志追踪配置,以及ELK平台的搭建,去查看log4j MDC用户操作日志追踪配置。接下来将结合实际案例,简单介绍生产服务器的日志如何被logstash进行采集,并统一汇总,使得我们能够快速、方便、高效的查询日志,并且可以方便定位到该条日志是哪台服务器产生的,再也不用盲目的翻遍所有的生产服务器,只为找到出问题的那一台机器。

logstash日志采集

因为我们打印的日志各种各样,为了使我们能够方便的通过kibana进行检索,我们需要在logstash配置对应的搜集规则,如果你啥也不做,只是简单的搜集,可能会出现一些意想不到的错误。

  1. 日志收集是按行来收集的,当你的日志发生了换行,这时候换行的那几行就被认为是独立的一行,这样采集到的日志可读性很差
  2. 如果你使用了MDC,配置了log4j的日志格式输出,不配规则的话一整行都会被采集到message字段,此时你要根据某个字段快速搜索的话基本也是不可能的事情了

基于以上可能出现的“错误”,我们需要针对当前项目的日志配置文件制定一套属于自己的收集规则。
其实logstash的配置文件很简单,基本就以下的套路,日志源从哪里来(input输入插件),通过什么样的规则(filter过滤插件),最终将日志输出到什么地方(output输出插件)

# 输入
input {
  ...
}

# 过滤器
filter {
  ...
}

# 输出
output {
  ...
}

因为我们这里介绍的是项目日志的采集,所以input当然是从file文件中来,配置如下:

input {
    file {
      type => "wechat-log"
      path => ["/usr/local/tomcat/logs/wechat/*.log"]
      codec => multiline{
          pattern => "^\[%{TIMESTAMP_ISO8601}\]"
          what => "previous"
          negate => true
      }
      start_position => "beginning"
    }
}

其中path是日志采集的地方,从日志文件的第一行开始采集,定义一个type(一般最后它就是kibana的索引)。

codec插件

这里codec的出场能够解决诸如我们前面提到的日志换行的问题。在logstash读入的时候,通过codec编码解析日志为相应格式,从logstash输出的时候,通过codec解码成相应格式。当我们的应用程序打印出具有换行的日志的时候,比如ERROR日志,一般有错误堆栈消息,各种at开头的一行,我们可以通过multiline来进行处理,让logstash认为这一行是属于上一行的内容,而不是把它作为新的一行进行处理。
一般我们的tomcat日志都是以时间开头的,对于像at那种堆栈的信息都是不存在时间的,所以我们可以配置正则表达式【^[%{TIMESTAMP_ISO8601}]】,只有当以时间开头的一行才算新的一行ÿ

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值