繁体   English   中英

使用正则表达式和 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]

无法使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM