【发布时间】:2014-06-25 20:18:41
【问题描述】:
我目前正在处理一些内容如下所示的日志:
00:19:59.771 (07120/evtThread ) TRC> Cem< [Core1] CALL_STATE...
00:20:00.199 (05768/BCMApplicationThread) INF>
#S#|Call stats, ongoing calls: 8, handled_calls: 7304
#S#+----------------------------+----------+----------+----------+----------+----------+
#S#|Peer | From| To| MinTime| MaxTime| AvgTime|
#S#+----------------------------+----------+----------+----------+----------+----------+
#S#| CallDispatcher:Core2| 0| 0| 0| 0| 0|
#S#| CallDispatcher:Core3| 0| 0| 0| 0| 0|
#S#| Cem:Core1| 1632| 6207| 0| 5996522| 311685|
我这样解析包含时间的行:
grok {
match => [ "message", "%{TIME:time} (?<bcm_comp>\(\d{5}\/\w{4,}\:*\ *\w*\)) (?<loglevel>\w{3}>{1}) %{GREEDYDATA:message}" ]
overwrite => [ "message" ]
add_field => [ "BCM_System", "PROD" ]
}
前面包含#S# 的行是这样解析的。忽略包含 -------- 的行以及包含表标题和呼叫统计行的行。
grok {
match => [ "message", "(?<start>\#\S\#\|)\s* (?<peer>\w*\:\w*)(?<div2>\|)\s* %{NUMBER:From}(?<div3>\|)\s* %{NUMBER:To}(?<div4>\|)\s* %{NUMBER:MinTime}(?<div5>\|)\s* %{NUMBER:MaxTime}(?<div6>\|)\s* %{NUMBER:AvgTime}(?<div7>\|)" ]
remove_field => [ "start", "div2", "div3", "div4", "div5", "div6", "div7" ]
overwrite => [ "message"]
add_field => [ "reference_time", "%{@time}"]
}
我要做的是从上一行中抽出时间,并将其添加为我摸索#s# 行的字段。如图所示,我尝试使用 logstash 中的 add_field 语法,但它不起作用……它只是从字面上打印出 %{@time}。
有什么方法可以让我从上一行中提取时间并将其放入另一个事件的字段中?
【问题讨论】: