Как отфильтровать журналы 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
}
)
)