Как войти в систему JSON в Cloudwatch от AWS Lambda в node.js? - PullRequest
1 голос
/ 29 апреля 2020

У меня есть несколько лямбд на основе node.js, которые регистрируют данные.

Я приказываю правильно запрашивать и фильтровать данные и т. Д. c, я хочу регистрировать как чистые JSON данные из моих лямбд.

Однако, когда я делаю обычный console.log, он создает обычную строку данных.

console.log({a:1,b:2,x:"xxx"})

В результате получается:

2020-04-29T14:46:45.722Z    3f64c499-fbae-4a84-996c-5e5f0cb5302c    INFO    { a: 1, b: 2, x: 'xxx' }

Записанная строка выше, кажется, не для поиска как JSON с использованием различных параметров соответствия фильтров в CloudWatch.

Я пытался вызвать API AWS.CloudWatchLogs напрямую, но так как я использую лямбду, я не могу поддерживать токен между вызовами функций, так что я не уверен, что это путь к go.

Кто-нибудь еще имел успех в журналировании raw JSON с Javascript Lambda?

1 Ответ

1 голос
/ 29 апреля 2020

Проблема в том, что console.log() не go напрямую к stdout / stderr. Вы можете видеть, что используя эту лямбду:

const process = require('process');

exports.handler = async (event) => {
    console.log("message 1");
    process.stdout.write("message 2\n");
};

Если вы вызовете это, вы увидите вывод, подобный этому:

START RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283 Version: $LATEST
2020-04-29T17:06:07.303Z    6935bebc-1d97-42cd-90c2-d76b4a637683    INFO    message 1
message 2
END RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283

Таким образом, чтобы получить желаемый результат, вы можете либо переопределить * От 1008 * до go в stderr или напрямую в stdout / stderr.

Или вы можете использовать каркас журналирования, который пишет в stdout / stderr, что может дать вам больше гибкости при написании ваших сообщений. Я не занимаюсь разработкой Node, но я слышал, что Winston - это стандартная структура ведения журналов.

...