Анализ данных сообщений о событиях в журнале cloudwatch с использованием лямбды и python - PullRequest
1 голос
/ 02 апреля 2020

Итак ... У меня есть лямбда, которая использует python boto3 для получения потоков журналов cloudwatch для меня.

 responseRDS = client.get_log_events(
    logGroupName='<target log group>',
    logStreamName='<target stream>',
    limit=10,
    startFromHead=False
    )

Результат, который я получаю, находится в JSON, однако данные, которые я хочу проанализировать, находятся в ключе сообщения ... что не очень красиво. Вот пример:

"message": "# Time: 2020-03-10T05:49:25.597945Z\n# User@Host: domain_XX[domain_XX] @  [11.111.11.111]  Id: 47187\n# Query_time: 36.601863  Lock_time: 0.000237 Rows_sent: 0  Rows_examined: 32256

Все, что мне действительно нужно, это данные Query_time и Rows_examined. Я могу придумать несколько грязных способов сделать это, например, анализировать полезную нагрузку, используя пробел в качестве разделителя ... но на самом деле это не то, что я хочу сделать, если у меня его тоже нет. Я надеюсь, что есть способ сделать это похожим на фильтры Insights, где я могу просто использовать:

@Query_time

Есть предложения?

1 Ответ

0 голосов
/ 02 апреля 2020

Это может быть хорошим вариантом использования регулярных выражений :

import re

resp = {"message": "# Time: 2020-03-10T05:49:25.597945Z\n# User@Host: domain_XX[domain_XX] @  [11.111.11.111]  Id: 47187\n# Query_time: 36.601863  Lock_time: 0.000237 Rows_sent: 0  Rows_examined: 32256"}

m = re.search(r"Query_time: ([\d.]+).*Rows_examined: (\d+)", resp["message"])
query_time = m.group(1) # 36.601863
rows_examined = m.group(2) # 32256
...