LINUX.ORG.RU
ФорумAdmin

Rsyslog парсинг CEF логов и занесение в БД

 


0

1

Доброго времени суток! Задача в общем смысле стоит следующем - принимать логи в CEF формате и заносить в бд, но ещё до сохранения в БД возникают проблемы. При приёме и сохранении в файл как RemoteLogs стандартным способом -

$template RemoteLogs,«/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log» . ?RemoteLogs & stop

Rsyslogd видимо применяет встроенный шаблон парсинга и сохраняет вот в таком виде(обрезал с конца)

2025-12-01T15:38:07-05:00 RIO-DZ-16-N1 CEF: 0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10|devId=55567 start=1764592626000

То есть он парсит участок «CEF:» видимо как %syslogtag% и вставляет пробел после него. Если эту строку скормить нормализатору как

tail -n 1 ./CEF.log | lognormalizer -e json -r cef2.rb | jq .

где cat cef2.rb

rule=:%date:date-rfc5424% %host:word% %f:cef%%

то выдаёт следующее

{ "originalmsg": "2025-12-01T15:38:07-05:00 RIO-DZ-16-N1 CEF: 0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10|devId=55567 start=1764592626000", "unparsed-data": "CEF: 0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10|devId=55567 start=1764592626000" }

Если вручную удалить пробел между CEF: и 0 то выдаёт уже нормально

"f": { "DeviceVendor": "R&K", "DeviceProduct": "DEZ7000 V2", "DeviceVersion": "2.3.4-55", "SignatureID": "16", "Name": "Opisanie signatury etc", ...

Пробовал прописывать в ruleset

action(type="mmnormalize" rulebase="cef2.rb") action(type="omfile" file="/var/log/debugcef" template="cefdebug")

но там такая же история - пустые переменные :( Видимо ещё до модуля mmnormalize в каком то input module вставляется этот пробел и весь парсинг CEF идёт на смарку. Проверял в дампе входящего трафика и там между CEF: и 0 пробела нет! Уважаемые гуру rsysloga! Есть ли у кого опыт заставить rsyslog принимать CEF логи корректно? Вручную же через lognormalizer всё раскладывается успешно!



Последнее исправление: Slot (всего исправлений: 1)

Я не настоящий сварщик, но по моему личному опыту в rsyslog всегда какая-то наркомания в конфигах, а в syslog-ng можно легко нарулить всё что хочется, любые хитрые парсеры, перенаправления, запись в базу и т.д.

annulen ★★★★★
()
Ответ на: комментарий от annulen

С «наркомания в конфигах» согласен. Но всё же хотелось бы добить вопрос и чувствую что решение близко - надо то заставить НЕ делать :) Сейчас попробовал

action(type="mmnormalize" useRawMsg="on" rulebase="/etc/rsyslog.d/cef2.rb")

не помогло - всё равно начало строки парсит

Debug line with all properties:
FROMHOST: '1.1.1.1', fromhost-ip: '1.1.1.1', HOSTNAME: 'RIO-DZ-16-N', PRI: 38,
syslogtag 'CEF:', programname: 'CEF', APP-NAME: 'CEF', PROCID: '-', MSGID: '-',
TIMESTAMP: 'Dec  1 15:38:07', STRUCTURED-DATA: '-',
msg: '0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10| ...'
inputname: imudp rawmsg: '<38> 2025-12-01T15:38:07-05:00 RIO-DZ-16-N1 CEF: 0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10| ...'
$!:{ "originalmsg": "<38> 2025-12-01T15:38:07-05:00 RIO-DZ-16-N1 CEF: 0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10|... }
Slot
() автор топика
Ответ на: комментарий от annulen

Так стоп. Не правильно посмотрел логи в дебагформате. Пишет же вот так.

FROMHOST: '1.1.1.1', fromhost-ip: '1.1.1.1', HOSTNAME: 'RIO-DZ-16-N', PRI: 38,
syslogtag 'CEF:', programname: 'CEF', APP-NAME: 'CEF', PROCID: '-', MSGID: '-',
TIMESTAMP: 'Dec  1 15:38:07', STRUCTURED-DATA: '-',
msg: '0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10| ...'
escaped msg: '0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10| ...'
inputname: imudp rawmsg: '<38> Dec 03 17:04:33 RIO-DZ-16-N1 CEF:0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10| ...'
$!:{ "originalmsg": "<38> Dec 03 17:04:33 RIO-DZ-16-N1 CEF:0|R&K|DEZ7000 V2|2.3.4-55|16|Opisanie signatury etc|10| ...'
$.:
$/:

То есть rawmsg и originalmsg БЕЗ пробела! Но парсить как CEF он всё равно не хочет :(

Slot
() автор топика