Logstash之日志多行合一行(日志错行)

我们在用Logstash收集日志的时候会碰到日志会错行,这个时候我们需要把错的行归并到上一行,使某条数据完整;也防止因为错行导致其他字段的不正确。

在Logstash-filter插件中,multiline插件可以解决这个问题,举个例子如下:

假如我们的日志形式如下:

2016-04-05 13:39:52.534 1.28.253.193 201603110904
07705e58772f6c 22863457 10.0.251.146 http://q.hexun.com/102148/quickmessage.aspx
2016-04-05 13:39:52.534 114.81.254.169 201604051339 0 10.0.251.146 http://forex

上面这两条日志由于第一条日志错行,如果不处理错行,可能会收集到三条日志。

下面我们可以配置filter处理错行:

input{
        kafka {
          zk_connect => "bdc41.hexun.com:2181,bdc40.hexun.com:2181,bdc46.hexun.com:2181,bdc54.hexun.com:2181,bdc53.hexun.com:2181"
          group_id => "logstash"
          topic_id => "TrackLogT"
          reset_beginning => false # boolean (optional)
          consumer_threads => 3  # number (optional)
          decorate_events => true
  #        codec => plain {
  #          charset => "UTF-8"
  #       }
       }
}

filter {
       multiline {
            pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
            negate => true
            what => "previous"
        }

      ruby {
           init =>"@kname =['dateday','datetime','ip','cookieid','userid','logserverip','referer']"
           code =>"event.append(Hash[@kname.zip(event['message'].split(/ /))])"
           remove_field => ["message"]

      }
}

output{
  #  stdout{
  #    codec=>rubydebug
  #  }

  elasticsearch{
    hosts => [ "10.130.2.53:9200","10.130.2.46:9200","10.130.2.54:9200" ]
    flush_size=>50000
    workers => 5
    index=> "logstash-tracklog"
  }
}

上述配置重点就在于:

 multiline {
            pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
            negate => true
            what => "previous"
        }

这里所采用的是正则匹配行头的方式来实现合并错行的:假如某一行行头不能匹配\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2},则把此行归并到上一行,如此可以实现错行合一的效果。

在这里第二行开头为:07705e58772f6c 228,此行不能匹配\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}这个正则,所以把第二行归并到第一行。

这种方式会造成延迟一条的现象:因为如果没有下一条数据能匹配这个正则,则说明此条数据还有可能继续错行,所以在第三行数据来之后,匹配成功,错行结束,第一条日志才会往下走(进行分割,直至索引进ES)。

时间: 2024-08-29 08:08:21

Logstash之日志多行合一行(日志错行)的相关文章

easyUi dataGrid 行高设置,解决错行问题

在easyUi dataGrid中,如果使用了frozenColumns和columns,如果行高不一样,可以选择其中的一个格式化一下高度即可. 代码 columns : [ [ { title : '备注', field : 'memo', width : 150, styler : function(value,row,index){ return 'height:30px'; } }] ] 原文地址:http://blog.51cto.com/1197822/2157015

Android学习笔记——log无法输出的解决方法和命令行查看log日志

本人邮箱:[email protected],欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3983936.html. 知识点 1.log无法输出的解决方法 2.通过命令行(command line)查看Android调试的log日志 log无法输出的解决方法 今天调试Android程序,发现Eclipse不输出log日志了.这让我很烦恼,程序调试的log都没法看到了.Google搜索了一些资料.发现stackoverflow上有很

hive命令行不打印日志

[Author]: kwu hive命令行不打印日志,hive的命令行运行会输出mapreduce的日志,这些日志对大部分用户来说是不需要的. 如何去掉这个日志: hive -S 加上 "-S"  参数即可(-S,--silent ). 版权声明:本文为博主原创文章,未经博主允许不得转载.

安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台

本文是参考logstash官方文档实践的笔记,搭建环境和所需组件如下: Redhat 5.7 64bit / CentOS 5.x JDK 1.6.0_45 logstash 1.3.2 (内带kibana) elasticsearch 0.90.10 redis 2.8.4 搭建的集中式日志分析平台流程如下: elasticsearch 1.下载elasticsearch. wget https://download.elasticsearch.org/elasticsearch/elasti

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 Elasticsearch 官方网站 Elasticsearch文档 NLog.Targets.ElasticSearch   package Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据. 它使用 Java 编写,基于 Apache Lucene,尽管这些细节隐藏在

(一个)kafka-jstorm集群实时日志分析 它 ---------kafka实时日志处理

package com.doctor.logbackextend; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import kafka.consumer.Consumer; import kafka.consumer.ConsumerConfig; import kafka.consumer.ConsumerIterator; import

SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 这个标题有点用词不当,因为运行在大容量日志恢复模式里的数据库,我们通常是长期不管理日志.但是,DBA会考虑在大容量加载时,短期切换到大容量恢复模式.当数据库在大容量模式里运行时,一些其他例如索引重建的操作会最小化日志(minimally logged),因此在日

利用开源日志收集软件fluentd收集日志到HDFS文件系统中

说明:本来研究开源日志的系统是flume,后来发现配置比较麻烦,网上搜索到fluentd也是开源的日志收集系统,配置简单多了,性能不错,所以就改研究这个东东了!官方主页,大家可以看看:fluentd.org,支持300+的plugins,应该是不错的! fluentd是通过hadoop中的webHDFS与HDFS进行通信的,所以在配置fluentd时,一定要保证webHDFS能正常通信,和通过webHDFS写数据到hdfs中! 原理图如下: webHDFS的相关配置与测试,请看这篇文章:http

日志分析方法概述 & Web日志挖掘分析的方法

日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核.各种应用服务器等等.日志的内容.规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志.其实并没有精确的定义,可能包括但不限于各种前端Web服务器--apache.lighttpd.tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志. 在Web日志中,每条日志通常代表着用户的一次访问行为,例如下面就是一条典型的apache日志: 211.87.152.44 – - [