Logs are just data… Processed and analyzed, they become information.
Задача: централизованный сбор и хранение логов используя базовые возможности оборудования Cisco Systems, операционной системы FreeBSD и стандарт syslog.
В отличие от наиболее часто предлагаемого в интернете варианта – складывать все логи в один файл, мы будем придерживаться лозунга “каждой железке по собственному логу”. Полагаю, не стоит объяснять плюсы от такого решения, потому что только плюсы здесь и наблюдаются.
В базовом комплекте FreeBSD идёт демон который полностью удовлетворит задачу – syslogd, с настройки него и начнём.
Этап 1: разбираемся с локальными логами
Так как машина полностью отдана под логирование, стандартные настройки
1 2 3 4 5 6 7 8 9 10 11 |
*.err /dev/console *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security auth.info;authpriv.info /var/log/auth.log mail.info /var/log/maillog lpr.info /var/log/lpd-errs ftp.info /var/log/xferlog cron.* /var/log/cron *.=debug /var/log/debug.log *.emerg * console.info /var/log/console.log |
можно заменить на
1 |
*.* /var/log/all.log |
таким образом все локальные логи будут собираться в один файл – /var/log/all.log
Этап 2: настройка обработки логов для первого сетевого устройства
Мы будем различать наши устройства по IP-адресам и каждая секция конфигурационного файла будет начинаться с указания онного
Если мы хотим чтобы все syslog-сообщения с устройства 10.0.1.12 сохранялись в файл /var/log/sw0.log, то в файле это будет выглядеть так
1 2 |
+10.0.1.12 *.* /var/log/switch0.log |
аналогично и строка для ещё одного хоста
1 2 |
+10.0.1.13 *.* /var/log/router1.log |
В этом месте есть одна важная деталь: та строчка в которой мы разобрались с локальными логами, включает и все указанные нами хосты, таким образом все события будут дублироваться в файле /var/log/all.log. Это легко исправить добавив
1 |
+@ |
перед
1 |
*.* /var/log/all.log |
Итоговый файл будет выглядеть так
1 2 3 4 5 6 |
+@ *.* /var/log/all.log +10.0.1.12 *.* /var/log/switch0.log +10.0.1.13 *.* /var/log/router1.log |
Сохраняем файл и пока можем о нём забыть.
Этап 3: настройка демона
- демон syslogd по умолчанию запускается при старте системы, однако принимает только локальные события благодаря ключу -s указанному в /etc/default/rc.conf, нам следует это изменить убрав данный ключ из списка флагов в файле /etc/rc.conf
- с помощью ключа “-a” ограничим список хостов которым позволено направлять нам сообщения о событиях
- ключом “-C” укажем что хотим чтобы файлы логов создавались демоном (права на файл будут 0600)
- указываем ключ -T, если хотим добавлять к каждому сообщению о событии локальное время хоста на котором запущен syslogd
В итоге строка которую надо добавить в /etc/rc.conf будет выглядеть так:
1 |
syslogd_flags="-a 10.0.1.0/25:\* -С -T" |
и перезапустить демон
1 |
/etc/rc.d/syslogd restart |
Отлично, на FreeBSD у нас всё готово, теперь можно переместиться на Cisco.
Минимальная настройка выглядит следующим образом:
1 2 |
switch0(config)# logging 10.0.1.10 switch0(config)# logging trap switch0 |
В результате чего события уровня notice и выше будут отсылаться на хост 10.0.1.10
Убедится в этом можно административно опустив и подняв интерфейс на switch0, параллельно наблюдая файл /var/log/switch0.log
1 2 3 4 |
tail -f /var/log/switch0.log Jul 6 15:41:44 10.0.1.12 331: Jul 6 15:41:43: %LINK-5-CHANGED: Interface FastEthernet0/24, changed state to administratively down Jul 6 15:42:24 10.0.1.12 332: Jul 6 15:42:23: %LINK-3-UPDOWN: Interface FastEthernet0/24, changed state to down Jul 6 15:42:30 10.0.1.12 333: Jul 6 15:42:29: %SYS-5-CONFIG_I: Configured from console by sk1f3r on vty0 (10.0.1.5) |
Обратите внимание что в каждой строке дата указывается дважды. Это происходит потому что syslogd по умолчанию сам добавляет в начале каждого сообщения временную метку и помимо этого switch0 благодаря
1 2 |
service timestamps debug datetime msec service timestamps log datetime localtime |
делает то же самое. Я предпочитаю timestamp syslogd, как более детальный, поэтому указываю
1 |
no service timestamps |
на стороне cisco.
Есть ещё некоторое количество настроек относительно logging, например указание интерфейса, с которого следует слать сообщения, но в нашем случае это не важно.
Осталось настроить ротацию логов на FreeBSD, в файле /etc/newsyslog.conf
Рассмотрим на примере лога all.log строчки из этого файла
1 |
/var/log/all.log 600 12 * $M1D0 JC |
- /var/log/all.log – имя файла которому необходима ротация;
- 600 – какие назначить права на файл после его ротации, в данном случае “rw- — —“;
- 12 – ограничение на количество ротаций данного файла, в данном случае 12 (двенадцать);
- * – ограничение по размеру файла, как причина для его ротации, в данном случае размер файла не является причиной для его ротации;
- $M1D0 – условие указывающее когда производить ротацию файла используя либо интервал, либо точное время, либо оба. Используются форматы ISO 8601 и MIT time (Day, week, and month), в данном случае указано делать ротацию каждый первый день каждого месяца (в MIT time);
- JC – дополнительные флаги, благодаря которым можно проделывать некоторые операции с ротационными файлами, в данном случае файл подвергшийся ротации будет сжат с помощью bzip2 (J) и создан новый (C).
Будем придерживаться этой схемы и для не локальных логов хранить сжатые ротационные архивы в течение 6 месяцев, выполняя ротацию в начале первого дня каждого месяца, таким образом их количество составит не более 6 штук.
Наши изменения в файле /etc/newsyslog.conf
1 2 3 |
/var/log/all.log 600 12 * $M1D0 JC /var/log/switch0.log 600 6 * $M1D0 JC /var/log/router1.log 600 6 * $M1D0 JC |
Перезапускаем newsyslog
1 |
/etc/rc.d/newsyslog restart |
и дело сделано.