Аналитические данные CloudWatch Logs: агрегированные по диапазону времени

#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)