我编写了一个Lambda函数,将Cloudfront日志发送到Elasticsearch中。
工作如下:
.gz格式)发送到S3Lambda确实被触发,但是只有一个部分的日志被发送到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);云监视日志完全没有问题,而且没有错误。兰博达只是超时了,我不知道为什么。
任何帮助都将不胜感激。
发布于 2018-06-12 09:13:47
很可能elasticsearch客户端保持连接处于打开状态,因此lambda永远不会停止。尝试将keepAlive属性设置为false。
var client = new elasticsearch.Client({
host: process.env.ES_HOST,
log: 'trace',
keepAlive: false
});请参阅keepAlive和相关属性。https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html
https://stackoverflow.com/questions/50800062
复制相似问题