使用正则表达式和 grok 解析 logstash 日志
logstash log parsing with regex and grok
您好,我有以下日志
12-Apr-2021 16:11:41.078 WARNING [https-jsse-nio2-8443-exec-3] org.apache.catalina.realm.LockOutRealm.filterLockedAccounts An attempt was made to authenticate the locked user [uv19nb]
12-Apr-2021 16:01:01.505 FINE [https-jsse-nio2-8443-exec-8] org.apache.catalina.realm.CombinedRealm.authenticate Failed to authenticate user [uv19nb] with realm [org.apache.catalina.realm.JNDIRealm]
12-Apr-2021 17:12:45.289 FINE [https-jsse-nio2-8443-exec-5] org.apache.catalina.authenticator.FormAuthenticator.doAuthenticate Authentication of 'uv19nb' was successful
我正在尝试为 logstash 构建这些模式。
我有关注
%{MY_DATE_PATTERN:timestamp}\s%{WORD:severity}\s\[%{DATA:thread}\]\s%{NOTSPACE:type_log}
下面解析
{
"timestamp": [
"12-Apr-2021 16:01:01.505"
],
"severity": [
"FINE"
],
"thread": [
"https-jsse-nio2-8443-exec-8"
],
"type_log": [
"org.apache.catalina.realm.CombinedRealm.authenticate"
]
}
我想将日志解析为粗体部分和用户名两部分,请问您有什么建议?
已尝试对锁定的用户进行身份验证 [uv19nb]
无法通过领域 [org.apache.catalina.realm.JNDIRealm]
验证用户 [uv19nb]
'uv19nb'认证成功
我尝试过使用 (?<action>[^\[]*)
和 (?<action>[^']*)
,但它们仅在下一个字符是 [
或 '
时才捕获。
我需要一些 regex/grok 模式来捕捉所有句子,直到我相信任何特殊字符,对于用户名,我需要从 []
和 ''
中提取数字和字母。
如果 MY_DATE_PATTERN
适合您,您可以使用
%{MY_DATE_PATTERN:timestamp}\s+%{WORD:severity}\s+\[%{DATA:thread}\]\s+%{NOTSPACE:type_log}\s+(?<action>\w(?:[\w\s]*\w)?)
我添加了\s+(?<action>\w(?:[\w\s]*\w)?)
:
\s+
- 一个或多个空格
(?<action>\w(?:[\w\s]*\w)?)
- 组“动作”:
\w
- 一个单词 char 后跟
(?:[\w\s]*\w)?
- 零个或多个单词和空白字符的可选出现,然后是强制性单词字符。
您好,我有以下日志
12-Apr-2021 16:11:41.078 WARNING [https-jsse-nio2-8443-exec-3] org.apache.catalina.realm.LockOutRealm.filterLockedAccounts An attempt was made to authenticate the locked user [uv19nb]
12-Apr-2021 16:01:01.505 FINE [https-jsse-nio2-8443-exec-8] org.apache.catalina.realm.CombinedRealm.authenticate Failed to authenticate user [uv19nb] with realm [org.apache.catalina.realm.JNDIRealm]
12-Apr-2021 17:12:45.289 FINE [https-jsse-nio2-8443-exec-5] org.apache.catalina.authenticator.FormAuthenticator.doAuthenticate Authentication of 'uv19nb' was successful
我正在尝试为 logstash 构建这些模式。
我有关注
%{MY_DATE_PATTERN:timestamp}\s%{WORD:severity}\s\[%{DATA:thread}\]\s%{NOTSPACE:type_log}
下面解析
{
"timestamp": [
"12-Apr-2021 16:01:01.505"
],
"severity": [
"FINE"
],
"thread": [
"https-jsse-nio2-8443-exec-8"
],
"type_log": [
"org.apache.catalina.realm.CombinedRealm.authenticate"
]
}
我想将日志解析为粗体部分和用户名两部分,请问您有什么建议?
已尝试对锁定的用户进行身份验证 [uv19nb]
无法通过领域 [org.apache.catalina.realm.JNDIRealm]
验证用户 [uv19nb]'uv19nb'认证成功
我尝试过使用 (?<action>[^\[]*)
和 (?<action>[^']*)
,但它们仅在下一个字符是 [
或 '
时才捕获。
我需要一些 regex/grok 模式来捕捉所有句子,直到我相信任何特殊字符,对于用户名,我需要从 []
和 ''
中提取数字和字母。
如果 MY_DATE_PATTERN
适合您,您可以使用
%{MY_DATE_PATTERN:timestamp}\s+%{WORD:severity}\s+\[%{DATA:thread}\]\s+%{NOTSPACE:type_log}\s+(?<action>\w(?:[\w\s]*\w)?)
我添加了\s+(?<action>\w(?:[\w\s]*\w)?)
:
\s+
- 一个或多个空格(?<action>\w(?:[\w\s]*\w)?)
- 组“动作”:\w
- 一个单词 char 后跟(?:[\w\s]*\w)?
- 零个或多个单词和空白字符的可选出现,然后是强制性单词字符。