#amazon-web-services #amazon-cloudwatchlogs
#amazon-веб-сервисы #amazon-cloudwatchlog
Вопрос:
Я новичок в анализе журналов CloudWatch, и я не могу понять, как агрегировать данные по временному диапазону с помощью 3 столбцов.
Файл журнала, который я хочу проанализировать, имеет формат json :
{'ts': '12:01:00', 'method':'GET', 'url':'aaaa'}
{'ts': '12:02:00', 'method':'GET', 'url':'aaab'}
{'ts': '12:03:00', 'method':'POST', 'url':'aaac'}
{'ts': '12:04:00', 'method':'GET', 'url':'aaad'}
{'ts': '12:05:00', 'method':'POST', 'url':'aaae'}
{'ts': '12:06:00', 'method':'GET', 'url':'aaaf'}
{'ts': '12:07:00', 'method':'POST', 'url':'aaag'}
Как вы можете видеть, каждая строка события представляет собой POST или GET. Каждое событие также имеет временную метку.
Я хочу использовать аналитические данные для визуализации получения и публикации рассылки с течением времени в окне продолжительностью 5 миллионов.
Я не могу найти правильный синтаксис для получения такого результата в мониторе запросов :
# : ts : NbGET : NbPOST
1 : 12:00:00 : 3 : 1
3 : 12:05:00 : 1 : 2
С такими результатами я смог бы нарисовать график с двумя извлеченными показателями ‘GET’ и ‘POST’ .
Есть идеи, как этого добиться?
Ответ №1:
Этого можно достичь с помощью функции «статистика», привязанной к желаемому периоду времени. Для вашего примера это примерно:
STATS count(method = "GET") as NbGET, count(method = "POST") as NbPOST BY BIN(5m)
Комментарии:
1. Я полагаю, что это вернет одинаковое количество для всех методов. Функция count только проверяет, существует ли поле, и не вычисляет условие. «count() (или count(*)) подсчитывает все события, возвращенные запросом, в то время как count(fieldName) подсчитывает все записи, которые включают указанное имя поля». docs.aws.amazon.com/AmazonCloudWatch/latest/logs /…
2. Я полагаю, вы правы — sum (метод = «GET») … тем не менее, должно сработать.
3. Мне было непонятно, пока я не прочитал это в документации , но
BIN()
используется@timestamp
поле.
Ответ №2:
Я сделал нечто подобное со статусом HTTP. Вы могли бы использовать ту же логику для метода.
(... parse your logs and get a field method ...)
| parse method /(?<isGet>GET?)/
| parse method /(?<isPost>POST?)/
| parse method /(?<isPut>PUT?)/
| parse method /(?<isDelete>DELETE?)/
| stats count(isGet) as nbGets, count(isPost) as nbPost, count(isPut) as nbPut, count(isDelete) as nbDelete by bin(5m)