fluent-logger-node
fluent-logger-node copied to clipboard
Lambda timeout occurs when using the sender.end() function with setTimeout
Hi, We are using the library for sending logs to Fluentd via Bunyan Logger.
const sender = require('fluent-logger').createFluentSender('tag-prefix', {
enableReconnect: false,
host: 'localhost',
port: 24224,
requireAckResponse: true
});
// bunyan logger instance for sending logs to fluentd.
logger = bunyan.createLogger({
name: 'FluentdLogger',
streams: [{ stream: sender.toStream('fluentd') }]
});
public async end( ms = 2000 ) {
if (this.sender !== null) {
return new Promise((resolve) => {
setTimeout(() => {
this.sender.end();
resolve();
}, ms);
});
}
}
- The logs are being sent to fluentd using the above mentioned approach.
- The
end()function is called at the end of lambda execution to close the socket connections. - However, the
end()function when deployed through a lambda, causes it to timeout due to every callback not being processed in the said invocation. - After looking into the issue further, we found that although the sockets are getting closed, the listener port is still active even after
sender.end()function call. This might be a reason for theaddHandlers()callback to not get processed, and thus causing a timeout. - Unless and until all callbacks are not processed in a particular invocation, the lambda does not exit successfully, thus causing a timeout when I use this library.
- The lambda timeout threshold is set to 180 seconds ~ 3 minutes.
Thus, is there any way to handle the above scenario? I read through issues #91 and #89, but the solutions to those are not working in my case. It would be great if you could help.