如何使Logstash使用自己的日志

Nic*_*las 2 logstash logstash-grok

基本上,我想LogStash消耗自己的日志和填充字段,如@timestamp,level等在Kibana使用.

我当前的配置如下所示:

input {
  file {
    path => "/path/to/logstash/logs/*.log"
    type => "logstash"
  }
}
Run Code Online (Sandbox Code Playgroud)

这似乎很难做到 - 没有回复写Grok过滤器.LogStash是否真的无法使用自己的日志?(很难谷歌,我找不到任何东西.)

或者这首先是错误的做法?

LogStash的日志输出示例:

{
  :timestamp=>"2014-09-02T10:38:08.798000+0200", 
  :message=>"Using milestone 2 input plugin 'file'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.4.2/plugin-milestones",
  :level=>:warn
}
Run Code Online (Sandbox Code Playgroud)

Alc*_*zar 5

您必须使用,grok因为logstash无法rubydebug用作输入编解码器.

日志采用固定格式,因此grok要做到这一点很简单.然后我们date用来替换@timestamp

filter {
  grok {
      match => ["message", '{:timestamp=>"(?<timestamp>.*)", :message=>"(?<msg>.*)", :level=>:(?<level>.*)}']
  }
  mutate {
      replace => ["message", "%{msg}" ]
      remove_field => msg
  }
  date {
      match => [ "timestamp", "ISO8601" ]
      remove_field => 'timestamp'
  }
}
Run Code Online (Sandbox Code Playgroud)

这个mutate步骤是必需的,因为如果你刚刚<message>进入匹配,它将message变成一个数组并将提取的消息添加到它,所以捕获另一个名称,然后替换该消息.