2016-11-29 12 views
0

Я хочу регистрировать входящий 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, похоже, не работает, поскольку они несовместимы.

Кто-нибудь знает, как я могу это сделать?

+1

Я предлагаю перейти от '' grep' в sed'. – Cyrus

+1

Почему вы даже используете 'nc' для удаленных функций syslog? Установите 'rsyslog' или' syslog-ng' или одну из других опций. Некоторые из них даже имеют фильтры/крючки, которые вы можете использовать для обработки того, что вы хотите сделать ... – twalberg

+0

Я просто быстро просмотрел syslog-ng, но я не могу найти какие-либо варианты переформатировать поле вывода строк. Из-за этого я могу фильтровать строки различного контента в разные файлы журнала назначения, но я не вижу, как изменить порядок полей в самой строке. Я что-то пропустил в syslog-ng? –

ответ

0

Как предложил @twalberg, теперь я использую syslog-ng.

это мой системный журнал-ng.conf:

@version: 3.7 
@include "scl.conf" 
options { 
    threaded(yes); 
    chain_hostnames(no); 
    stats_freq(43200); 
    mark_freq(3600); 
}; 
source s_udp { udp(port(514)); }; 
parser p_kv {kv-parser(prefix(".kv.")); }; 
destination d_router_file { file("/var/log/firewall_drops.csv" template("${DATE},${.kv.SRC}${.kv.PROTO},${.kv.SPT},${.kv.DPT}\n")); }; 
log { source(s_udp);parser(p_kv);destination(d_router_file); }; 

 Смежные вопросы

  • Нет связанных вопросов^_^