Node.js Winston 3.x对logstash的支持缺失?

Node.js Winston 3.x对logstash的支持缺失?,node.js,logging,logstash,winston,elk,Node.js,Logging,Logstash,Winston,Elk,我正在尝试将一个虚拟nodejs应用程序集成到一个ELK堆栈中。我使用winston作为日志库,因为它是我在JS堆栈上开发时的首选。我试着用winston 3.x版本编写这段sinppet代码 var winston = require('winston'); require('winston-logstash'); var logger = winston.createLogger({ level: 'info', transports: [ new wi

我正在尝试将一个虚拟nodejs应用程序集成到一个ELK堆栈中。我使用winston作为日志库,因为它是我在JS堆栈上开发时的首选。我试着用winston 3.x版本编写这段sinppet代码

var winston = require('winston');
require('winston-logstash');


var logger =  winston.createLogger({
    level: 'info',
    transports: [
        new winston.transports.Console(),
        new winston.transports.Logstash({
            port: 5000,
            node_name: 'my node name',
            host: '127.0.0.1'
        })
    ]
});

logger.info('ciao mondo')
结果是

> node index.js

logstash is a legacy winston transport. Consider upgrading: 
- Upgrade docs: https://github.com/winstonjs/winston/blob/master/UPGRADE-3.0.md
所以我已经阅读了官方的说明,说明logstash支持现在是一种格式

var winston = require('winston');
require('winston-logstash');


var logger =  winston.createLogger({
    level: 'info',
    format : winston.format.logstash(),
    transports: [
         new winston.transports.Console()/*,
         new winston.transports.Logstash({
           port: 5000,
           node_name: 'my node name',
           host: '127.0.0.1'
         })*/
      ]
  });

  logger.info('ciao mondo')
现在输出是

> node index.js

{"@message":"ciao mondo","@fields":{"level":"info"}}
这没问题,但因为我没有告诉如何连接logstash套接字,所以集中式日志系统没有收到此事件


我已经尝试过将winston降级到2.4.1版本,但效果很好,原谅我丢失了laters版本中引入的一些好功能。我还没有找到任何关于3.x版本上logstash支持的文档。我是遗漏了什么,还是我必须写一些定制的东西?

在《温斯顿3》中,有两个概念在起作用

格式只是对正在记录的对象进行一些转换

传输是一种“管道”,它定义了将日志对象发送到某处的方式

在温斯顿2号世界里,这两个概念经常结合在一起;例如,
winstonlogstash
模块是一个传输,但也以logstash可以接受的方式隐式格式化对象。Winston2或Winston3中没有任何东西限制传输或格式方面的可能性,因此Winston3并没有“缺少对Logstash的支持”

然而,Winston3确实对TransportAPI做了一些更改(如前所述,还分离了格式,尽管TransportAPI仍然可以进行格式设置)。这就是为什么您会看到关于
winston logstash
是传统传输的警告:
winston logstash
的作者没有更新他们的模块以使用新的winston 3样式的接口。有一个关于Winston项目的报告,其中提供了一些关于更新传输的有用信息

因此,你可以给作者安装bug来升级他们的传输,自己升级/包装它(参见链接线程),或者-我认为
legacy
警告只是一个警告,所以它在Winston 3上仍然可以正常工作


事实上,我认为已经有了一个让
winstonlogstash
3.x兼容的开放平台,尽管回购协议的维护者似乎已经装模作样了;我想你可以试试公共关系分支/分支。您也可以尝试实现相同的目标,但似乎是为3.x设计的。请随意评论最有效的方法。

在《温斯顿3》中,有两个概念在起作用

格式只是对正在记录的对象进行一些转换

传输是一种“管道”,它定义了将日志对象发送到某处的方式

在温斯顿2号世界里,这两个概念经常结合在一起;例如,
winstonlogstash
模块是一个传输,但也以logstash可以接受的方式隐式格式化对象。Winston2或Winston3中没有任何东西限制传输或格式方面的可能性,因此Winston3并没有“缺少对Logstash的支持”

然而,Winston3确实对TransportAPI做了一些更改(如前所述,还分离了格式,尽管TransportAPI仍然可以进行格式设置)。这就是为什么您会看到关于
winston logstash
是传统传输的警告:
winston logstash
的作者没有更新他们的模块以使用新的winston 3样式的接口。有一个关于Winston项目的报告,其中提供了一些关于更新传输的有用信息

因此,你可以给作者安装bug来升级他们的传输,自己升级/包装它(参见链接线程),或者-我认为
legacy
警告只是一个警告,所以它在Winston 3上仍然可以正常工作

事实上,我认为已经有了一个让
winstonlogstash
3.x兼容的开放平台,尽管回购协议的维护者似乎已经装模作样了;我想你可以试试公共关系分支/分支。您也可以尝试实现相同的目标,但似乎是为3.x设计的。请随意评论最有效的方法。

您可以按照本指南了解如何将winston与winston elasticsearch插件一起使用。这将生成logstash格式的日志,因此Kibana可以使用这些日志

winston elasticsearch
info 特征
  • 日志存储兼容的消息结构
  • 因此,可以使用kibana
  • 基于日期模式的索引名
  • 自定义转换函数以 将记录的数据转换为不同的消息结构
  • 缓冲 在ES不可用的情况下发送消息。内存有限 因为所有未写的信息都保存在内存中
  • 兼容性 对于
    Winston 3.x
    、Elasticsearch
    6.0及更高版本
    ,请使用
    0.7.0
    。对于Elasticsearch
    6.0及更高版本
    ,请使用
    0.6.0
    。对于Elasticsearch
    5.0
    及更高版本,请使用
    0.5.9
    。对于早期版本,请使用
    0.4.x系列

    您可以按照本指南了解如何将winston与
    winston elasticsearch
    插件一起使用。这将生成logstash格式的日志,因此Kibana可以使用这些日志

    winston elasticsearch
    info 特征
  • 日志存储兼容的消息结构
  • 因此,可以使用kibana
  • 基于日期模式的索引名
  • 自定义转换函数以 将记录的数据转换为不同的消息结构
  • 缓冲 在ES不可用的情况下发送消息。内存有限 因为所有未写的信息都保存在内存中
  • 兼容性 对于
    Winston 3.x
    、Elasticsearch
    6.0及更高版本
    ,请使用
    0.7.0
    。对于Elasticsearch
    6.0及更高版本
    ,请使用
    0.6.0
    。对于Elasticsearch
    5.0
    及更高版本,请使用
    0.5.9
    。对于早期版本,请使用