CloudWatch Insights - группируйте журналы по URL с удаленными уникальными идентификаторами.

Я хочу использовать CloudWatch Logs Insights для группировки журналов по полю URL-адреса запроса, однако URL-адрес может содержать 0–2 уникальных числовых идентификатора, которые я хотел бы игнорировать при группировке.

Некоторые примеры URL-адресов:

/dev/user
/dev/user/123
/dev/user/123/inventory/4
/dev/server/3/statistics

Группы будут выглядеть примерно так:

/dev/user
/dev/user/
/dev/user//inventory/
/dev/server//statistics

У меня есть что-то очень близкое к тому, что мне нужно, которое извлекает раздел URL-адреса перед первым необязательным идентификатором и раздел между первым идентификатором и вторым идентификатором и объединяет их, но это не совсем надежно. Вот где я сейчас нахожусь, @message является допустимым json, который содержит поле 'endpoint', которое выглядит как один из URL-адресов выше:

fields @message | parse endpoint /(\bdev)\/(?<@prefix>[^0-9]+)(?:[0-9]+)(?<@suffix>[^0-9]+)/ | stats count(*) by @prefix

Хотя этот запрос будет работать с конечными точками, такими как '/ dev / accounts / 1', он игнорирует конечные точки, такие как '/ dev / accounts', поскольку у него нет всех компонентов, которые ищет регулярное выражение, а это означает, что мне очень не хватает результатов.


person Cral    schedule 28.07.2020    source источник


Ответы (2)


Если есть числовые идентификаторы 0–2, которые вы хотите удалить, вы можете сопоставить первый и, при желании, сопоставить второй номер и использовать 2 группы захвата для захвата того, что вы хотите сохранить.

В качестве замены используйте 2 группы захвата $1$2

^(.*?\/)\d+(?:(.*?\/)\d+\b)?

Демонстрация Regex

person The fourth bird    schedule 28.07.2020
comment
Спасибо, там есть пара хитрых уловок, о которых я не знал. Я добавил свой ответ ниже, все, что мне было нужно, это знак '?' перед дополнительными группами захвата. - person Cral; 29.07.2020

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

Демонстрация Regex

person Cral    schedule 29.07.2020