fluent-logger-node, 用于Fluentd的结构化记录器( node.js )

分享于 

10分钟阅读

GitHub

  繁體 雙語
A structured logger for Fluentd (Node.js)
  • 源代码名称:fluent-logger-node
  • 源代码网址:http://www.github.com/fluent/fluent-logger-node
  • fluent-logger-node源代码文档
  • fluent-logger-node源代码下载
  • Git URL:
    git://www.github.com/fluent/fluent-logger-node.git
    Git Clone代码到本地:
    git clone http://www.github.com/fluent/fluent-logger-node
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/fluent/fluent-logger-node
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Node.js

    node.js的流畅记录器实现,由 fluent-logger-python 激发。

    NPM

    Build Status

    安装

    
    $ npm install fluent-logger
    
    
    
    

    Prerequistes

    Fluent守护进程应该监听TCP端口。

    简单配置如下:

    <source>
     @type forward
     port 24224
    </source>
    <match **.*>
     @type stdout
    </match>

    用法

    将事件记录发送到 Fluentd

    单一样式

    var logger =require('fluent-logger')// The 2nd argument can be omitted. Here is a default value for options.logger.configure('tag_prefix', {
     host:'localhost',
     port:24224,
     timeout:3.0,
     reconnectInterval:600000// 10 minutes});// send an event record with 'tag.label'logger.emit('label', {record:'this is a log'});

    实例样式

    var logger =require('fluent-logger').createFluentSender('tag_prefix', {
     host:'localhost',
     port:24224,
     timeout:3.0,
     reconnectInterval:600000// 10 minutes});

    emit方法具有下列签名

    .emit([label string], <record object>, [timestamp number/date], [callback function])

    只需要 record 参数。 如果标签被设置,它将被附加到已经配置的标签。

    共享密钥身份验证

    记录器配置:

    var logger =require('fluent-logger').createFluentSender('dummy', {
     host:'localhost',
     port:24224,
     timeout:3.0,
     reconnectInterval:600000, // 10 minutes security: {
     clientHostname:"client.localdomain",
     sharedKey:"secure_communication_is_awesome" }
    });logger.emit('debug', { message:'This is a message' });

    服务器配置:

    <source>
     @type forward
     port 24224
     <security>
     self_hostname input.testing.local
     shared_key secure_communication_is_awesome
     </security>
    </source>
    <match dummy.*>
     @type stdout
    </match>

    请参见 Fluentd 示例。

    tls/ssl加密

    记录器配置:

    var logger =require('fluent-logger').createFluentSender('dummy', {
     host:'localhost',
     port:24224,
     timeout:3.0,
     reconnectInterval:600000, // 10 minutes security: {
     clientHostname:"client.localdomain",
     sharedKey:"secure_communication_is_awesome" },
     tls:true,
     tlsOptions: {
     ca:fs.readFileSync('/path/to/ca_cert.pem')
     }
    });logger.emit('debug', { message:'This is a message' });

    服务器配置:

    <source>
     @type forward
     port 24224
     <transport tls>
     ca_cert_path/path/to/ca_cert.pem
     ca_private_key_path/path/to/ca_key.pem
     ca_private_key_passphrase very_secret_passphrase
     </transport>
     <security>
     self_hostname input.testing.local
     shared_key secure_communication_is_awesome
     </security>
    </source>
    <match dummy.*>
     @type stdout
    </match>

    FYI: 你可以使用fluent-ca-generate命令生成证书,因为 Fluentd 1.1.0.

    请参阅如何启用 tls/ssl加密功能。

    EventTime支持

    我们还可以指定 EventTime 作为时间戳。

    var FluentLogger =require('fluent-logger');var EventTime =FluentLogger.EventTime;var logger =FluentLogger.createFluentSender('tag_prefix', {var eventTime =newEventTime(1489547207, 745003500); // 2017-03-15 12:06:47 +0900logger.emit('tag', { message:'This is a message' }, eventTime);

    事件

    var logger =require('fluent-logger').createFluentSender('tag_prefix', {
     host:'localhost',
     port:24224,
     timeout:3.0,
     reconnectInterval:600000// 10 minutes});logger.on('error', (error) => {
     console.log(error);
    });logger.on('connect', () => {
     console.log('connected!');
    });

    日志库支持

    log4js

    使用 log4js-fluent-appender

    在使用支持之前,你应该将它安装在你的应用程序中。

    var winston =require('winston');var config = {
     host:'localhost',
     port:24224,
     timeout:3.0,
     requireAckResponse:true// Add this option to wait response from Fluentd certainly};var fluentTransport =require('fluent-logger').support.winstonTransport();var logger =new (winston.Logger)({
     transports: [newfluentTransport('mytag', config), new (winston.transports.Console)()]
    });logger.on('logging', (transport, level, message, meta) => {
     if (meta.end&&transport.sender&&transport.sender.end) {
     transport.sender.end();
     }
    });logger.log('info', 'this log record is sent to fluent daemon');logger.info('this log record is sent to fluent daemon');logger.info('end of log message', { end:true });

    几个库使用流作为输出。

    'use strict';constConsole=require('console').Console;var sender =require('fluent-logger').createFluentSender('tag_prefix', {
     host:'localhost',
     port:24224,
     timeout:3.0,
     reconnectInterval:600000// 10 minutes});var logger =newConsole(sender.toStream('stdout'), sender.toStream('stderr'));logger.log('this log record is sent to fluent daemon');setTimeout(()=>sender.end(), 5000);

    命令行选项

    tag_prefix

    标记前缀字符串。在直接使用 FluentSender 时,可以指定 null。 在本例中,你必须在调用 emit 时指定 label

    主机

    主机名。默认值='localhost'。

    请参见 socket.connect

    要侦听的端口。 默认值= 24224.

    请参见 socket.connect

    路径

    你的Unix域套接字的路径。 如果你设置了 path,那么fluent记录器将忽略 hostport

    请参见 socket.connect

    超时

    在套接字上不活动的timeout 毫秒之后设置套接字到 timetout。

    请参见 socket.setTimeout

    reconnectInterval

    以毫秒为单位设置重新连接间隔。 如果发生错误,则在这里间隔后重新连接。

    requireAckResponse

    将协议更改为 at-least-once。 记录器从目的地等待 ack。

    ackResponseTimeout

    当requireAckResponse为 true 时使用这里选项。 默认值为 190.这里默认值基于受欢迎的tcp_syn_retries

    eventMode

    设置事件模式。 这里记录器支持 MessagePackedForwardCompressedPackedForward。 默认值为 Message

    注意:我们将更改默认为 PackedForward,并在下一次主要版本中删除 Message

    flushInterval

    以毫秒为单位设置刷新间隔。 这里选项在消息模式中无效。 记录器将发出的事件存储在缓冲区中,并为每个间隔刷新事件。 默认 100

    security.clientHostname

    设置这里记录器的主机名。 将这里值用于基于主机名的身份验证。

    security.sharedKey

    客户端和服务器之间的共享密钥。

    security.username

    为基于用户的身份验证设置用户名。 默认值为空字符串。

    security.password

    为基于用户的身份验证设置密码。 默认值为空字符串。

    为套接字启用 TLS。

    tlsOptions

    当tls为 true 时传递给 tls.connect的选项。

    有关详细信息,请参阅下列文档

    internalLogger

    为FluentLogger设置内部记录器对象。 默认情况下使用 console。这里记录器需要 infoerror 方法。

    许可证

    Apache许可,版本 2.0.

    关于NodeJS版本

    这里软件包与NodeJS版本> 4兼容。