【问题标题】:Logstash configurationLogstash 配置
【发布时间】:2015-05-30 17:50:59
【问题描述】:

我正在尝试使用 Logstash 解析和分析我的日志,并将它们输出到 elasticsearch。 Logstash 将日志文件中的每一行视为一个新的日志条目,但问题是一个日志条目可能位于多行中。我想配置过滤器以提取有用的数据(日期、线程、查询...)。

【问题讨论】:

标签: logging elasticsearch logstash


【解决方案1】:

您需要查看多行过滤器 - http://logstash.net/docs/1.4.1/filters/multiline

我对 MariaDB 日志做了类似的事情,它可以是多行的 - 正则表达式会有所不同,但请查看 http://simonhanmer.co.uk/processing-mysql-mariadb-galera-logs-for-logstash/ 以获得一些想法

好的,提取线程相当简单,因为它由 [] 分隔,但查询有点困难。如果它总是在显示的行之前,你可以使用这样的东西

input { 
    pipe {
      command => 'type C:\Users\MEGDICHE\Downloads\default.log'
     }
}

filter{
    multiline {
        pattern => "^%{MONTH} %{MONTHDAY}"
    negate  => true
    what    => "previous"
    }

    grok {
        match => [ 'message', "(?m)^%{MONTH} %{MONTHDAY}.*\[%{GREEDYDATA:thread}\]:%{GREEDYDATA:rest_of_message}" ]
    }

    if [rest_of_message] =~ /select/ {
        grok {
            match => [ 'message', '(?m).*\nThe query before.*\n%{GREEDYDATA:query}$' ]
        }
    }

    mutate {
        remove_field => [ 'rest_of_message']
    }
}

output { 
  elasticsearch { host => localhost }
  stdout { codec => rubydebug } 
 }

【讨论】:

  • 谢谢 SimonH 请你对这个案例过滤器有什么想法 { multiline { type => "somefiletype" pattern => "\\$"/* 这个我想用 ":"* 替换它/ 什么 => “下一个” }
  • 在上面的示例数据中,您是否希望最后两行被捕获到带有时间戳的最后一行?如果你能给出一个例子来说明你对上面的日志条目的期望,那将会很有用。
  • 是的,因为最后三行是一个日志条目。我想提取线程(例如 default-[DashBoard Thread])和查询(从 epool 中选择 count(*))
  • 好的,我已经修改了我之前给出的答案以包含一些可能的代码
猜你喜欢
  • 1970-01-01
  • 2017-03-20
  • 2020-01-11
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多