コミケ告知

サークル networkmaniacs.net(旧:浜風もっこす) 2017.02.17 デブサミ内 DevBooksに出展します。
詳細は circle タグの記事へ。
2013年3月31日日曜日

Fluentdの出力をWebSocketに流すoutput pluginを書いた

Fluentdの出力をWebSocketに流すだけのoutput pluginを書いてみました。Rubyが全然わからないので、使い方をぐぐりながら。
普通はモニタリングしたければログなり標準出力なりに出せばいいので、広く一般に使えるものではないでしょう。リモートで動いているFluentdが吐くデータを、ちょっと手元のブラウザに出してみたかったんじゃよ。

いわゆる自分用プラグインです。インストールは「pluginディレクトリに置いてくれ」「em-websocketに依存してるからあれ入れてね」というバルクな仕様。他に使う人がいれば、Gemにした方が良いのかもしれません。

はじめてのRuby雑感

何かの勉強会でサンプルがRubyだったため、1回書いたことがあるような気がしますが、何も覚えていませんでした。変数の種類とかifの書き方とかを検索するレベル。
Rubyでは、変数に関数を直接代入は出来ないという理解であってますかね?検索したら proc というのが出てきたので、とりあえずそれを使ってみました。変数に直接関数入れられる言語と比べると、めんどくせーなーという印象です。

はじめてのWebSocket (クライアント側) 雑感

WebSocketってきっと面倒で、専用のライブラリがあってそれを使うのかな…と想像していましたが、生のWebScoketオブジェクトを使ってちょろっと送受信するだけなら簡単でした。
websocket.orgにechoのサンプルがあるので見ると、WebSocketのオブジェクトをnewして、あとはハンドラ(onXXX)に必要なものをセットするだけです。サンプルをここに書きおこす必要は感じられない程度に、シンプル。
最初はサーバーを自前で立てなくても、サンプルで使っているws://echo.websocket.orgで試せるのも有難いです。サーバーの動作を疑わなくてもよい点で。

はじめてのWebSocket (サーバー側) 雑感

FluentdのプラグインはRubyである必要があるため、em-websocketを使いました。作者が作者だけにrev-websocketで…とまず思ったけど、3年間更新されてませんね。動きませんでした。
exampleの中にあるmulticastのサンプルを見ながら動かしたら、意外とあっさり複数接続も出来ているようです。

FluentdはMessagePackフォーマットで出すのも簡単なため、受信側にmsgpack.jsを組み込んで、バイナリ送信にも対応しました。その際、いつものsendメソッドで送ろうとしたら接続が切れてしまうので何かと思ったら、どうやらsend_binaryという別のメソッドがあったようです。pull requestの履歴の中にありました。READMEの範囲では、そんなのわからなかったよ…

0 件のコメント:

コメントを投稿