Logstash。按位置编号获取字段

Logstash。按位置编号获取字段,logstash,logstash-configuration,Logstash,Logstash Configuration,背景 我有一个方案:我的应用程序中的日志通过rsyslog进入中央日志服务器,然后进入Logstash和Elasticsearch。 来自应用程序的日志是纯JSON,但rsyslog在日志中添加了“时间戳”、“应用程序名称”和“服务器名称”文件。日志变成这样: timestamp app-name server-name [JSON] 问题 如何使用Logstash筛选器删除前三个字段? 我可以通过位置编号(如awk)获取字段,并执行以下操作: filter { somefilter_na

背景

我有一个方案:我的应用程序中的日志通过rsyslog进入中央日志服务器,然后进入Logstash和Elasticsearch。 来自应用程序的日志是纯JSON,但rsyslog在日志中添加了“时间戳”、“应用程序名称”和“服务器名称”文件。日志变成这样:

timestamp app-name server-name [JSON]
问题

如何使用Logstash筛选器删除前三个字段? 我可以通过位置编号(如awk)获取字段,并执行以下操作:

filter {
  somefilter_name {
      remove_field => $1, $2, $3 
  }
}
或者我的想法完全错了,我必须用另一种方式去做

谢谢大家!

使用grok{}匹配它们(它们本身可能很有用!),并将事件的其余部分放回[message]字段:

给定输入,如:

2015-06-16 13:37:30 myApp myServer { "jsonField": "jsonValue" }
这个配置:

grok {
     pattern => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:app} %{WORD:server} %{GREEDYDATA:message}"
     overwrite => [ "message" ]
}

json {
    source => "message"
}
将产生本文件:

{
   "message" => "{ \"jsonField\": \"jsonValue\" }",
   "@version" => "1",
   "@timestamp" => "2015-06-16T20:38:55.658Z",
   "host" => "0.0.0.0",
   "timestamp" => "2015-06-16 13:37:30",
   "app" => "myApp",
   "server" => "myServer",
   "jsonField" => "jsonValue"
}

非常感谢。但是我在日志中得到了错误:{:timestamp=>“2015-06-17T16:37:26.258000+0300”,“message=>“解析json时遇到问题”,“source=>“message”,“raw=>“2015-06-17T16:37:23+03:00 myServer myApp{这里是json},:exception=>,:level=>:warn}我的json有问题吗?我用另一种方法解决了问题。只需在rsyslog conf中更改消息格式。是的,”“解析json时遇到问题”表明json有问题。很高兴您修复了它。