Я написал функцию Lambda для отправки журналов Cloudfront в Elasticsearch.Worklow следующим образом:1. Cloudfront отправляет журналы (сжатые в формате .gz
) в S32. Bucket отправляет уведомление, которое перехватывается функцией Lambda.3. Лямбда срабатывает.Распакуйте журналы и отправьте их в Elasticsearch.
Я использую для этого s3-to-logstore в сочетании с winston-parser .
Лямбда действительно запущена, но только одна часть журналов отправляется в Elasticsearch, потому что тайм-аут функции Lambda (я установил тайм-аут на максимум: 5 минут).
Я подозреваю, что распаковка журналов .gz
займет некоторое время, но самое большее 30 KB
, что не так много и не должно занять много времени.
Я был вдохновлен этим примером , и вот моя функция:
var s3ToLogstore = require('s3-to-logstore');
var winston = require('winston');
require('winston-elasticsearch');
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: process.env.ES_HOST,
log: 'trace'
});
var transport = new winston.transports.Elasticsearch({
indexPrefix: process.env.ES_INDEXPREFIX,
client: client
});
var options = {
format: process.env.FORMAT,
transport: transport,
reformatter: function(data){
data.environment = process.env.STAGE;
data.origin = process.env.FORMAT;
return data;
}
};
exports.handler = s3ToLogstore(options);
Журналы Cloudwatch полностью в порядке, и в них нет ошибок.Лямбда просто тайм-аут, и я не могу понять, почему.
Любая помощь будет принята с благодарностью.