How to Write Filter Plugin
This section shows how to write a custom filter plugin in addition to the core ones. The plugin filenames, starting with filter_
prefix, are registered as filter plugins.
See Plugin Base Class API for more details on the common APIs of all the plugins.
Here is the implementation of the most basic filter that passes through all the events as-is:
Methods
A filter plugin overrides the one of filter
/filter_with_time
/filter_stream
method.
#filter(tag, time, record)
#filter(tag, time, record)
This method implements the filtering logic.
tag
: is aString
,time
is aFluent::EventTime
or anInteger
; and,record
is aHash
with String keys.
The return value of this method should be a Hash
of modified record, or nil
. If it is nil
, the event will be discarded.
#filter_with_time(tag, time, record)
#filter_with_time(tag, time, record)
This method implements the filtering logic with time update. Event time will be replaced with the return value.
tag
: is aString
,time
is aFluent::EventTime
or anInteger
; and,record
is aHash
with String keys.
The return value of this method should be two element array, [new_time, new_record]
, or nil
. If it is nil
, the event will be discarded.
#filter_stream(tag, es)
#filter_stream(tag, es)
This method implements the event stream based filtering logic. If you hard to implement the logic with filter
, e.g. need to handle multiple records in one processing, use this method.
tag
: is aString
,es
is aFluent::EventStream
classes. See EventStream code
The return value of this method should be MultiEventStream
. If it is nil
, the event will be discarded.
Writing Tests
Fluentd filter plugin has one or some points to be tested. Others (parsing configurations, controlling buffers, retries, flushes and many others) are controlled by Fluentd core.
Fluentd also provides test driver for plugins. You can write tests for your own plugins very easily:
Overview of Tests
Testing for the filter plugins is mainly for:
Validation of configuration parameters (i.e.
#configure
)Validation of the filtered records
To make testing easy, the plugin test driver provides a dummy router, a logger and general functionality to override the system, parser and other relevant configurations.
The lifecycle of the plugin and its test driver is:
Instantiate the test driver which then instantiates the plugin
Configure plugin
Register conditions to stop/break running tests
Run test code (provided as a block for
d.run
)Assert results of tests using data provided by the driver
At the start of Step # 4, the test driver calls the startup methods of the plugin e.g. #start
and at the end #stop
, #shutdown
, etc. It can be skipped by optional arguments of #run
.
For:
configuration tests, repeat steps # 1-2
full feature tests, repeat steps # 1-5
For more details, see Testing API for Plugins.
If this article is incorrect or outdated, or omits critical information, please let us know. Fluentd is an open-source project under Cloud Native Computing Foundation (CNCF). All components are available under the Apache 2 License.
Last updated