El vie, 17 sept 2021 a las 9:15, Mariusz Kruk via rsyslog (<[email protected]>) escribió: > > Hmm... > > OK, so a simple setup of: > > [cut] > > ruleset(name="whatever" queue.type="direct") { > > set $.msg="whatever"; > > } > > set $.msg=$msg; > > call whatever > > template using $.msg > > output with the template > > [cut] > > Which from my tests shows that $.msg retains the $msg value even though > it was supposed to be overwritten by the "whatever" ruleset is caused > not by the queue mechanics but by non-linearity of execution and race?
I'll check. Maybe my memory served me incorrectly - but I don't think so. Rainer > > MK > > On 17.09.2021 08:55, Rainer Gerhards via rsyslog wrote: > > The default queue mode is "direct" - no matter if it is explicitly > > specified or not. > > > > There are indeed semantic differences between the "direct" queue > > (a.k.a. "no real queue exists") and any other (real) queue type. As > > you say, in direct mode, the message object is NOT copied. So anything > > done to it, will potentially affect other uses of the very same > > message object. I real queues, the message is copied and thus no > > processing outside the scope of the queue is affected. > > > > NOTE WELL: if you have parts with direct AND real queues AND modify > > messages in "direct queue constructs" AND have actions/rulesets with > > real queues running in parallel, you have a race. If the modification > > made by the direct queue part depends on whether processing of the > > real queues has already started. For "regular" rule sets this is no > > problem, because main processing is sequential. However, if you do > > very complex setups with multipele rule sets calling into each other > > and using different queue modes, this can affect you. > > > > It is best, also for maintainability, to have a simple sequential > > structure in top level processing, spawning off topic rule sets (if at > > all required). then do all "global" modifications at the beginning. > > And do local (intentionally non outside-visible) modifications in the > > topic rule sets. > > > > I hope this helps, > > Rainer > > > > El vie, 17 sept 2021 a las 6:17, rajeshksv via rsyslog > > (<[email protected]>) escribió: > >> Agreed. We don't need a direct queue before ruleset. I added it only to > >> understand what's going with DIRECT Queues (Since its a very novel concept > >> - Haven't heard something like this before) > >> > >> If you remove the DIRECT queue from ruleset(in Scenario I), then > >> modifications done in ruleset are visible to the main lane. It's working as > >> expected. But since I am interested in understanding DIRECT Queues, I added > >> it. > >> > >>>>> Also, although the maintainers will need to say for sure, user variable > >> defined in a call may not be visible to the parent. Same as in most > >> programming languages. > >> Rsyslog works in a different way, in few scenarios, user variables defined > >> in a call will be visible to the parent (If ruleset is not backed by > >> Queue). So, its not similar to other languages ;) > >> > >>>>> "Note that mmnormalize should only be called once on each message. > >> Behaviour is undefined if multiple calls to mmnormalize happen for the > >> same message." > >> Its a documentation bug, Rainer has raised a PR and will be resolved soon - > >> https://github.com/rsyslog/rsyslog-doc/pull/931/files. Its safe to use it > >> multiple times. > >> > >> > >> On Fri, Sep 17, 2021 at 12:56 AM David Lang via rsyslog < > >> [email protected]> wrote: > >> > >>> On Thu, 16 Sep 2021, Mariusz Kruk via rsyslog wrote: > >>> > >>> https://www.rsyslog.com/doc/v8-stable/configuration/modules/mmnormalize.html > >>>> "Note that mmnormalize should only be called once on each message. > >>>> Behaviour is undefined if multiple calls to mmnormalize happen for the > >>>> same message." > >>> I called that out and it should have been removed from current > >>> documentation. > >>> > >>>> From my tests it turns out that even with direct queue the message gets > >>>> copied when entering a separate queue and thus the results are not > >>>> inherited on the ruleset (and queue) exit. > >>>> > >>>> So it seems to be the mmnormalize that's causing the OP's variable to be > >>>> retained after the ruleset exit. > >>> but if you don't specify any queue at all, then things inside a ruleset > >>> will > >>> affect things outside the ruleset. > >>> > >>> David Lang > >>> > >>>> On 16.09.2021 20:54, David Lang wrote: > >>>>> There is no reason you can't call mmnormalize multiple times, you can > >>>>> specify where to put the results (by default, they go under $!) > >>>>> > >>>>> I'm not really sure what a direct queue on a ruleset means, you should > >>>>> just call the ruleset without it having any queue on it. > >>>>> > >>>>> David Lang > >>>>> > >>>>> On Thu, 16 Sep 2021, Mariusz Kruk via rsyslog wrote: > >>>>> > >>>>>> I believe it's not about queue, but about mmnormalize. I haven't used > >>>>>> mmnormalize much myself but from the docs I understand that > >>>>>> mmnormalize should only be called once on a message and is supposed > >>>>>> to parse the message into a set of "global" properties. > >>>>>> > >>>>>> > >>>>>> On 16.09.2021 15:21, rajeshksv via rsyslog wrote: > >>>>>>> Hi Rsyslog Users, > >>>>>>> > >>>>>>> I am trying to understand how queues work in Rsyslog. In case of > >>>>>>> non-direct > >>>>>>> queues, message is copied and placed in the queue and message > >>>>>>> modifications > >>>>>>> done by queue workers won't have any impact on the original message. > >>>>>>> Makes > >>>>>>> sense here. > >>>>>>> > >>>>>>> However, I am a little confused when it comes to direct Queue. What > >>>>>>> happens in Direct Queue ? Will the message be copied or is it the same > >>>>>>> message ? I tested out two scenarios (wrt rulesets and actions) and > >>>>>>> both > >>>>>>> of them gave different results. > >>>>>>> > >>>>>>> When ruleset is backed by a direct Queue, message modifications done > >>> in > >>>>>>> ruleset don't reflect back in original flow where as in case of > >>> actions > >>>>>>> (such mmnormalize, mmkubernetes) which are by default backed by direct > >>>>>>> Queue, message modifications done with action reflects in original > >>> flow > >>>>>>> Scenario 1: > >>>>>>> > >>>>>>> template(name="abc" type="string" string="%$!var1% %$.var2% %msg%") > >>>>>>> > >>>>>>> ruleset(name="relay.htp1" queue.type="Direct") { > >>>>>>> call rs1 > >>>>>>> * // $!var1, $.var2 aren't available here* > >>>>>>> action(type="omfile" file="/tmp/output.log" template="abc") > >>>>>>> call relay.htp > >>>>>>> } > >>>>>>> > >>>>>>> ruleset(name="rs1" queue.type="Direct"){ > >>>>>>> set $!var1 = "hello"; > >>>>>>> set $.var2 = "bye"; > >>>>>>> } > >>>>>>> > >>>>>>> input(type="imfile" > >>>>>>> File="/tmp/input.log" > >>>>>>> Ruleset="relay.htp1" > >>>>>>> Tag="tag") > >>>>>>> > >>>>>>> > >>>>>>> Scenario 2: > >>>>>>> > >>>>>>> module(load = "mmnormalize") > >>>>>>> ruleset(name = "relay.htp1" queue.type="Direct") { > >>>>>>> action(type = "mmnormalize" > >>>>>>> ruleBase="/etc/rsyslog.d/service.rulebase" > >>>>>>> path="$!msg") > >>>>>>> * // $!msg will be available here even though action is backed by > >>>>>>> a > >>>>>>> default Queue. * > >>>>>>> } > >>>>>>> > >>>>>>> input(type="imfile" > >>>>>>> File="/tmp/input.log" > >>>>>>> Ruleset="relay.htp1" > >>>>>>> Tag="tag") > >>>>>>> > >>>>>>> > >>>>>>> How come $!var1, $.var2 aren't available in scenario1 whereas $!msg is > >>>>>>> available when both are using Direct Queue. Am I missing something > >>>>>>> here ? > >>>>>>> > >>>>>> _______________________________________________ > >>>>>> rsyslog mailing list > >>>>>> https://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 > >>>> https://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 > >>> https://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. > >> > >> > >> -- > >> Regards, > >> Rajesh KSV > >> _______________________________________________ > >> rsyslog mailing list > >> https://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 > > https://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 > https://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 https://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.

