首页 文章

如何从LogStash事件中删除日期

提问于
浏览
-1

我的日志文件中有以下消息...

2015-05-08 12:00:00,648064070: INFO  : [pool-4-thread-1] com.jobs.AutomatedJob: Found 0 suggested order events

这是我在Logstash / Kibana中看到的(选择了日期和消息)...

May 8th 2015, 12:16:19.691  2015-05-08 12:00:00,648064070: INFO : [pool-4-thread-1] com.pcmsgroup.v21.star2.application.maintenance.jobs.AutomatedSuggestedOrderingScheduledJob: Found 0 suggested order events

Kibana左边的日期是插入日期 . (2015年5月8日,12:16:19.691)

下一个日期来自日志声明(2015-05-08 12:00:00,648064070)

接下来是INFO级别的日志记录 .

最后是消息 .

我想将这些组件拆分为组件,以便日志记录级别是kibana中自己的FIELD,并删除消息部分中的日期或使其成为实际日期(而不是插入日期) .

有人可以帮帮我吗 . 我认为我需要一个grok过滤器?

这就是我到目前为止......

input
{
    file {
        debug => true
        path => "C:/office-log*"
        sincedb_path => "c:/tools/logstash-1.4.2/.sincedb"
        sincedb_write_interval => 1
        start_position => "beginning"
        tags =>  ["product_qa"]
        type => "log4j"
    }
}
filter {
  grok {
    match => [ "message", "%{TIMESTAMP_ISO8601}: %{LOGLEVEL}" ]
  }
}

output {
  elasticsearch {          
    protocol => "http"
    host => "0.0.0.x"
  }
}

这个grok过滤器似乎没有改变Kibana中显示的事件 . 我仍然只看到主机/路径/类型等 .

我一直在使用http://grokdebug.herokuapp.com/来计算我的grok语法

1 回答

  • 4

    您需要命名从grok返回的结果,然后使用日期过滤器设置 @timestamp ,以便使用记录的时间而不是插入时间 .

    根据你到目前为止,你会这样做:

    filter {
      grok {
        match => [ "message", "%{TIMESTAMP_ISO8601:logdate}: %{LOGLEVEL:loglevel} (?<logmessage>.*)" ]
      }
      date {
        match => [ "logdate", "ISO8601" ]
      }
      #logdate is now parsed into timestamp, remove original log message too
      mutate {
        remove_field => ['message', 'logdate' ]
      }
    }
    

相关问题