4

直接使用文档中的示例,在我输入的 lambda 函数中:

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 日志过滤中的答案- JSON 语法表示这是因为 Lambda 将日志转换为字符串。如何在 AWS CloudWatch for Log Metric Filter 中解析混合文本和 JSON 日志条目的方法大致相同。在这两种情况下都没有提供解决方案。如何使用 JSON 指标筛选器筛选来自 Lambda 的 CloudWatch 日志?

4

1 回答 1

4

查看日志行的实际外观。如果你看到这样的东西,它不是一个有效的 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
            }
        )
    ) 
于 2017-10-22T19:36:10.447 回答