[英]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]
无法使用 realm [org.apache.catalina.realm.JNDIRealm] 验证用户[uv19nb]
'uv19nb'认证成功
我曾尝试使用(?<action>[^\[]*)
和(?<action>[^']*)
但它们仅在下一个字符是[
或'
时捕获。
我需要一些正则表达式/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)?
- 零个或多个单词和空格字符的可选出现,然后是一个强制性的单词字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.