使用 grok 在示例日志中创建字段

Using grok to create fields in sample log

FMT="1358  15:41:07W19/03/21 (A) Interlocking Link 116 Restored" STY="A" AMSEQ="LINKFAIL" AMSST="RTN" ALTID="1358" TS="20210319154107" CP="LOC A" CP="LOC X" MP="104.95" MP="104.95" EQ="MDIPRIMARYOFF" POS="TC-NORTH"

日志格式如上。我想使用 grok

捕获以下字段
Time - 15:41:07
Date - 19/03/21
Message - Interlocking Link 116 Restored
Location - Loc X

有人帮助我创建 grok 模式,我可以在我的 logstash 过滤器上使用它来解析我的日志吗?

我一开始不会使用 grok。这是 key/value 数据,所以一个 kv 过滤器会让你开始,然后你可以把 FMT 字段的部分弄出来。

    kv { include_keys => [ "FMT", "CP" ] target => "[@metadata]" }
    mutate { add_field => { "Location" => "%{[@metadata][CP][1]}" } }
    grok { match => { "[@metadata][FMT]" => "%{NUMBER} %{TIME:Time}W%{DATE_EU:Date} \(%{WORD}\) %{GREEDYDATA:Message}" } }

将导致

   "Message" => "Interlocking Link 116 Restored",
      "Date" => "19/03/21",
      "Time" => "15:41:07",
  "Location" => "LOC X",

尽管拥有多个 CP 字段感觉很脆弱。

kv 过滤器上的 include_keys 选项告诉过滤器忽略其他键。使用 target 将字段放在 [@metadata] 下意味着它们可用于其他过滤器但不会发送到输出。 kv 过滤器上的 remove_field 选项仅在过滤器能够解析消息时才处理,因此如果您的 kv 数据无效,您将在事件上有一个 [message] 字段,您可以查看。