Как отфильтровать журналы CloudWatch из Lambda с помощью JSON Metric Filter

Используя пример прямо из документации, в лямбда-функцию я положил:

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 превращает логи в строку. То, как анализировать смешанный текст и записи журнала JSON в AWS CloudWatch для Log Metric Filter, говорит о многом. Решение не предлагается ни в одном случае. Как вы фильтруете журналы CloudWatch из Lambda с помощью JSON Metric Filter?

1 ответ

Решение

Посмотрите, как на самом деле выглядит строка журнала. Если вы видите что-то вроде этого, это не правильный 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
            }
        )
    ) 
Другие вопросы по тегам