動かざることバグの如し

近づきたいよ 君の理想に

NodejsでFluentdにデータを送信する

答え

公式クライアントの「fluent-logger」を使う。

fluent/fluent-logger-node: A structured logger for Fluentd (Node.js)

やり方

デバッグしやすいように以下のfluendの設定をしたサーバーを用意する。

<source>
  @type forward
  port 24224
</source>

<match *.*>
  @type stdout
</match>

受け取ったデータを全部標準出力に出力するだけのかんたんな設定

そしてnodejsを用意

yarn add fluent-logger

で以下

const logger = require('fluent-logger')
logger.configure('mylog', {
  host: '127.0.0.1',
  port: 24224,
  timeout: 3.0,
  enableReconnect: true,
  reconnectInterval: 600000 // 10 minutes
})

logger.emit('info', {from: 'userA', to: 'userB'})
setTimeout(()=> logger.end(), 1000);

すると以下のように表示されるはず

fluentd_1  | 2020-07-30 02:37:09.000000000 +0900 mylog.info: {"from":"userA","to":"userB"}
  • ここではmylogがタグのprefixでinfoはsuffixなのでmylog.infoになる

注意点

明示的に logger.end() をしないと終了されないのが注意。

ただ、普通に書いてしまうと送信前に終わってしまうので setTimeout() をつけて遅延させて上げる必要がある。

参考リンク