2015-06-11 7:15 GMT+02:00 singh.janmejay <[email protected]>:
> I haven't dug deep, but with 10 minutes worth of analysis, it seems
> like offender is: MsgSetPropsViaJSON
>
> This is what mmexternal calls, it gives it a string, which its
> supposed to parse as a json and then set properties if that json turns
> out to be a json-object (as opposed to array or string or
> numeric-litteral etc).
>
> Now the loop here(part of MsgSetPropsViaJSON):
>     json_object_object_foreach(json, name, val) {
>         msgSetPropViaJSON(pMsg, name, val, 0);
>     }
>
> seems to be doing the 'setting' of values key-by-key by calling
> msgSetPropViaJSON.
>
> Convince yourself that the for-each macro doesn't increment ref-count
> of the value by peeking into json-c codebase (I looked at master as of
> Sep last year, haven't been keeping it up to date).
>
> Now look at the second-last branch in msgSetPropViaJSON, which calls
> msgAddJSON, but doesn't do a ref-count bump before that.
>
> Makes sense?

Thanks for looking into it. From the description it makes a lot of
sense, also this seems to occur only with mmexternal, so that looks
also like it points into the right direction.

>
> I am happy to fix it and create a PR for it, but it'll take me
> at-least a week (because I need to wrap up stuff before I can spend
> more time on this).

That's most probably faster than I can look at it.

Rainer

> In the mean-while, if anyone else wants to fix
> this please update this thread and then go about it. But should you
> choose to fix it, _please do write a test to cover the bug_, and run
> tests with valgrind before applying the fix to prove to yourself that
> it is indeed broken.
>
> On Thu, Jun 11, 2015 at 10:18 AM, singh.janmejay
> <[email protected]> wrote:
>> Once I have a little bit more time, I'll go through the thread and try
>> to help find the offender.
>>
>> On Thu, Jun 11, 2015 at 10:16 AM, singh.janmejay
>> <[email protected]> wrote:
>>> Ref-count increment is not required because callers are supposed to
>>> pass exclusive ownership while setting value of a key. What you are
>>> seeing is result of bad-usage (where caller probably free'ed up the
>>> json_object after setting it as value of some key).
>>>
>>> To understand this better, look at some call-sites. Let us take an
>>> example, say set <x> = <y>;
>>>
>>> It calls msgSetJSONFromVar from execSet. Notice how in each scenario
>>> the json_object passed to msgAddJSON is an exclusive copy.
>>>
>>> If you go through all the call-sites that invoke msgAddJSON, you'll
>>> see that exclusive-copy-only is an invariant that is always
>>> maintained.
>>>
>>> The "bad-usage" that I mentioned above means some caller has not
>>> maintained that invariant, and that lead to the json_object being
>>> free'ed after adding it to msg.
>>>
>>> Am I making sense?
>>>
>>> On Wed, Jun 10, 2015 at 2:39 AM, David Boles (dboles) <[email protected]> 
>>> wrote:
>>>> I finished setting up a debugging environment for 8.10.0 and spent some 
>>>> time stepping through the code. First, I noticed that the json_object that 
>>>> was in pMsg got overwritten on an unrelated call to 
>>>> json_object_new_object(). That suggested that the json-c library thought 
>>>> it owned that memory while a pMsg still had a pointer to it. In reading 
>>>> the code I noticed that in msgDelJSON() under the condition "if(name[1] == 
>>>> '\0')" there is a  json_object_put() but under the matching condition in 
>>>> msgAddJSON() there is no json_object_get().
>>>>
>>>> After more reading through the code to get a rough idea of code flow I 
>>>> applied the following delta:
>>>>
>>>> --- ../pristine/rsyslog-8.10.0/runtime/msg.c    2015-05-19 
>>>> 03:53:40.000000000 -0500
>>>> +++ runtime/msg.c       2015-06-09 14:47:51.066158522 -0500
>>>> @@ -4343,6 +4343,7 @@
>>>>         }
>>>>
>>>>         if(name[1] == '\0') { /* full tree? */
>>>> +               json_object_get(json);
>>>>                 if(*pjroot == NULL)
>>>>                         *pjroot = json;
>>>>                 else
>>>>
>>>> and rebuilt. That change eliminated the overwriting of the pMsg->json 
>>>> object and eliminated the segfault. I then performed the following steps:
>>>>
>>>>   (1) launched the patched rsyslogd
>>>>   (2) pumped 100K messages through it to reach steady state
>>>>   (3) measured the memory footprint of rsyslogd
>>>>   (4) pumped another 100K messages through it
>>>>   (5) measured the RSS memory footprint of rsyslogd again and verified 
>>>> that there was no change
>>>>
>>>> I don't know whether my patch is correct or not but I'll be continuing 
>>>> down this path until I get feedback. If it is correct, then it's a fix for 
>>>> issue #368.
>>>>
>>>> Thanks,
>>>>
>>>> David Boles
>>>> ________________________________________
>>>> From: David Boles (dboles)
>>>> Sent: Monday, June 08, 2015 4:36 PM
>>>> To: rsyslog-users
>>>> Subject: RE: [rsyslog] Unable to use foreach
>>>>
>>>> Note - I don't get a segfault when mmexternal is enabled unless I also 
>>>> access $!. I can log the contents of my mmexternal rewritten "msg" without 
>>>> error. However, because I'm logging "msg" I get a quote-ified 
>>>> representation of the JSON that I want.
>>>>
>>>> Even if my Python script doesn't modify anything but "msg", as soon as I 
>>>> either do the RSYSLOG_DebugFormat action (which accesses $!) or perform 
>>>> either an omfile or ommongodb action with a template referencing $! then 
>>>> rsyslogd segfaults. I don't know rsyslogd internals at all but below 
>>>> you'll find a backtrace from the point of the segfault. I've confirmed 
>>>> that it is getting the "!" property and am working to set up a debugging 
>>>> environment now.
>>>>
>>>> This has been filed as an issue per Rainer's request several days ago.
>>>>
>>>> Thanks,
>>>>
>>>> David Boles
>>>>
>>>> ========
>>>>
>>>> Program received signal SIGSEGV, Segmentation fault.
>>>> [Switching to Thread 0x7ffff4a2e700 (LWP 4761)]
>>>> printbuf_reset (p=0xffffffffffffffff) at printbuf.c:182
>>>> 182       p->buf[0] = '\0';
>>>> Missing separate debuginfos, use: debuginfo-install 
>>>> glib2-2.40.0-4.el7.x86_64 glibc-2.17-55.el7.x86_64 l
>>>> iblogging-1.0.5-1.el7.x86_64 libmongo-client-0.1.8-1.el7.x86_64 
>>>> libuuid-2.23.2-22.el7_1.x86_64 systemd-l
>>>> ibs-208-20.el7_1.3.x86_64 zlib-1.2.7-13.el7.x86_64
>>>> (gdb) bt
>>>> #0  printbuf_reset (p=0xffffffffffffffff) at printbuf.c:182
>>>> #1  0x00007ffff719247e in json_object_to_json_string_ext 
>>>> (jso=0x7fffe8002580, flags=flags@entry=1)
>>>>     at json_object.c:274
>>>> #2  0x00007ffff71924da in json_object_to_json_string (jso=<optimized out>) 
>>>> at json_object.c:286
>>>> #3  0x00007ffff7192d15 in json_object_get_string (jso=<optimized out>) at 
>>>> json_object.c:738
>>>> #4  0x000000000041b7d1 in getJSONPropVal (pMsg=<optimized out>, 
>>>> pProp=0x6aaa00,
>>>>     pRes=pRes@entry=0x7ffff4a2d968, buflen=buflen@entry=0x7ffff4a2d95c, 
>>>> pbMustBeFreed=0x7ffff4a2da42)
>>>>     at msg.c:2802
>>>> #5  0x000000000041bbcc in MsgGetProp (pMsg=pMsg@entry=0x7ffff0004030, 
>>>> pTpe=pTpe@entry=0x6aa9e0,
>>>>     pProp=pProp@entry=0x6aaa00, pPropLen=pPropLen@entry=0x7ffff4a2da44,
>>>>     pbMustBeFreed=pbMustBeFreed@entry=0x7ffff4a2da42, 
>>>> ttNow=ttNow@entry=0x7ffff4a2db10) at msg.c:3285
>>>> #6  0x000000000044472c in tplToString (pTpl=0x6a8700, 
>>>> pMsg=pMsg@entry=0x7ffff0004030,
>>>>     iparam=iparam@entry=0x7fffe8002940, ttNow=ttNow@entry=0x7ffff4a2db10) 
>>>> at ../template.c:194
>>>> #7  0x000000000043fbff in prepareDoActionParams (pWti=0x6b1fc0, 
>>>> ttNow=0x7ffff4a2db10,
>>>>     pMsg=0x7ffff0004030, pAction=0x6b9680) at ../action.c:933
>>>> #8  processMsgMain (pAction=pAction@entry=0x6b9680, 
>>>> pWti=pWti@entry=0x6b1fc0, pMsg=0x7ffff0004030,
>>>>     ttNow=ttNow@entry=0x7ffff4a2db10) at ../action.c:1300
>>>> #9  0x0000000000440337 in doSubmitToActionQ (pAction=0x6b9680, 
>>>> pWti=0x6b1fc0, pMsg=<optimized out>)
>>>>     at ../action.c:1449
>>>> #10 0x00000000004390a7 in execAct (stmt=0x6b95f0, pWti=0x6b1fc0, 
>>>> pMsg=0x7ffff0004030) at ruleset.c:202
>>>> #11 scriptExec (root=<optimized out>, pMsg=pMsg@entry=0x7ffff0004030, 
>>>> pWti=pWti@entry=0x6b1fc0)
>>>>     at ruleset.c:454
>>>> #12 0x0000000000439884 in processBatch (pBatch=0x6b1ff8, pWti=0x6b1fc0) at 
>>>> ruleset.c:508
>>>> #13 0x0000000000448cd4 in msgConsumer (notNeeded=<optimized out>, 
>>>> pBatch=0x6b1ff8, pWti=0x6b1fc0)
>>>>     at rsyslogd.c:575
>>>> #14 0x00000000004357ee in ConsumerReg (pThis=0x6b1b20, pWti=0x6b1fc0) at 
>>>> queue.c:1897
>>>> #15 0x000000000043182e in wtiWorker (pThis=pThis@entry=0x6b1fc0) at 
>>>> wti.c:334
>>>> #16 0x000000000043001a in wtpWorker (arg=0x6b1fc0) at wtp.c:389
>>>> #17 0x00007ffff79b1df3 in start_thread () from /lib64/libpthread.so.0
>>>> #18 0x00007ffff6aba3dd in clone () from /lib64/libc.so.6
>>>> (gdb) list
>>>> 177       }
>>>> 178     }
>>>> 179
>>>> 180     void printbuf_reset(struct printbuf *p)
>>>> 181     {
>>>> 182       p->buf[0] = '\0';
>>>> 183       p->bpos = 0;
>>>> 184     }
>>>> 185
>>>> 186     void printbuf_free(struct printbuf *p)
>>>> (gdb) p p
>>>> $1 = (struct printbuf *) 0xffffffffffffffff
>>>>
>>>>
>>>> ________________________________________
>>>> From: [email protected] 
>>>> [[email protected]] on behalf of David Lang [[email protected]]
>>>> Sent: Monday, June 08, 2015 3:40 PM
>>>> To: rsyslog-users
>>>> Subject: Re: [rsyslog] Unable to use foreach
>>>>
>>>> given that input, what does your python script output?
>>>>
>>>> since you are getting a segfault when mmexternal is enabled, I would guess 
>>>> that
>>>> you are returning something invalid and rsyslog is not properly handling 
>>>> the
>>>> error.
>>>>
>>>> I'll also point out that what you are passing to your script is much 
>>>> larger than
>>>> it needs to be (you have the same data in the original message, in 
>>>> rawmessge, in
>>>> $! and sometimes in other things). I would suggest creating a template 
>>>> that just
>>>> has $! in it, and set variables for anything you need that's not already in
>>>> there.
>>>>
>>>> David Lang
>>>>
>>>> On Mon, 8 Jun 2015, David Boles (dboles) wrote:
>>>>
>>>>> Date: Mon, 8 Jun 2015 20:34:45 +0000
>>>>> From: "David Boles (dboles)" <[email protected]>
>>>>> Reply-To: rsyslog-users <[email protected]>
>>>>> To: rsyslog-users <[email protected]>
>>>>> Subject: Re: [rsyslog] Unable to use foreach
>>>>>
>>>>> David,
>>>>>
>>>>> Sorry for the delay in responding - my focus was elsewhere temporarily. 
>>>>> What you say about $! and new content below makes sense. I've tried an 
>>>>> experiment with the RSYSLOG_DebugFormat mechanism by running with the 
>>>>> following /etc/rsyslog.conf tweaked in three ways:
>>>>>
>>>>> --------
>>>>> module(load="imuxsock")
>>>>> module(load="mmexternal")
>>>>> module(load="mmjsonparse")
>>>>> module(load="ommongodb")
>>>>>
>>>>> template(name="yyd-log-info" type="list") {
>>>>>    property(name="timestamp")
>>>>>    constant(value=" ")
>>>>>    property(name="hostname")
>>>>>    constant(value=" ")
>>>>>    property(name="msg")
>>>>>    constant(value="\n")
>>>>> }
>>>>>
>>>>> # 1
>>>>> *.* /var/log/debug_pre.log;RSYSLOG_DebugFormat
>>>>>
>>>>> if ($fromhost-ip == '127.0.0.1' and $syslogfacility-text != 'kern') then {
>>>>>    action(type="mmjsonparse")
>>>>>    if $parsesuccess == "OK" then {
>>>>> # 2
>>>>>        action(type="mmexternal"
>>>>>               binary="/tmp/snowflake/rewriter.py"
>>>>>               interface.input="fulljson" )
>>>>>        action(type="omfile"
>>>>>               template="yyd-log-info"
>>>>>               file="/var/log/yyd_anon.log")
>>>>>    }
>>>>> }
>>>>>
>>>>> # 3
>>>>> #*.* /var/log/debug_post.log;RSYSLOG_DebugFormat
>>>>> --------
>>>>>
>>>>> (1) One mode was with the mmexternal action after # 2 commented out and 
>>>>> the DebugFormat action at # 3, yielding:
>>>>> --------
>>>>> Debug line with all properties:
>>>>> FROMHOST: 'dboles-victim-0', fromhost-ip: '127.0.0.1', HOSTNAME: 
>>>>> 'dboles-victim-0', PRI: 12,
>>>>> syslogtag ':', programname: '', APP-NAME: '', PROCID: '-', MSGID: '-',
>>>>> TIMESTAMP: 'Jun  8 15:37:24', STRUCTURED-DATA: '-',
>>>>> msg: ' @cee:{"msg":"[umberlog test] testing ... 1, 2, 
>>>>> 3\n","count":"2","el.0.type":"ladybug","el.0.name":"natalie","el.0.spots":"12","el.1.type":"ant","el.1.name":"B289","el.1.role":"worker","el.1.age":"9","pid":"32294","facility":"user","priority":"warn","uid":"1002","gid":"1002","host":"dboles-victim-0","program":"","timestamp":"2015-06-08T15:37:24.449217401-0400"}'
>>>>> escaped msg: ' @cee:{"msg":"[umberlog test] testing ... 1, 2, 
>>>>> 3\n","count":"2","el.0.type":"ladybug","el.0.name":"natalie","el.0.spots":"12","el.1.type":"ant","el.1.name":"B289","el.1.role":"worker","el.1.age":"9","pid":"32294","facility":"user","priority":"warn","uid":"1002","gid":"1002","host":"dboles-victim-0","program":"","timestamp":"2015-06-08T15:37:24.449217401-0400"}'
>>>>> inputname: imuxsock rawmsg: '<12>Jun  8 15:37:24 : @cee:{"msg":"[umberlog 
>>>>> test] testing ... 1, 2, 
>>>>> 3\n","count":"2","el.0.type":"ladybug","el.0.name":"natalie","el.0.spots":"12","el.1.type":"ant","el.1.name":"B289","el.1.role":"worker","el.1.age":"9","pid":"32294","facility":"user","priority":"warn","uid":"1002","gid":"1002","host":"dboles-victim-0","program":"","timestamp":"2015-06-08T15:37:24.449217401-0400"}'
>>>>> $!:{ "msg": "[umberlog test] testing ... 1, 2, 3\n", "count": "2", 
>>>>> "el.0.type": "ladybug", "el.0.name": "natalie", "el.0.spots": "12", 
>>>>> "el.1.type": "ant", "el.1.name": "B289", "el.1.role": "worker", 
>>>>> "el.1.age": "9", "pid": "32294", "facility": "user", "priority": "warn", 
>>>>> "uid": "1002", "gid": "1002", "host": "dboles-victim-0", "program": "", 
>>>>> "timestamp": "2015-06-08T15:37:24.449217401-0400" }
>>>>> $.:
>>>>> $/:
>>>>> --------
>>>>> This makes sense - the mmjsonparse populates the $! element.
>>>>>
>>>>> (2) The second mode was with the mmexternal action at # 2 enabled and the 
>>>>> DebugFormat action at # 3 - this results in rsyslogd suffering a segfault.
>>>>>
>>>>>
>>>>> (3) The third mode has the mmexternal action at # 2 enabled and the 
>>>>> DebugFormat action at #1 enabled:
>>>>>
>>>>> Debug line with all properties:
>>>>> FROMHOST: 'dboles-victim-0', fromhost-ip: '127.0.0.1', HOSTNAME: 
>>>>> 'dboles-victim-0', PRI: 12,
>>>>> syslogtag ':', programname: '', APP-NAME: '', PROCID: '-', MSGID: '-',
>>>>> TIMESTAMP: 'Jun  8 15:41:26', STRUCTURED-DATA: '-',
>>>>> msg: ' @cee:{"msg":"[umberlog test] testing ... 1, 2, 
>>>>> 3\n","count":"2","el.0.type":"ladybug","el.0.name":"natalie","el.0.spots":"12","el.1.type":"ant","el.1.name":"B289","el.1.role":"worker","el.1.age":"9","pid":"1828","facility":"user","priority":"warn","uid":"1002","gid":"1002","host":"dboles-victim-0","program":"","timestamp":"2015-06-08T15:41:26.302102005-0400"}'
>>>>> escaped msg: ' @cee:{"msg":"[umberlog test] testing ... 1, 2, 
>>>>> 3\n","count":"2","el.0.type":"ladybug","el.0.name":"natalie","el.0.spots":"12","el.1.type":"ant","el.1.name":"B289","el.1.role":"worker","el.1.age":"9","pid":"1828","facility":"user","priority":"warn","uid":"1002","gid":"1002","host":"dboles-victim-0","program":"","timestamp":"2015-06-08T15:41:26.302102005-0400"}'
>>>>> inputname: imuxsock rawmsg: '<12>Jun  8 15:41:26 : @cee:{"msg":"[umberlog 
>>>>> test] testing ... 1, 2, 
>>>>> 3\n","count":"2","el.0.type":"ladybug","el.0.name":"natalie","el.0.spots":"12","el.1.type":"ant","el.1.name":"B289","el.1.role":"worker","el.1.age":"9","pid":"1828","facility":"user","priority":"warn","uid":"1002","gid":"1002","host":"dboles-victim-0","program":"","timestamp":"2015-06-08T15:41:26.302102005-0400"}'
>>>>> $!:
>>>>> $.:
>>>>> $/:
>>>>>
>>>>> --------
>>>>>
>>>>> You also asked for what my external Python script gets as input:
>>>>>
>>>>> { "msg": " @cee:{\"msg\":\"[umberlog test] testing ... 1, 2, 
>>>>> 3\\n\",\"count\":\"2\",\"el.0.type\":\"
>>>>> ladybug\",\"el.0.name\":\"natalie\",\"el.0.spots\":\"12\",\"el.1.type\":\"ant\",\"el.1.name\":\"B289
>>>>> \",\"el.1.role\":\"worker\",\"el.1.age\":\"9\",\"pid\":\"4440\",\"facility\":\"user\",\"priority\":\
>>>>> "warn\",\"uid\":\"1002\",\"gid\":\"1002\",\"host\":\"dboles-victim-0\",\"program\":\"\",\"timestamp\
>>>>> ":\"2015-06-08T16:28:12.877502675-0400\"}", "rawmsg": "<12>Jun  8 
>>>>> 16:28:12 : @cee:{\"msg\":\"[umberl
>>>>> og test] testing ... 1, 2, 
>>>>> 3\\n\",\"count\":\"2\",\"el.0.type\":\"ladybug\",\"el.0.name\":\"natalie\
>>>>> ",\"el.0.spots\":\"12\",\"el.1.type\":\"ant\",\"el.1.name\":\"B289\",\"el.1.role\":\"worker\",\"el.1
>>>>> .age\":\"9\",\"pid\":\"4440\",\"facility\":\"user\",\"priority\":\"warn\",\"uid\":\"1002\",\"gid\":\
>>>>> "1002\",\"host\":\"dboles-victim-0\",\"program\":\"\",\"timestamp\":\"2015-06-08T16:28:12.877502675-
>>>>> 0400\"}", "timereported": "2015-06-08T16:28:12.877616-04:00", "hostname": 
>>>>> "dboles-victim-0", "syslog
>>>>> tag": ":", "inputname": "imuxsock", "fromhost": "dboles-victim-0", 
>>>>> "fromhost-ip": "127.0.0.1", "pri"
>>>>> : "12", "syslogfacility": "1", "syslogseverity": "4", "timegenerated": 
>>>>> "2015-06-08T16:28:12.877616-0
>>>>> 4:00", "programname": "", "protocol-version": "0", "structured-data": 
>>>>> "-", "app-name": "", "procid":
>>>>> "-", "msgid": "-", "uuid": null, "$!": { "msg": "[umberlog test] testing 
>>>>> ... 1, 2, 3\n", "count": "
>>>>> 2", "el.0.type": "ladybug", "el.0.name": "natalie", "el.0.spots": "12", 
>>>>> "el.1.type": "ant", "el.1.na
>>>>> me": "B289", "el.1.role": "worker", "el.1.age": "9", "pid": "4440", 
>>>>> "facility": "user", "priority":
>>>>> "warn", "uid": "1002", "gid": "1002", "host": "dboles-victim-0", 
>>>>> "program": "", "timestamp": "2015-0
>>>>> 6-08T16:28:12.877502675-0400" } }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ________________________________________
>>>>> From: [email protected] 
>>>>> [[email protected]] on behalf of David Lang 
>>>>> [[email protected]]
>>>>> Sent: Monday, June 01, 2015 5:06 PM
>>>>> To: rsyslog-users
>>>>> Subject: Re: [rsyslog] Unable to use foreach
>>>>>
>>>>> On Sun, 24 May 2015, David Boles (dboles) wrote:
>>>>>
>>>>>> Thanks Rainer / David,
>>>>>>
>>>>>> Based on Rainer's input I've pivoted to going down the mmexternal path 
>>>>>> and have questions based on experimenting with that.
>>>>>>
>>>>>> To answer David's "what are you trying to do" question and make things 
>>>>>> as simple and concrete as possible I've created a clean example (log 
>>>>>> entry generator, rsyslog configuration, mmexternal plugin, etc.) that 
>>>>>> captures what I'm trying to do. To avoid pasting a bunch of stuff into 
>>>>>> these emails I set up a git repo with the example at:
>>>>>>
>>>>>>    https://github.com/davidboles/snowflake.git
>>>>>>
>>>>>> The README.md explains the elements of that repo. I have the following 
>>>>>> questions:
>>>>>>
>>>>>> (1) The generated result does not have the { "hostname" : "frodo" } 
>>>>>> anywhere
>>>>>> in it. The docs say that I can add elements to the JSON elements of the
>>>>>> message, although that sentence is ambiguous as to whether I can do so 
>>>>>> if I
>>>>>> haven't modified some other element.
>>>>>
>>>>> sorry for the delay in responding
>>>>>
>>>>> in rsyslog, you don't have many elements. There are only a handful of 
>>>>> built-in
>>>>> properties and then everything else is in $!
>>>>>
>>>>> so if you want to modify anything in $!, you must output a completely new 
>>>>> $!
>>>>> string (which is the JSON representation of the tree.
>>>>>
>>>>> If you are wanting to add a new item "elements", that means that you are 
>>>>> going
>>>>> to modify the $! variable to include your new element.
>>>>>
>>>>> the section talking about "if you modify the message variable tree" is 
>>>>> saying
>>>>> that if you don't change $!, you can't add new variables, because all 
>>>>> variables
>>>>> are inside of $!.
>>>>>
>>>>> although, since this talks about the inability to delete things, it may 
>>>>> be that
>>>>> what you output is merged with what's already in $!. I'd have to test 
>>>>> this (see
>>>>> how to test below)
>>>>>
>>>>>> (2) If I uncomment the template line (line 20 of build.conf) then syslog
>>>>>> SEGV's. How do I access the jsonmesg content after getting stuff back 
>>>>>> through
>>>>>> mmexternal?
>>>>>
>>>>> it's not line 20 in the currently visible file, but the best way to 
>>>>> troubleshoot
>>>>> "how do I access blah" is to write a file with the format 
>>>>> RSYSLOG_DebugFormat
>>>>> and it will show you all the variables that are defined at that point. In 
>>>>> a
>>>>> situation like yours where you are doing multiple parse actions, it will 
>>>>> show
>>>>> you the variables as of that point in the processing.
>>>>>
>>>>> so, to see how to access the variables that were set with mmexternal, 
>>>>> after that
>>>>> action add another one
>>>>> /var/log/test-debug;RSYSLOG_DebugFormat
>>>>>
>>>>> and then look at the $!: line in that debug output. It will show you 
>>>>> exactly
>>>>> what variables are defined at that point.
>>>>>
>>>>> I suspect that what you are outputting doesn't quite match
>>>>>
>>>>>> (3) The field "MUTABLE" has the value "Alpha" in the input to the 
>>>>>> mmexternal
>>>>>> unit (I can see it in /tmp/rewriter.trace entries). What JSON should my
>>>>>> rewriter.py emit to cause that to be rewritten to "Beta"?
>>>>>
>>>>> I think it would be useful for you to show what the string is that 
>>>>> rewriter.py
>>>>> receives, what it outputs, and what the resulting debug is. I think that 
>>>>> will
>>>>> make it pretty obvious as to what's happening
>>>>>
>>>>> David Lang
>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> David Boles
>>>>>>
>>>>>>
>>>>>>
>>>>>> ________________________________________
>>>>>> From: [email protected] 
>>>>>> [[email protected]] on behalf of Rainer Gerhards 
>>>>>> [[email protected]]
>>>>>> Sent: Friday, May 22, 2015 5:05 PM
>>>>>> To: rsyslog-users
>>>>>> Subject: Re: [rsyslog] Unable to use foreach
>>>>>>
>>>>>> External plugin interface:
>>>>>> https://github.com/rsyslog/rsyslog/blob/master/plugins/external/INTERFACE.md
>>>>>>
>>>>>> Overview :
>>>>>> https://github.com/rsyslog/rsyslog/blob/master/plugins/external/README.md
>>>>>>
>>>>>> Sent from phone, thus brief.
>>>>>> _______________________________________________
>>>>>> 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.
>>>>>
>>>> _______________________________________________
>>>> 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.
>>>
>>>
>>>
>>> --
>>> Regards,
>>> Janmejay
>>> http://codehunk.wordpress.com
>>
>>
>>
>> --
>> Regards,
>> Janmejay
>> http://codehunk.wordpress.com
>
>
>
> --
> Regards,
> Janmejay
> http://codehunk.wordpress.com
> _______________________________________________
> 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