Я хочу регистрировать входящий syslog с моего маршрутизатора в файл. Я получаю в системный журнал сgrep несколько регулярных выражений строки
nc -l -u -p 514 > syslog.log
Поступающие линии выполнены из нескольких полей, разделенных пробелом.
Вот две полные линии отбора проб из Syslog:
<4>Nov 29 16:15:29 kernel: [ 3571.330000] DROP IN=vlan2 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=1.235.114.117 DST=1.52.79.209 LEN=337 TOS=0x00 PREC=0x00 TTL=115 ID=30831 PROTO=UDP SPT=161 DPT=220 LEN=317
<4>Nov 29 16:15:30 kernel: [ 3572.200000] DROP IN=vlan2 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=7.27.203.227 DST=122.2.79.209 LEN=64 TOS=0x00 PREC=0x00 TTL=52 ID=44018 DF PROTO=TCP SPT=5108 DPT=220 SEQ=3468909622 ACK=0 WIND
Я хочу только время, SRC, Прото, SPT, ДПТ поля в моей logifile, так что я думал, что я мог бы использовать что-то вроде этого, как тест на DST и SRC только:
nc -l -u -p 514 | egrep -o 'SRC=[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}|DST=[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' > syslog.log
Unfortatly это печатает каждое поле в новой строке, как это:
SRC=1.235.114.117
DST=1.52.79.209
SRC=7.27.203.227
DST=122.2.79.209
Затем я хочу выход глядя simmilar на это соответствующее первой строке: времени, SRC, PROTO, ДПМ, ДПТ
Nov 29 16:15:29,7.27.203.227,TCP,5108,220
Существует еще одна проблема. Иногда я получаю строки, которые не содержат поля «DS», как во второй строке образцов. Поэтому подсчет полей с разделителями awk, похоже, не работает, поскольку они несовместимы.
Кто-нибудь знает, как я могу это сделать?
Я предлагаю перейти от '' grep' в sed'. – Cyrus
Почему вы даже используете 'nc' для удаленных функций syslog? Установите 'rsyslog' или' syslog-ng' или одну из других опций. Некоторые из них даже имеют фильтры/крючки, которые вы можете использовать для обработки того, что вы хотите сделать ... – twalberg
Я просто быстро просмотрел syslog-ng, но я не могу найти какие-либо варианты переформатировать поле вывода строк. Из-за этого я могу фильтровать строки различного контента в разные файлы журнала назначения, но я не вижу, как изменить порядок полей в самой строке. Я что-то пропустил в syslog-ng? –