<div dir="auto">Well, you could either remove the unnecessary field using a regexp but that's pretty fragile (due to escaping and stuff).<div dir="auto"><br></div><div dir="auto">Or, you can reformat the message using the $(format-json) template function which can recreate the original json, but now with the "payload" field removed.</div><div dir="auto"><br></div><div dir="auto">$(format-json) even has an --exclude option, meaning it can remove a field without having to explicitly unset it.</div><div dir="auto"><br></div><div dir="auto">Bazsi</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 24, 2020, 00:18 Nirgil <<a href="mailto:nirgil@honeynet.cz">nirgil@honeynet.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello all,<br>
<br>
sorry to bother you, but I'm bit lost ;]<br>
<br>
<br>
<br>
Trying to accomplish the following:<br>
<br>
Have a JSON inside syslog message and I need to rewrite, or better to<br>
remove, one selected particular field, it contains lot of data and I<br>
just want to drop this one field before forwarding to different destination.<br>
<br>
I have created a parser for JSON:<br>
<br>
parser p_json {<br>
<br>
        channel {<br>
                parser {<br>
                        json-parser (prefix(".json."));<br>
                };<br>
        };<br>
};<br>
<br>
<br>
Now I need remove or change a JSON field, lets say payload.<br>
<br>
<br>
So I created the following rewrite rule and tried multiple options to<br>
remove or change the content<br>
<br>
rewrite {<br>
        unset(value("${.json.payload}"));<br>
        unset(value(".json.payload"));<br>
        groupunset(values("${.json.payload}"));<br>
        set("TEST", value(".json.payload"));<br>
};<br>
<br>
This is working on default fields ${HOST}, etc, but not for JSON fields.<br>
<br>
<br>
Message can be reformatted via template ie:<br>
<br>
template json_template {<br>
<br>
        template("${DATE} ${HOST} $PROGRAM: {\"payload\"\:\""${.json.payload}"\"}")<br>
<br>
<br>
};<br>
<br>
In that case, json.payload can be affected by appropriate rewrite rule.<br>
<br>
But I'd like to affect the json.payload field inside the original ${MSG}<br>
without re-formatting whole message via custom template, because the<br>
original message has lot of optional fields, other inner JSON's and it<br>
is not so simple to made an universal template for this.<br>
<br>
<br>
<br>
template json_template {<br>
<br>
        template("${DATE} ${HOST} $PROGRAM: ${MSG}")<br>
<br>
};<br>
<br>
<br>
Is there a way how to remove JSON field from original message (${MSG})<br>
without reformatting the whole message via custom template ?<br>
<br>
<br>
Thanks for any thoughts !<br>
<br>
<br>
Sample of Message:<br>
<br>
<br>
Sep 23 15:22:48 hostname myapplication:<br>
{"payload":"verylongpayload","field1":"value",.."lot of other fields,<br>
included inner JSON"...}<br>
______________________________________________________________________________<br>
Member info: <a href="https://lists.balabit.hu/mailman/listinfo/syslog-ng" rel="noreferrer noreferrer" target="_blank">https://lists.balabit.hu/mailman/listinfo/syslog-ng</a><br>
Documentation: <a href="http://www.balabit.com/support/documentation/?product=syslog-ng" rel="noreferrer noreferrer" target="_blank">http://www.balabit.com/support/documentation/?product=syslog-ng</a><br>
FAQ: <a href="http://www.balabit.com/wiki/syslog-ng-faq" rel="noreferrer noreferrer" target="_blank">http://www.balabit.com/wiki/syslog-ng-faq</a><br>
<br>
</blockquote></div>