This is a protocol specification for Fluentd forward
input/output plugins. This protocol is also used by fluent-logger software, and many other software in ecosystem (e.g., Docker logging driver for Fluentd).
This protocol version is v0. This spec is supported by Fluentd v0.10
and v0.12
, and will be changed at v0.14
(it will be versioned as protocol version v1
).
This specification describes the fluentd forward protocol, which is used to transport events from hosts to hosts over network.
The keywords "MUST", "MUST NOT", "SHOULD", "SHOULD NOT" and "MAY" in this document are to be interpreted as described in RFC 2119. The following terms are also used:
out_forward
plugin is the reference client implementation shipped with the fluentd distribution.in_forward
plugin is the reference server implementation shipped with the fluentd distribution.UDP heartbeat message SHOULD be a byte of 0x00
in both of Client and Server.
array
which contains one or more events to the server through TCP connection.Message
, Forward
and PackedForward
described below.nil
value for heartbeat health check usage without any event record payload.array
s on a single connection, continuously.array
s from the client through TCP connection.array
format.in_forward
plugin also accepts JSON representation of a single event for convenience. It detect it by the first byte of the request.It carries just a event.
tag
is a string separated with '.' (e.g. myapp.access) to categorize events.time
is a number of seconds since Unix epoch.record
is key-value pairs of the event record.option
is optional key-value pairs, to bring data to control servers' behavior.[ "tag.name", 1441588984, {"message": "bar"}, {"option": "optional"} ]
NOTE for v1 protocol: time MAY be a representation of EventTime
, which has nanosecond precision of time
with msgpack ext
format of type 0 is used when time_as_integer
is false
. Server SHOULD accept both formats.
It carries a series of events as a msgpack array
on a single request.
[ "tag.name", [ [1441588984, {"message": "foo"}], [1441588985, {"message": "bar"}], [1441588986, {"message": "baz"}] ], {"option": "optional"} ]
It carries a series of events as a msgpack binary on a single request.
entries
is a binary chunk of MessagePackEventStream
which contains multiple raw msgpack representations of Entry
.MessagePackEventStream
as msgpack bin
format as it's a binary representation.MessagePackEventStream
as msgpack str
format for compatibility reasons.bin
and str
.Forward
mode, when decoding is not needed by any plugins.out_forward
plugin sends events by the PackedForward
mode. It encloses event records with msgpack str
format instead of bin
format for a backward compatibility reason.[ "tag.name", "<<MessagePackEventStream>>", {"option": "optional"} ]
Entry is an array
representation of pairs of time and record, used in Forward
and PackedForward
mode.
It carries an optional meta data for the request.
size
: Clients MAY send the size
option to show the number of event records in an entries by an integer as a value. Server can know the number of events without unpacking entries (especially for PackedForward mode).chunk
: Clients MAY send the chunk
option to confirm the server receives event records. The value is a string of Base64 representation of 128 bits unique_id
which is an ID of a set of events.{"chunk": "p8n9gmxTQVC8/nh2wlKKeQ==", "size": 1023}
chunk
option is not sent.ack
: Server MUST respond ack
when the chunk
option is sent by client. The ack
response value MUST be the same value given by chunk
option from client. Client SHOULD retry to send events later when the request has a chunk
but the response has no ack
.{"ack": "p8n9gmxTQVC8/nh2wlKKeQ=="}
EventTime
uses msgpack extension format of type 0 to carry nanosecond precision of time
.
EventTime
instead of plain integer representation of second since unix epoch.+----+----+----+----+----+----+----+----+----+----+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | +----+----+----+----+----+----+----+----+----+----+ | C7 | 00 | second from epoch | nanosecond | +----+----+----+----+----+----+----+----+----+----+ |ext |type| 32bits integer BE | 32bits integer BE | +----+----+----+----+----+----+----+----+----+----+
Name?
means that Name
is optional.Name*
means that Name
can occur zero or more times.<<Name>>
means binary msgpack representation of Name
.[ A, B, C ]
means an array.nil
, string
, integer
and object
means as it is.Connection ::= <<Request>>* Request ::= Message | Forward | PackedForward | nil Message ::= [ Tag, Time, Record, Option? ] Forward ::= [ Tag, MultiEventStream, Option? ] MultiEventStream ::= [ Event* ] PackedForward ::= [ Tag, MessagePackEventStream, Option? ] MessagePackEventStream ::= <<Event>>* Event ::= [ Time, Record ] Tag ::= string Time ::= integer | EventTime Record ::= object Option ::= object
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4