Logstalgia - это софт с помощью которого можно визуализировать логи веб сервера. Логи можно читать как из файла, так и из STDIN.
Так же можно подсунуть logstalgia любые другие логи если переделать их под определенный формат.
Смотреть интересно только на аномалии или высоконагруженные системы.
Кастомный формат логов хорошо описан тут - https://github.com/acaudwell/Logstalgia/wiki/Custom-Log-Format
Под формат logstalgia можно, например, переделать логи Juniper SRX и смотреть на пакеты которые были дропнуты фильтром.
Отформатированные логи фильтра srx должны быть в таком виде:
1501723466|180.253.138.106|tcp:445|xxx.yyy.zzz.172|1024 1501723466|103.66.21.184|tcp:23|xxx.yyy.zzz.49|1024 1501723467|201.172.206.24|tcp:23|xxx.yyy.zzz.42|1024 1501723467|200.75.150.70|udp:5060|xxx.yyy.zzz.168|1024
здесь,
Рассмотрим как переделать логи фильтра srx.
Логи пакетов, которые были дропнуты, снимаются с “закрывающего” правила DENY-ANY.
root@srx> show configuration firewall family inet filter ACL-OUTSIDE-IN interface-specific; ... term DENY-ANY { then { count C-D-ANY; log; syslog; discard; } }
SRX (JUNOS Software Release [12.1R3.5]) на syslog сервер отправляет логи фильтра в следующем формате:
Aug 19 23:10:01 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D igmp xxx.yyy.zzz.199 224.0.0.2 0 0 (1 packets) Aug 19 23:10:03 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D igmp 10.1.176.185 224.0.0.2 0 0 (1 packets) Aug 19 23:10:07 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D tcp 220.132.253.42 xxx.yyy.zzz.201 51446 23 (1 packets) Aug 19 23:10:10 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D igmp 10.42.166.22 224.0.0.2 0 0 (1 packets) Aug 19 23:10:10 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D tcp 201.137.235.42 xxx.yyy.zzz.201 16364 2323 (1 packets) Aug 19 23:10:18 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D tcp 220.132.253.42 xxx.yyy.zzz.201 51446 23 (1 packets) Aug 19 23:10:19 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D tcp 220.132.253.42 xxx.yyy.zzz.201 51446 2323 (1 packets) Aug 19 23:10:21 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D igmp 10.42.166.22 224.0.0.2 0 0 (1 packets) Aug 19 23:10:23 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/0.0 D igmp xxx.yyy.zzz.199 224.0.0.2 0 0 (1 packets)
Эти логи надо переделать в формат 1501723467|200.75.150.70|udp:5060|xxx.yyy.zzz.168|1024.
Переделывать будет с помощью awk:
Целиком команда будет выглядеть так:
cat srx-firewall.log | awk -F' ' '{print $1" "$2" "$3"|"$11"|"$10":"$14"|"$12"|"1024}' | awk -F'|' -v OFS='|' '$1 {convert_to_unix_time="date -d \""$1"\" +%s"; convert_to_unix_time | getline $1; close(convert_to_unix_time)} 1' > logstalgia-srx-firewall.log
На выходе получим желаемый формат.
1503173401|xxx.yyy.zzz.199|igmp:0|224.0.0.2|1024 1503173403|10.1.176.185|igmp:0|224.0.0.2|1024 1503173407|220.132.253.42|tcp:23|xxx.yyy.zzz.201|1024 1503173410|10.42.166.22|igmp:0|224.0.0.2|1024 1503173410|201.137.235.42|tcp:2323|xxx.yyy.zzz.201|1024 1503173418|220.132.253.42|tcp:23|xxx.yyy.zzz.201|1024 1503173419|220.132.253.42|tcp:2323|xxx.yyy.zzz.201|1024 1503173421|10.42.166.22|igmp:0|224.0.0.2|1024 1503173423|xxx.yyy.zzz.199|igmp:0|224.0.0.2|1024
Подробнее разберем команду.
cat srx-firewall.log | awk -F' ' '{print $1" "$2" "$3"|"$11"|"$10":"$14"|"$12"|"1024}'
На содержимое файла srx-firewall.log натравливаем awk. Разделитель полей задаем в виде пробела (-F' ') и печатаем нужные нам поля.
Промежуточный результат:
Aug 19 23:10:01|xxx.yyy.zzz.199|igmp:0|224.0.0.2|1024 Aug 19 23:10:03|10.1.176.185|igmp:0|224.0.0.2|1024 Aug 19 23:10:07|220.132.253.42|tcp:23|xxx.yyy.zzz.201|1024 Aug 19 23:10:10|10.42.166.22|igmp:0|224.0.0.2|1024 Aug 19 23:10:10|201.137.235.42|tcp:2323|xxx.yyy.zzz.201|1024 Aug 19 23:10:18|220.132.253.42|tcp:23|xxx.yyy.zzz.201|1024 Aug 19 23:10:19|220.132.253.42|tcp:2323|xxx.yyy.zzz.201|1024 Aug 19 23:10:21|10.42.166.22|igmp:0|224.0.0.2|1024 Aug 19 23:10:23|xxx.yyy.zzz.199|igmp:0|224.0.0.2|1024
После нам надо перегнать дату в unix тайм.
Переводить дату в секунды будем командой date.
kostya@aee3:~$ date -d "Aug 19 23:10:01" Сб авг 19 23:10:01 MSK 2017 kostya@aee3:~$ date -d "Aug 19 23:10:01" +%s 1503173401
Команду date будем запускаем внутри выражения awk.
awk -F'|' -v OFS='|' '$1 {convert_to_unix_time="date -d \""$1"\" +%s"; convert_to_unix_time | getline $1; close(convert_to_unix_time)} 1'
На данном этапе дата, передаваемая в awk, состоит не из трех полей разделяемых пробелом, а находится в первом поле с разделителем “|”
Запускаем awk с новым разделителем на входе (-F'|') и задаем выходной разделитель (-v OFS='|').
Переменной convert_to_unix_time присваеваем команду date -d \““$1”\” +%s и в эту команду, с помощью функции getline, построчно передаем значения поля №1.
Когда файл закончится, getline вернет 0 и функция close() прекратит выполнение “команды” convert_to_unix_time.
После фигурных скобок надо поставить любое число кроме нуля. Зачем не очень понял, но если поставить ноль или ничего не поставить, то на выходе будет пусто.
Все ключи хорошо описаны в man logstalgia.
Запускать визуализацию лога srx будем командой
logstalgia -800x640 -x --no-bounce -g "TCP,URI=tcp,40" -g "UDP,URI=udp,40" -g "ICMP,URI=icmp,10" -g "OTHER,URI=[^(icmp|igmp)],10" logstalgia-srx-firewall.log
где,