如何在logstash输出中添加新的动态值(输入中没有)?

时间:2015-07-13 16:28:06

标签: logstash logstash-configuration

我的输入时间戳格式为Apr20 14:59:41248 Dataxyz。 现在在我的输出中,我需要以下格式的时间戳: **日月工作日小时:分钟:第二年DataXYZ **。我能够从输入中删除时间戳。但我不太清楚如何添加新的时间戳。

我在接收输入时使用grok匹配消息:  match => ["message","%{WORD:word} %{TIME:time} %{GREEDYDATA:content}"]

我尝试使用mutate add_field。但是没有成功添加DAY的值。 add_field => [ "timestamp","%{DAY}"]。我的输出为'Day',而不是DAY的值。有人可以对错过的内容有所了解。

enter image description here

3 个答案:

答案 0 :(得分:0)

您需要将其删除到各个命名字段中,然后您可以在add_field中引用这些字段。

所以你的grok会这样开始:

var db = new Database();
db.database('nodetest1')
.then(function (mydb) {return mydb.query('FOR x IN User RETURN x');})
.then(function (cursor) {return cursor.all();})
.then(
  function (list) {console.log(list);},
  function (err) {console.error('Something went wrong:', err);}
);

然后你可以把它们放回原处:

%{MONTH:month}%{MONTHDAY:mday}

答案 1 :(得分:0)

您可以查看我的回答,我认为这对您非常有帮助。

grok { 
  match => { "message" => "%{TIMESTAMP_ISO8601:time} \[%{NUMBER:thread}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} - %{GREEDYDATA:msg}" } 
}

if "Exception" in [msg] {
 mutate {
  add_field => { "msg_error" => "%{msg}" }
}
}

答案 2 :(得分:0)

您可以使用自定义grok模式来提取/重命名字段。

enter image description here

您可以类似地提取其他字段,并在mutate过滤器中重新排列/播放arounnd。有关详细信息,请参阅Custom Patterns