是否可以使用Python Lambda中的JSON Log Format登录CloudWatch?
我想创建一个指标来监控通过我的lambda的数据,而extracting data form JSON Log Events似乎非常合适。
我记录如下:
logger.info(dict(items=len(records), max_latency=max_latency))
日志显示在CloudWatch上:
[INFO] 2017-08-04T16:20:23.579Z some-uuid {'items': 1, 'max_latency': 1219403.5792706013}
但是当我尝试用这个创建一个指标时:
{ $.max_latency = * }
CloudWatch告诉我:
Found 0 matches out of 29 event(s) in the sample log.
答案 0 :(得分:1)
我很确定问题是您在syslog格式的日志消息中提供了一些JSON格式的数据。您可能需要完全使用JSON进行日志记录,将[INFO]标记,时间戳和uuid移动到JSON文档中。
使用基本配置,您可以提供不包含JSON文档之外的数据的格式参数。
答案 1 :(得分:1)
日志条目有2个问题:
'
)使用单引号("
),CloudWatch仅在使用"
时识别它。由于lambda很容易被CPU绑定,而且我的JSON非常简单,所以我选择了这样的东西:
print('{"items": ' + str(len(records)) + ', "max_latency":' + str(max_latency) + '}')
哪个输出:
{"items": 1, "max_latency": 1219403.5792706013}
有效,我可以使用{ $.max_latency = * }
成功过滤,并使用$.max_latency
作为指标值。
答案 2 :(得分:0)
我找到了一种适应aws_lambda_logging
的hacky方法如果你跑
aws_lambda_logging.setup(level='INFO',aws_request_id='not_a_lambda')
在最高级别,之后不要触摸您的日志配置,您的日志将自动显示在json中。我现在试图绕过内脏,给你一个更好的答案。