使用logstash清洗日志

使用logstash清洗日志

logstash是一个开源的数据收集引擎,集成了多种数据输入和输出方式。 可以理解成是一种数据管道。每种方式是以插件的形式集成在logstash中。

简单举例

logstash本身包括三部分,input, filter, output。

  • input :数据输入
  • filter:数据转化,过滤,分析
  • output:数据输出

简单举例,下面文件保存在logstash-test.conf文件中

在上面的例子中input是标准输入,filter没有做任何的转化,output是标准输出,不过输出格式是rubydebug。在logstash安装目录下,运行 bin/logstash -f logstash-test.conf

可以看到输出是格式化的,内容放在了message中。

清洗日志

利用filter插件,logstash可以处理一切格式化的东西。介绍下是如何处理应用日志的。上面的例子中,内容都放在了message中,我们可以利用filter把message中固定字段都提取出来。

使用了file插件,path标识了文件的文件,当然path也可以是数组的形式存在,指定多个文件路径,其中也可以是用通配符。 start_position说明从哪个位置解析文件,默认值为end。

使用grok可以把非结构化的数据转化成结构化数据,便于使用。虽然test.log中是非结构化的数据,但是它确是标准化的,因为每一行都遵循相同的格式。grok其实就用正则匹配的方式,把需要的字段提取出来,并赋上有意义的字段名称。
修改filter部分

结果如下

grok默认提供了很多patterns,大多数情况下已经够用了。位置在logstash安装目录下patterns/grok-patterns。 可以在这里http://grokdebug.herokuapp.com/进行grok调试。也可以自己定义pattern, 放在grok-patterns中,就可以使用。对nginx日志的处理,就是自定义的pattern。

日志输出

我们把处理过的日志输出到elasticsearch中,便于查询。默认情况下,elasticsearch会创建logstash-YYYY.MM.DD形式的索引。

复杂举例

目前我们会把订单实时交易同步到elasticsearch中,便于在kibana中查询。实时订单通过rabbitmq进处理。

由于rabbitmq的内容格式是json,通过json插件进行解码。关注下@timestamp这个字段。默认情况下,这个是logstash处理时的时间戳。很多情况下,这不是我们想要的,有时需要自定义的字段来替换这个字段的值。这可以通过date插件实现。在本例中,我们使用完成时间来替换的。完整的filter如下。

此条目发表在WEB开发分类目录。将固定链接加入收藏夹。

使用logstash清洗日志》有 1 条评论

  1. Josephscand说:

    delta airlines overweight baggage fees Delta

发表评论

邮箱地址不会被公开。