подходящий регулярное выражение для нескольких совпадений в лог-файл, чтобы создать предупреждение - PullRequest
1 голос
/ 25 октября 2019

У меня есть журнал, из которого мне нужно иметь возможность генерировать предупреждение, если 5 или более не 200 кодов ошибок http появляются последовательно. Например, если я получаю два кода 499, два 501-го, один 404 один за другим (по нескольким отдельным строкам в журнале), мне нужно выражение, чтобы просмотреть эти строки, определить, что код выдался как минимум 5 раз, и предоставить такой результат. .

Выражение соответствия, которое у меня сейчас есть, похоже, находит что-то, отличное от 200, но я думаю, что из-за того, как оно написано, инструмент предупредит, если в журнале есть только 499 кодов ошибок. ВотВыражение: /(bacsvcs/).*?([013-9]]1[\dndom2 Object|2[1-9][1-9]|2\d[1-9]|2[1-9] \ d) \ d {1} /

Вот пример журнала ... это может быть проще для просмотра, если вы копируете / вставляете в блокнот.

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" 200 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" 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" 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" 404 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" 499 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" 501 663 "-" "Чеки заказов / Банк Америки" "171.159.192.10" "BACRequestId= GdUbL6dGrkwABHxVApgAAAFD "" APIMGER_Server = 10.170.42.178:8280""RESPOSE_TIME = 0.085 "". "

1 Ответ

0 голосов
/ 25 октября 2019

Если вы хотите сопоставить коды, отличные от 200, вы можете использовать [13-9]\d{2} для сопоставления чисел от 100 до 999, кроме 200 до 299

Я предполагаю, что количество пробелов в вашем лог-файле совпадает. Если это так, вы можете использовать квантификаторы , чтобы повторить несколько раз сопоставление непробельных символов, а затем пробельные символы, чтобы получить часть кода состояния и сопоставить его.

Комусовпадение 5 или более раз, вы можете сопоставить первую часть и повторить это 4 или более раз.

^(?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}([13-9]\d{2} \d).*(?:\r?\n(?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}\1.*){4,}
  • ^ Начало строки
  • (?:\S+\s+){6} Повтор 6 разсопоставление 1+ непробельных символов, за которыми следуют 1+ пробельных символов
  • /bacsvcs/ Совпадение буквально
  • (?:\S+\s+){2} Повторите 2 раза сопоставления 1+ непробельных символов, за которыми следуют 1+ пробельных символов
  • ([13-9]\d{2} \d) Группа захвата 1, соответствует номеру 100-999, кроме 200-299
  • .* Совпадение 0+ раз с любым символом, кроме новой строки
  • (?: Группа без захвата
    • \r?\n Сопоставление новой строки
    • (?:\S+\s+){6}/bacsvcs/(?:\S+\s+){2}\1.* Совпадение с тем же шаблоном, что и раньше, и использование обратной ссылки \1 для ссылки на тот же номер, записанный в первой строке
  • ){4,} Закрыть группу и повторить 4 или более разmes

См. regex demo

Без использования обратной ссылки вы можете использовать:

^(?:\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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...