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}
例如,您可以使时间和年份部分的模式更精确一些。您可以扩展它,使日期和月份完全匹配。
^[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
我的 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}
^[A-Za-z]{3} [A-Za-z]{3} +[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}
例如,您可以使时间和年份部分的模式更精确一些。您可以扩展它,使日期和月份完全匹配。
^[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