当logstash服务器断开连接时,在nodejs中出现ECONNREFUSED错误

时间:2015-05-22 05:32:00

标签: node.js tcp logstash bunyan

我在nodejs应用程序中使用node-bunyanbunyan-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崩溃问题。

2 个答案:

答案 0 :(得分:3)

我能够找出问题所在。 创建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'
});

答案 1 :(得分:1)

对于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