Я хочу использовать 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', поскольку у него нет всех компонентов, которые ищет регулярное выражение, а это означает, что мне очень не хватает результатов.