mirror of https://github.com/OISF/suricata
parent
7447651fa0
commit
9fffc09ad7
@ -0,0 +1,99 @@
|
||||
EVE Filetypes
|
||||
#############
|
||||
|
||||
Introduction
|
||||
************
|
||||
|
||||
The Suricata EVE/JSON output supports filetypes to extend how
|
||||
EVE records are processed and delivered. Custom filetypes
|
||||
provide alternatives to standard file output by implementing a
|
||||
file-like interface that Suricata can write to. These filetypes can
|
||||
send events to databases, sockets, or other destinations, and can even
|
||||
perform custom processing on the output before storing it.
|
||||
|
||||
EVE Filetype Life Cycle
|
||||
***********************
|
||||
|
||||
The life-cycle of an EVE filetype along with the callbacks are
|
||||
discussed in ``output-eve.h``:
|
||||
|
||||
.. literalinclude:: ../../../../../src/output-eve.h
|
||||
:language: c
|
||||
:start-at: /** \brief Structure used to define an EVE output
|
||||
:end-at: } SCEveFileType;
|
||||
|
||||
Threading Considerations
|
||||
************************
|
||||
|
||||
It is the user's Suricata EVE output configuration that enables
|
||||
multi-threaded logging, not the filetype. So all filetypes should be
|
||||
designed to be thread safe.
|
||||
|
||||
If your filetype can absolutely not be made thread safe, it would be
|
||||
best to error out on initialization. This can be done during the
|
||||
filetype initialization:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static int MyFiletypeInit(const SCConfNode *node, const bool threaded, void **data)
|
||||
{
|
||||
if (threaded) {
|
||||
FatalError("EVE filetype does not support threaded logging.");
|
||||
}
|
||||
|
||||
/* Continue with initialization. */
|
||||
}
|
||||
|
||||
Write Considerations
|
||||
********************
|
||||
|
||||
The ``Write`` callback is called in a packet processing thread so any
|
||||
blocking (other than writing to a file) should be avoided. If writing
|
||||
to a blocking resource it is recommended to copy the buffer into
|
||||
another thread for further processing to avoid packet loss.
|
||||
|
||||
Registration
|
||||
************
|
||||
|
||||
Registering an EVE filetype requires registering the filetype
|
||||
early in the Suricata start-up or lifecycle, or if a plugin, in the
|
||||
plugin initialization function.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
SCEveFileType *filetype = SCCalloc(1, sizeof(SCEveFileType));
|
||||
|
||||
filetype->name = "my-custom-filetype";
|
||||
filetype->Init = FiletypeInit;
|
||||
filetype->Deinit = FiletypeDeinit;
|
||||
filetype->ThreadInit = FiletypeThreadInit;
|
||||
filetype->ThreadDeinit = FiletypeThreadDeinit;
|
||||
filetype->Write = FiletypeWrite;
|
||||
|
||||
if (!SCRegisterEveFileType(filetype)) {
|
||||
FatalError("Failed to register EVE filetype");
|
||||
}
|
||||
|
||||
Then to use this filetype, set the ``filetype`` in your
|
||||
``suricata.yaml`` ``eve-log`` configuration to the name of the
|
||||
filetype:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
outputs:
|
||||
- eve-log:
|
||||
enabled: true
|
||||
filetype: my-custom-filetype
|
||||
|
||||
Examples
|
||||
********
|
||||
|
||||
Suricata built-ins:
|
||||
|
||||
* ``null``: see ``output-eve-null.c`` in the Suricata source code
|
||||
* ``syslog``: see ``output-eve-syslog.c`` in the Suricata source code
|
||||
|
||||
Plugin:
|
||||
|
||||
* The Suricata source code contains an example as a plugin, see:
|
||||
``examples/plugins/c-json-filetype``.
|
||||
Loading…
Reference in New Issue