Table of Contents

Работа с Logstalgia

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

здесь,

Логи Juniper SRX

Рассмотрим как переделать логи фильтра 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:

  1. Из исходных логов вырезать и напечатать нужные поля.
    • Aug 19 23:10:19 - первые три поля, вытаскиваем время и переделываем в unix тайм.
    • 220.132.253.42 - поле №11, адрес источника.
    • tcp - поле №10, протокол.
    • 2323 - поле №14, номер порта.
    • xxx.yyy.zzz.201 - поле №12, адрес назначения.
    • 1024 - обязательное поле.
  2. Между полями вставить разделтель “|”.
  3. Дату и время лога перевести в секунды.

Целиком команда будет выглядеть так:

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


Запуск logstalgia

Все ключи хорошо описаны в 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 

где,

Результат работы команды:


Полезные ссылки