首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适用于日志文件中多个匹配项的regex expr以创建警报

适用于日志文件中多个匹配项的regex expr以创建警报
EN

Stack Overflow用户
提问于 2019-10-25 06:50:03
回答 1查看 80关注 0票数 1

我有一个日志,如果连续出现5个或更多非200http错误代码,我需要能够生成警报。例如,如果我得到两个499代码,两个501,一个404 (在日志中的多个单行上),我需要表达式来查看这些行,确定代码至少弹出了5次,并提供结果。

我现在拥有的匹配表达式似乎找到了非200的值,但我认为由于它的编写方式,如果log.Here中只有499个错误代码,该工具将发出警报: /(bacsvcs/).*?(013-9{1}\d{2}|21-9|2\d1-9|21-9\d) \d{1}/

这是一个示例log...it,如果您将其复制/粘贴到记事本,可能会更容易查看。

代码语言:javascript
复制
10.170.32.12 - - [20/Oct/2019:05:32:57 -0500] "POST /bacsvcs/pridemarkLookupService HTTP/1.1" 200 171096 "-" "-" "35.182.104.198""BACRequestId = New Relic Monitor""APIMGER_Server = 10.170.42.177:8280""RESPOSE_TIME = 0.277" "."

10.170.32.12 -- 21/Oct/2019:05:32:58 -0500 "POST /bacsvcs/historySummaryService HTTP/1.1“200663 "-”“订单检查/美国银行”"171.159.192.10""BACRequestId = GdUbL6dGrkwABHxVApgAAAFD""APIMGER_Server = 10.170.42.178:8280""RESPOSE_TIME = 0.085“".”10.170.32.12 -- 20/Oct/2019:05:32:57 -0500 "POST /bacsvcs/pridemarkLookupService HTTP/1.1“200 171096 "-”"-“"35.182.104.198""BACRequestId =新遗迹监视器”“APIMGER_Server= 10.170.42.177:8280""RESPOSE_TIME = 0.277”".“10.170.32.12 -- 21/Oct/2019:05:32:58 -0500 "POST /bacsvcs/historySummaryService HTTP/1.1”499 663 "-“”订单检查/美国银行“"171.159.192.10”"BACRequestId = GdUbL6dGrkwABHxVApgAAAFD""APIMGER_Server = 10.170.42.178:8280""RESPOSE_TIME = 0.085“".”10.170.32.12 -- 20/Oct/2019:05:32:57 -0500 "POST /bacsvcs/pridemarkLookupService HTTP/1.1“”501 171096 "-“"-”"35.182.104.198""BACRequestId =新遗迹监视器“”APIMGER_Server= 10.170.42.177:8280""RESPOSE_TIME = 0.277“.“10.170.32.12 -- 21/Oct/2019:05:32:58 -0500 "POST /bacsvcs/historySummaryService HTTP/1.1”404663 "-“”订单检查/美国银行“"171.159.192.10""BACRequestId = GdUbL6dGrkwABHxVApgAAAFD""APIMGER_Server = 10.170.42.178:8280""RESPOSE_TIME = 0.085”".“10.170.32.12 -- 20/Oct/2019:05:32:57 -0500 "POST /bacsvcs/pridemarkLookupService HTTP/1.1“499 171096 "-”"-“"35.182.104.198""BACRequestId =新遗迹监视器”“APIMGER_Server= 10.170.42.177:8280""RESPOSE_TIME = 0.277”".“10.170.32.12 -- 21/Oct/2019:05:32:58 -0500 "POST /bacsvcs/historySummaryService HTTP/1.1”“501663 "-”“订单检查/美国银行”"171.159.192。10""BACRequestId = GdUbL6dGrkwABHxVApgAAAFD""APIMGER_Server = 10.170.42.178:8280""RESPOSE_TIME = 0.085“”。“

EN

回答 1

Stack Overflow用户

发布于 2019-10-26 02:08:13

如果要匹配非200代码,可以使用[13-9]\d{2}来匹配除200到299之外的100到999之间的数字

我假设您的日志文件中的空格数量是一致的。如果是这样的话,您可以使用quantifiers多次重复匹配非空格字符,然后重复匹配空格字符,以获得状态代码的一部分并进行匹配。

要匹配5次或更多次,您可以匹配第一部分并重复4次或更多次。

代码语言:javascript
复制
^(?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}([13-9]\d{2} \d).*(?:\r?\n(?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}\1.*){4,}

  • ^开始string
  • (?:\S+\s+){6}重复6次匹配1+非空格字符,然后是1+空格chars
  • ([13-9]\d{2} \d)捕获组1,重复2次匹配1+非空格字符,然后是1+空格捕获组1,匹配除200-299
  • .*以外的数字100-999与除newline
  • (?:非捕获组
    • \r?\n以外的任何字符匹配newline
    • (?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}\1.*匹配与前面相同的模式,并使用line

0+引用在第一个backreference中捕获的相同数字

  • ){4,}关闭组并重复

4次或更多次

查看regex demo

不使用反向引用,您可以使用:

代码语言:javascript
复制
^(?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}[13-9]\d{2} \d.*(?:\r?\n(?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}[13-9]\d{2}.*){4,}

Regex demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58550106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档