On Wed, 23 Nov 2016, [email protected] wrote:
Could any of you, aware of rsyslog internals, provide a design
diagram/architecture view of how the components are working?
Perhaps you could use something like:
https://docs.google.com/presentation/d/1UJSO0t2J6mrIyBNSkCUvrR5Q4RWbLcOof2WgB2_qA3g/edit#slide=id.g13bdc00843_0_3
I think, apart from documentation, it could help a lot understanding how to
improve rsyslog.
In fact, I'm missing a few complete examples (from file to file using queues,
mmnorm, json...) to understand the workflow. Is there anyone anywhere?
I may try to modify your documentation shortly, but I think it's actually much
simpler than you are thinking or Rainer's documents make it seem
you have N input modules, each operating independently (each is at least one
thread).
When an input module receives a message, it adds it to the main queue [1]
There is one (sometimes more) worker thread that grabs a message from the queue
[2] and then steps through the config file.
As the worker is going through the config file, it can do the following:
set variables
apply filters
invoke message modification module code (mm*) which set/modify variables
format the message per a template and call an action (action() which invoke
om* modules)
deliver to a different queue (which has it's own workers)
abandon processing of this message (stop)
In addition to the threads that process logs, there is an 'admin' thread that
polices everything else, does garbage collection, etc.
Everything else is encapsulated into modules.
There are several module types:
im* input modules which get logs from ??? (including impstats which gathers data
from rsyslog internals)
pm* parser modules which may be used by input modules to understand the log
format [3]
mm* message modification modules, these can modify the message itself or
create/modify variables. Almost all of them just create/modify variables.
sm* string modules which are C implementations of templates (speed optimization)
om* output modules, which take messages (or a batch of messages) and deliver
them to something
Each module provides code to specify what config options it supports, which
action() parameters it supports/requires, and the code to perform work when
called on each message.
so your file->file processing would be imfile reading a file and adding messages
to the main queue, and a worker process that reads the main queue and writes the
messages to a file using omfile
Does this help?
David Lang
[1] slight simplification, it could add it to a different queue if so
configured. It may add multiple messages to the queue at one time for efficency.
[2] again, a slight simplification, it can grab more messages, see batch
procesing. But each message is then processed individually.
[3] parser modules are supposed to look at the message buffer provided to it by
the input module and populate the standard properties. If they don't understand
the format, they are supposed to report failure and not change anything. There
are a couple that 'cheat' and modify the message buffer to fix known malformed
messages and then claim they fail to let the standard parsers then work on the
now well-formed message. the pmaix* and the first pmcisco* modules did this.
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com/professional-services/
What's up with rsyslog? Follow https://twitter.com/rgerhards
NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of
sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE
THAT.