I receive syslog messages as follows:
[nms321@uhp.1.3.6.1.4.1.8000.10 net_id="325" station="431" fault="16384"] [NotificationHandler] NMS error: STCRC/NOTTS Net: Enas Station: CED Elmas serial-num: 11347
Without Python parser, I correctly receive logs.
Now, I need to extract some values from the above MESSAGE and I configured syslog-ng.conf as follows:
source s_network {
udp();
tcp();
};
python {
import re
class SngRegexParser(object):
def init(self, options):
pattern = options["regex"]
self.regex = re.compile(pattern)
self.counter = 0
return True
def deinit(self):
pass
def parse(self, log_message):
decoded_msg = log_message['MESSAGE'].decode('utf-8')
match = self.regex.match(decoded_msg)
if match:
for key, value in match.groupdict().items():
log_message[key] = value
log_message['MY_COUNTER'] = str(self.counter)
self.counter += 1
return True
return False
};
parser my_python_parser{
python(
class("SngRegexParser")
options("regex", "station: (?P<station>\\d+), error: (?P<error>\\d+), Net: (?P<Net>\\d+), Station: (?P<Station>\\d+), serial-num: (?P<serial-num>\\d+) (?P<padding>.*$)")
);
};
destination d_file { file("/var/log/app_network.log"); };
destination d_mysql {
sql(
type(mysql)
host ("127.0.0.1")
username("USER")
password("PASSWORD")
database("syslog")
table("logs")
columns("host", "facility", "priority", "datetime", "program", "msg", "StNum", “Error”, “Network”, “StName”, “Serial”)
values("${HOST}", "${FACILITY_NUM}", "${LEVEL_NUM}", "${R_YEAR}-${R_MONTH}-${R_DAY} ${R_HOUR}:${R_MIN}:${R_SEC}", "${PROGRAM}", "${MSGONLY}", "${station}", "${error}", "${Net}", "${Station}", "${serial-num}")
indexes("host", "program", "datetime", "facility", "priority")
null("")
);
};
log { source(s_local); source(s_network); parser(my_python_parser); destination(d_file); destination(d_mysql); };
But after reloading of Syslog-NG, I don't receive any log and Syslog-NG status shows this error:
Error initializing new configuration, using the old config
What is wrong?
Thank you guys