Winston 3.x 缺少对 logstash 的支持?
Winston 3.x support for logstash missing?
我正在尝试将虚拟 nodejs 应用程序集成到 ELK 堆栈。我使用 winston 作为日志库,因为它是我在 JS 堆栈上开发时的首选。我尝试使用 winston 3.x version
编写这段代码
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,它工作正常,除了我正在失去一些在更高版本中引入的好功能这一事实。我没有找到任何说明 3.x 版本支持 logstash 的文档。我是不是遗漏了什么或者我必须写一些自定义的东西?
这里有两个概念,在 Winston 3 中。
A format 只是对您正在记录的对象进行一些转换。
A transport 是一个 "pipe",它定义了一种获取日志对象并将其发送到某处的方法。
在Winston 2的世界里,这两个概念经常被结合起来;例如,winston-logstash
模块是一种传输方式,但也以 Logstash 可接受的方式隐式格式化对象。 Winston 2 或 3 中没有任何内容限制传输或格式方面的可能性,因此 Winston 3 不是 "missing support" for Logstash。
但是,Winston 3 确实 对传输进行了一些更改 API(并且还分离了格式,如前所述 - 尽管传输 可以 仍然进行格式化)。这就是为什么您会看到有关 winston-logstash
是传统传输的警告:winston-logstash
的作者尚未更新他们的模块以使用新的 Winston 3 样式接口。 Winston 项目上有一个 thread,其中包含一些有用的信息,可帮助传输作者更新他们的传输。
因此,您可以窃听作者升级他们的传输,upgrade/wrap 自己升级(参见链接线程),或者 - 我认为 legacy
警告只是一个警告,所以它仍然应该可以与 Winston 3 一起使用。
事实上,我认为已经有一个 PR open to make winston-logstash
3.x compatible, though the repo maintainer seems to have ghosted; I suppose you could try using the PR branch/fork. You might also try winston-logstash-transport 似乎实现了相同的目标,但似乎是为 3.x 设计的。请随意评论什么最有效。
您可以按照本指南 here 了解如何将 winston 与 winston-elasticsearch
插件一起使用。这会生成 logstash 格式的日志,因此可由 Kibana 使用。
winston-elasticsearch
信息
特点
- logstash 兼容消息结构。
- 因此可与 kibana 一起使用。
- 基于日期模式的索引名称。
- 自定义转换器函数
将记录的数据转换为不同的消息结构。
- 缓冲
在 ES 不可用的情况下的消息。极限是内存
因为所有未写的消息都保存在内存中。
兼容性
对于 Winston 3.x
,Elasticsearch 6.0 and later
,使用 0.7.0
。对于 Elasticsearch 6.0 and later
,使用 0.6.0
。对于 Elasticsearch 5.0
及更高版本,请使用 0.5.9
。对于早期版本,请使用 0.4.x series
.
我正在尝试将虚拟 nodejs 应用程序集成到 ELK 堆栈。我使用 winston 作为日志库,因为它是我在 JS 堆栈上开发时的首选。我尝试使用 winston 3.x version
编写这段代码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,它工作正常,除了我正在失去一些在更高版本中引入的好功能这一事实。我没有找到任何说明 3.x 版本支持 logstash 的文档。我是不是遗漏了什么或者我必须写一些自定义的东西?
这里有两个概念,在 Winston 3 中。
A format 只是对您正在记录的对象进行一些转换。
A transport 是一个 "pipe",它定义了一种获取日志对象并将其发送到某处的方法。
在Winston 2的世界里,这两个概念经常被结合起来;例如,winston-logstash
模块是一种传输方式,但也以 Logstash 可接受的方式隐式格式化对象。 Winston 2 或 3 中没有任何内容限制传输或格式方面的可能性,因此 Winston 3 不是 "missing support" for Logstash。
但是,Winston 3 确实 对传输进行了一些更改 API(并且还分离了格式,如前所述 - 尽管传输 可以 仍然进行格式化)。这就是为什么您会看到有关 winston-logstash
是传统传输的警告:winston-logstash
的作者尚未更新他们的模块以使用新的 Winston 3 样式接口。 Winston 项目上有一个 thread,其中包含一些有用的信息,可帮助传输作者更新他们的传输。
因此,您可以窃听作者升级他们的传输,upgrade/wrap 自己升级(参见链接线程),或者 - 我认为 legacy
警告只是一个警告,所以它仍然应该可以与 Winston 3 一起使用。
事实上,我认为已经有一个 PR open to make winston-logstash
3.x compatible, though the repo maintainer seems to have ghosted; I suppose you could try using the PR branch/fork. You might also try winston-logstash-transport 似乎实现了相同的目标,但似乎是为 3.x 设计的。请随意评论什么最有效。
您可以按照本指南 here 了解如何将 winston 与 winston-elasticsearch
插件一起使用。这会生成 logstash 格式的日志,因此可由 Kibana 使用。
winston-elasticsearch
信息
特点
- logstash 兼容消息结构。
- 因此可与 kibana 一起使用。
- 基于日期模式的索引名称。
- 自定义转换器函数 将记录的数据转换为不同的消息结构。
- 缓冲 在 ES 不可用的情况下的消息。极限是内存 因为所有未写的消息都保存在内存中。
兼容性
对于 Winston 3.x
,Elasticsearch 6.0 and later
,使用 0.7.0
。对于 Elasticsearch 6.0 and later
,使用 0.6.0
。对于 Elasticsearch 5.0
及更高版本,请使用 0.5.9
。对于早期版本,请使用 0.4.x series
.