fluent-plugin-websocket icon indicating copy to clipboard operation
fluent-plugin-websocket copied to clipboard

Fluentd websocket output plugin.

= fluent-plugin-websocket {Gem Version}[https://badge.fury.io/rb/fluent-plugin-websocket]

Fluentd websocket output plugin.

This plugin works as websocket server which can output JSON string or {MessagePack}[http://msgpack.org/] binary.

In the current version, emitted data will be broadcasted to the all connected clients.

== Installation

gem install fluent-plugin-websocket

== Configuration <match foo.**> type websocket host 192.168.1.1 # default: 0.0.0.0 (ANY) port 8080 # default: 8080 use_msgpack false # default: false add_time false # default: false add_tag true # default: true buffered_messages 100 # default: 0 token SomeToken # default: nil

  • host: WebSocket server IP address.
  • port: WebSocket server port.
  • use_msgpack: Send {MessagePack}[http://msgpack.org/] format binary. Otherwise, you send JSON format text.
  • add_time: Add timestamp to the data.
  • add_tag: Add fluentd tag to the data.
  • buffered_messages: The number of messages to be buffered. The new connection receives them.
  • token: Authentication token. Passed as get param. If set to nil, authentication is disabled.

If there are no websocket connections, this plugin silently discards data. You may use out_copy plugin like this:

<match foo.**>
  type copy
  <store>
    type file
    path /var/log/foo/bar.log
  </store>
  <store>
    type websocket
    port 8080
  </store>
</match>

If buffered_messages is greater than 0, the last stored data is sent to the client upon new connection.

== Data format [tag, timestamp, data_object]

  • tag is appended when add_tag option is true.
  • timestamp is appended when add_time option is true.

=== Example curl -X POST -d 'json={"action":"login","user":6}' http://localhost:8888/foo/bar

["foo.bar",1364699026,{"action":"login","user":6}]

== Client sample === JSON format (use_msgpack: false) function onMessage(evt) { data = JSON.parse(evt.data); ... }

=== Msgpack format binary (use_msgpack: true) Extract data by {msgpack.js}[https://github.com/msgpack/msgpack-javascript].

websocket.binaryType = "arraybuffer"
...
function onMessage(evt) {
  data = msgpack.unpack(new Uint8Array(evt.data))
  ...
}

=== Authentication and filtering

curl --include \
     --no-buffer \
     --header "Connection: Upgrade" \
     --header "Upgrade: websocket" \
     --header "Host: 127.0.0.1:8080" \
     --header "Origin: http://127.0.0.1:8080" \
     --header "Sec-WebSocket-Key: SGVabG8sIHOvcmxDIQ==" \
     --header "Sec-WebSocket-Version: 13" \
     "http://127.0.0.1:8888/?foo=bar&token=MyT0ken"
  • If token setting in config file is not nil, websocket server checks token parameter
  • Client will receive data which include {"foo": "bar"}

== Changelogs

  • 0.1.8 Add authentication and filtering
  • 0.1.7 Add message buffering.
  • 0.1.6 Added license to gemspec.
  • 0.1.5 Fixed dependencies.
  • 0.1.4 Changed json parser to yajl.
  • 0.1.3 Bug fix.
  • 0.1.2 Released gem.

See commit logs about contributors.

== Copyright

Copyright:: Copyright (c) 2013 Tetsu Izawa (@moccos) License:: Apache License, Version 2.0