you are talking about different parsers

ruleset parsers take the data arriving over the wire, figure out where the end of the message is, and what part is the timestamp, hostname, etc. This populates the normal properties in rsyslog.

you then can use mmnormalize/mmjsonparse to do additional parsing of the message.

Until some other parser extracts meaning out of the bytes arriving over the wire, there is nothing for mmnormalize to work from, you can't even tell where one message finishes and the next one starts.

The reason why it's strongly recommended to leave the RFC3164 parser in the list is that it's designed to extract as much meaning as possible from complete garbage, there is no message that the rfc3164 parser will say cannot be handled. So if you don't list the rfc3164 last, the other parsers will never be applied (the rfc3164 parser will parse the message and that will be that). All the other parsers are very picky, and will only successfully parse messages that exactly comply with their specs.

does this clarify things a bit.

David Lang


On Thu, 10 Dec 2015, Alec Swan wrote:

That should work. But then I don't understand why it's always recommended
to add RFC3164 parser at the end (
http://www.rsyslog.com/doc/master/configuration/ruleset/rsconf1_rulesetparser.html)
in order to avoid dropping messages? With your approach messages are always
parsed either by mmnormalize or <parse failed stuff>.

On Thu, Dec 10, 2015 at 1:16 PM, David Lang <[email protected]> wrote:

On Thu, 10 Dec 2015, Alec Swan wrote:

I've read a several articles about the benefits of parser chains for
rulesets but couldn't find any examples for the new style of
configuration.

Here is my scenario. I need to parse logs from my-app.log file written by
an app. Recently, the format of this file changed slightly, e.g. extra
tabs
removed between parts of each log message. I am using mmnormalize to parse
the old format using old.rb liblognorm rule. I would like to be able to
use
new.rb rule to parse the log file in case old.rb rule fails.

What do I need to do in the following to accomplish this?

input(type = "imfile" File = "my-app.logs" Ruleset = "my-app")

ruleset(name = "my-app") {

 action(type = "mmnormalize" rulebase = "/etc/rsyslog.d/rules/old.rb")

 # here I would like to use new.rb in case the action above failed to
parse log file

 action(type = "omfile" template="es-payload"
file="/tmp/my-app-parsed.log")
}


what I've resorted to doing is:

  action(type="mmnormalize" ruleBase="/etc/rsyslog.rb")
  if $!originalmsg != "" then {
     <parse failed stuff>
  }

David Lang
_______________________________________________
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.

_______________________________________________
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.

_______________________________________________
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.

Reply via email to