CloudWatch Logs Insights Синтаксический анализ синтаксиса
У меня есть лямбда, которая запрашивает API-интерфейс ec2 и печатает вывод в журналы cloudwatch, которые я хочу использовать для метрик. Тем не менее, у меня возникли проблемы с анализом вывода (генерируется из словаря). Вот типичное сообщение @message:
defaultdict(None, {ec2.Instance(id='i-instance'): {'InstanceID': 'i-instance', 'Type': 't2.micro', 'ImageID': 'ami-0e5493310d2c6de5b', 'State': 'running'
Я пытался |parse 'InstanceID': *' as InstanceId
и аналогичные, но это ошибки, и я не нашел примеров в документации ( https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html).
Помощь приветствуется.
2 ответа
Если вы можете изменить лямбду, вероятно, самое простое решение - это напечатать словарь в виде однострочного JSON (вместо строкового формата словаря Python) - что-то вроде print(json.dumps(myvalue))
должен сделать свое дело. Cloudwatch автоматически поймет поля.
Если вы не можете изменить вывод Lambda, может помочь добавление дополнительных кавычек в запрос Logs Insights: parse @message "'InstanceID': '*'" as InstanceID
,
если вы используете анализ журнала, следующие данные дадут вам идентификатор экземпляра
fields @timestamp, @message, responseElements.instancesSet.items.0.instanceId as instanceId