Filebeat 正则表达式 - 数字前的空格

Filebeat regex - whitespace before digits

我的 filebeat.yml 中有以下配置:

- type: log
  close_renamed: true
  paths:
    - /logs/example.log
  multiline:
    pattern: '^[A-Za-z]{3} [A-Za-z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}'
    negate: true
    match: after
    timeout: 3s
  fields_under_root: true
  fields:
    type: oracle
    sourcetype: oracle
  tags: ["oracle"]

Example.log(截断):

...
Thu Oct  1 23:01:00 2020 +00:00
LENGTH : '275'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[9] 'test_user'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1762369616'
SESSIONID:[10] '4294967295'
USERHOST:[21] 'testdevserver'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'

Thu Oct  1 23:01:00 2020 +00:00
LENGTH : '296'
ACTION :[29] 'SELECT STATUS FROM V$INSTANCE'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[9] 'test_user'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1762369616'
SESSIONID:[10] '4294967295'
USERHOST:[21] 'testdevserver'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[1] '3'

我注意到此模式 '^[A-Za-z]{3} [A-Za-z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}' 不适用于上面的示例 Thu Oct 1 23:01:00 2020 +00:00,因为在 Oct 之后和 1 之前有一个空格。 如何删除此空格以便模式相应地匹配?

谢谢! J

如果有多个space而不是单个space,您可以使用+匹配1个或多个

目前无法获得所需的匹配,因为一天以单个数字 1 开头。您可以使用 \d{1,2}

更新日期部分以匹配 1 或 2 个数字
^[A-Za-z]{3} [A-Za-z]{3} +[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}

Regex demo

例如,您可以使时间和年份部分的模式更精确一些。您可以扩展它,使日期和月份完全匹配。

^[A-Za-z]{3} +[A-Za-z]{3} +(?:[1-9]|[12]\d|3[01]) +(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d +(?:19|20)\d{2}\b

Regex demo