返回 导航

大数据

hangge.com

Logstash日志收集工具使用详解3(样例2:日志文件采集、输出至Elasticsearch)

作者:hangge | 2024-03-29 08:40

三、日志文件采集、输出至 Elasticsearch

1,功能说明

(1)在该样例中,通过 Logstash 采集服务器中应用程序运行期间产生的日志信息,特别是异常日志信息,采集到之后将其存储到 Elasticsearch(简称 ES)中,对外提供异常日志检索服务。

(2)具体实现如下:
  • Input 使用 file 插件,采集指定日志文件中的新增日志数据;
  • Filter 使用 drop 件,过滤掉 DEBUGINFO 级别的日志数据;
  • Output 使用 elasticsearch 插件,将采集到的数据保存到 ES
注意:
  • 应用程序在运行时会产生一些异常日志信息,每一条异常日志信息都会有多行。如果使用传统的采集思路一行行地采集,那么后期是无法查看某一条异常日志的详细堆栈信息的。
  • Input 组件中的 Codec 支持多种数据格式,其中有一个 multiline 格式可以解决这个问题,它可以根据一定的规则把多行日志信息保存到一行中。

2,编写配置文件

(1)首先进入 Logstash 目录,执行如下命令创建一个配置文件:
vi file-drop-es.conf

(2)配置文件的内容如下:
1. 在 input 中的 file 插件中指定了 codec=>multiline,其中指定了以下 3 个参数:
  • pattern:必填参数,设置要匹配数据的正则表达式,这里面用到了 TIMESTAMP_ISO8601 这个时间变量,再加上 ^,表示匹配每一行前面不是以时间开头的日志数据,因为异常日志的详细堆栈信息都不是以日期开头的。
  • negate:可选参数,值为 true 或者 false,默认值为 falsetrue 表示不满足 pattern 中指定规则的数据将被保留下来,被下面的 what 参数应用。
  • what:必填参数,值为 previous 或者 next。如果 pattern 中指定的规则与数据匹配,当值为 previous 时,表示指定将匹配到的那一行数据与前一行数据合并;当值为 next 时,表示指定将匹配到的那一行数据与后一行数据合并。
  • 通过这 3 个参数的配合,可以将任何不以时间戳开头的日志数据与前一行数据进行合并,这样即可将同一个异常日志的多行堆栈信息都整合到一行。
2. 在 filter 中用到了 drop 插件,使用 if else if,通过“=~”实现模式匹配,将 DEBUGINFO级别的日志数据过滤掉。
3. 在 output 中用到了 elasticsearch 插件,配置了 Elasticsearch 集群的地址信息和索引库的名称。
input{
  file{
    path=>"/home/log/hangge.log"
    start_position=>"beginning"
    codec=>multiline{
      pattern=>"^%{TIMESTAMP_ISO8601}"
      negate=>true
      what => "previous"
    }
  }
}

filter{
  if [message] =~ "DEBUG" {
    drop{}
  } else if [message] =~ "INFO" {
    drop{}
  }
}

output{
  elasticsearch{
    hosts=>["192.168.60.9:9200"]
    index=>"hangge"
  }
}

3,启动测试

(1)首先我们执行如下命令启动 Logstash 采集任务:
bin/logstash -f file-drop-es.conf

(2)接着我们编辑 /home/log/hangge.log 日志文件,往里面写入如下数据并保存:
2023-11-24 12:15:54,985 [main] [com.hangge.LogPruducer] [DEBUG] - 初始化链接成功!
2023-11-24 12:15:55,985 [main] [com.hangge.LogPruducer] [INFO] - 开始执行计算操作!
2023-11-24 12:15:56,985 [main] [com.hangge.LogPruducer] [ERROR] - 除零异常。
java.lang.ArithmeticException: / by zero
at com.hangge.LogPruducer.main(LogPruducer.java:12)
2023-11-24 12:15:57,988 [main] [com.hangge.LogPruducer] [ERROR] - 计算执行失败!
2023-11-24 12:15:58,985 [main] [com.hangge.LogPruducer] [DEBUG] - 释放链接!

(3)最后,我们到 Elasticsearch 中确认是否有数据,以及数据的格式是否正确。在浏览器中访问“http://192.168.60.9:9200/_search?pretty”即可查询目前 Elasticsearch 中的所有数据。
提示:查看此返回数据中的 message 字段,可以看到 ERROR 级别的多行异常日志数据被整合到了一行,并且过滤掉了 DEBUGINFO 级别的日志数据。
评论

全部评论(0)

回到顶部