当 logstash 服务器断开连接时在 nodejs 中出现 ECONNREFUSED 错误
Getting ECONNREFUSED error in nodejs when logstash server disconnects
我在我的 nodejs 应用程序中使用 node-bunyan and bunyan-logstash-tcp 将日志发送到 logstash (1.4.2) 和 elasticsearch (1.4.2)。
只要 logstash 服务器断开连接或无法访问,我的 nodejs 应用程序就会崩溃并显示以下错误
ERROR
-------
events.js:72
throw er; // Unhandled 'error' event
^
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
bunyan-logstash-tcp 实际上应该处理这个错误。
谁能帮我解决这个 nodejs 崩溃问题。
我能够弄清楚这个问题。
创建tcp bunyan流时需要处理错误事件
stream: bunyantcp.createStream({
host: '127.0.0.1',
port: 9998
}).on('error', console.log)
这在 bunyan-logstash-tcp 文档中没有提到,但在示例代码中有。
更新:示例配置
this.log = bunyan.createLogger({
name: name,
streams: [
{
level: 'error',
type: 'raw',
serializers: bunyan.stdSerializers,
stream: bunyantcp.createStream({
application: process.title,
max_connect_retries: 10, // Don't give up on reconnecting
retry_interval: 1000 * 60 // Wait 1s between reconnect attempts
}).on('error', console.log)
}
],
level: 'debug'
});
对于 logstash,您可能可以从 TCP 切换到 UDP。
有几个重要的优点:
- 没有连接问题(没有重新连接问题等)
- 更少的性能开销
- 更少的网络开销
Logentries 有一篇关于它的精彩博文:https://blog.logentries.com/2014/07/tcp-or-udp-for-logging/
查看一些支持 UDP 的 logstash(elk 堆栈)开箱即用的库:https://github.com/devmetrics/devmetrics-nodejs-core
我在我的 nodejs 应用程序中使用 node-bunyan and bunyan-logstash-tcp 将日志发送到 logstash (1.4.2) 和 elasticsearch (1.4.2)。
只要 logstash 服务器断开连接或无法访问,我的 nodejs 应用程序就会崩溃并显示以下错误
ERROR
-------
events.js:72
throw er; // Unhandled 'error' event
^
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
bunyan-logstash-tcp 实际上应该处理这个错误。 谁能帮我解决这个 nodejs 崩溃问题。
我能够弄清楚这个问题。 创建tcp bunyan流时需要处理错误事件
stream: bunyantcp.createStream({
host: '127.0.0.1',
port: 9998
}).on('error', console.log)
这在 bunyan-logstash-tcp 文档中没有提到,但在示例代码中有。
更新:示例配置
this.log = bunyan.createLogger({
name: name,
streams: [
{
level: 'error',
type: 'raw',
serializers: bunyan.stdSerializers,
stream: bunyantcp.createStream({
application: process.title,
max_connect_retries: 10, // Don't give up on reconnecting
retry_interval: 1000 * 60 // Wait 1s between reconnect attempts
}).on('error', console.log)
}
],
level: 'debug'
});
对于 logstash,您可能可以从 TCP 切换到 UDP。 有几个重要的优点:
- 没有连接问题(没有重新连接问题等)
- 更少的性能开销
- 更少的网络开销
Logentries 有一篇关于它的精彩博文:https://blog.logentries.com/2014/07/tcp-or-udp-for-logging/
查看一些支持 UDP 的 logstash(elk 堆栈)开箱即用的库:https://github.com/devmetrics/devmetrics-nodejs-core