21 октября 2012 г.

Раскрашиваем логи и выводим их на первую консоль

Возникла у нас, двух админов, давеча на работе необходимость сделать одну штуку. А именно, организовать на паре компов динамический вывод логов в первую консоль (она же /dev/tty1). А дабы это выглядело не так скучно, захотелось, чтобы логи эти выводились в цвете.
И если первая задача довольно проста --- всего делов, исправить /etc/rsyslog.conf, то вторая уже вызвала небольшие затруднения. Но краткое гугление и использование метода научного тыка позволили эту проблему решить. И, как следствие, хочу представить вам результат.
Итак...


Задача:

Организовать вывод логов на первую (ну или любую другую) консоль, сделать так, чтобы эти логи были раскрашены, ну и, естественно, чтобы это дело срабатывало автоматически и не требовало авторизации пользователя.


Решение:

1. Раскрашиваем логи

Для этого, как оказалось, существует специальная утилита, и называется она ccze.
Как написано в её описании.
CCZE is a robust and modular log coloriser, with plugins for apm, exim, fetchmail, httpd, postfix, procmail, squid, syslog, ulogd, vsftpd, xferlog and more.

Устанавливаем её самым обычным для Debian'a способом:
# apt-get install ccze

Теперь, если возникнет необходимость вывести цветной на экран цветной лог, просто перенаправляем его на эту утилиту через конвейер:
# tail -f -n 20 /var/log/messages | ccze

Вуаля. На экране уже не скучные белые (или как там у вас настроен терминал) строчки, а "буйство красок".



2. Настраиваем rsyslog

В принципе, если вам нужно выводить что-то определённое, этот шаг можно пропустить. Нам же требовалось выводить на экран всё и вся, так что пришлось поднастроить rsyslog. На самом деле, вся настройка сводится к добавлению в файл /etc/rsyslog.conf одной строчки. Вот она, выделена оранжевым:
#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
*.*                             /var/log/messages
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

Теперь все возможные сообщения будут валиться в файл /var/log/messages.

3. Пишем скрипт 

Собственно сам скрипт крайне прост.
#!/bin/sh -e

while true
do 
        tail -f /var/log/messages | ccze >> /dev/tty1
done

Здесь мы непрерывно читаем последние строки файла /var/log/messages, перенаправляем их на ccze, а уже с него на первую консоль.
Назовём этот скрипт, например, /usr/local/bin/colorlog.
Не забываем сделать его исполняемым:
# chmod a+x /usr/local/bin/colorlog

4. Прописываем скрипт в /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
. /usr/local/bin/colorlog & 
exit 0

Вот и всё. Теперь, после перезагрузки компьютера на первую консоль начнёт сыпаться множество ярко раскрашенных сообщений обо всём, что творится с компьютером.