如何从LAMBDA过滤CloudWatch的日志用JSON度量滤波器
问题描述:
从documentation使用例如直线,在lambda函数,我把:如何从LAMBDA过滤CloudWatch的日志用JSON度量滤波器
console.log(
{
"eventType": "UpdateTrail",
"sourceIPAddress": "111.111.111.111",
"arrayKey": [
"value",
"another value"
],
"objectList": [
{
"name": "a",
"id": 1
},
{
"name": "b",
"id": 2
}
],
"SomeObject": null,
"ThisFlag": true
})
我然后创建CloudWatch的一个日志度量滤波器与过滤模式为在文档例如规定:
{ $.eventType = "UpdateTrail" }
过滤器不产生这样的文档度量说它应该 - 这里是输出:
2017-10-23T13:27:19.320Z 1143e2b0-eea6-4225-88c0-efcd79055f7b { eventType: 'UpdateTrail',
sourceIPAddress: '111.111.111.111',
arrayKey: [ 'value', 'another value' ],
objectList: [ { name: 'a', id: 1 }, { name: 'b', id: 2 } ],
SomeObject: null,
ThisFlag: true }
因此,您可以看到时间戳和标识符被预置为JSON。
Amazon Cloudwatch log filtering - JSON syntax中的答案表示这是因为Lambda将日志转换为字符串。 How to parse mixed text and JSON log entries in AWS CloudWatch for Log Metric Filter也差不多。两种情况都不提供解决方案。如何使用JSON度量标准过滤器从Lambda过滤CloudWatch日志?
答
看看日志行实际是什么样子。如果你看到这样的事情,它不是一个有效的JSON:
{ eventType: 'UpdateTrail', ... }
你需要的是这样的(注意引号):
{ "eventType": "UpdateTrail", ...}
要得到的是,尽量包住你的对象JSON.stringify()
,像这样:
console.log(
JSON.stringify(
{
"eventType": "UpdateTrail",
"sourceIPAddress": "111.111.111.111",
"arrayKey": [
"value",
"another value"
],
"objectList": [
{
"name": "a",
"id": 1
},
{
"name": "b",
"id": 2
}
],
"SomeObject": null,
"ThisFlag": true
}
)
)
就是这样。我已将无效的JSON日志输出添加到问题描述中。我没有发现它是无效的,需要进行串接。应该早点尝试。谢谢。 – Dana
https://stackoverflow.com/questions/33903735/amazon-cloudwatch-log-filtering-json-syntax确实有没有stringify有效的JSON - 任何想法为什么区别?显然,过滤器并没有产生一个事件。 – Dana
这个问题差不多2年,可能是CloudWatch Logs或Lambda在此期间发生了变化。 – Tartaglia