Rsyslog8 вместо Syslog (FreeBSD)

Есть задача: собирать лог-файлы даленных web-серверов для последующей их обработки Awstats. Например, нас интересуют лог-файлы сервера 10.0.10.5 Лучше всего для этого подходит Rsyslog.

Для этого почитаем источники (ссылка 1, ссылка 2). Начнем устанавливать нужный пакет, предварительно обновив пакеты:

# pkg update -f

# pkg upgrade

# pkg search rsyslog

# pkg install rsyslog

Правим /etc/rc.conf:

syslogd_enable="NO"

rsyslogd_enable="YES"

rsyslogd_config="/etc/syslog.conf"

Далее создаем папку /var/log/rsyslog, куда и планируем помещать все получаемые лог-файлы.

Сохраняем где-нибудь копию /etc/syslog.conf и переделываем данный файл для работы с rsyslog:

#==MODULES======

$ModLoad imuxsock

$ModLoad imklog

$ModLoad imudp

$UDPServerRun 514

#$ModLoad imtcp

$ModLoad lmregexp

#==DIRECTIVES==

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$FileOwner root

$FileGroup wheel

$FileCreateMode 0640

$DirCreateMode 0755

$Umask 0022

$WorkDirectory /var/log/rsyslog

$AllowedSender UDP,10.0.10.5

$template RemoteLogs,"/var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log"

*.* ?RemoteLogs

& ~

#==OLD=============================================

*.err;kern.warning;auth.notice;mail.crit /dev/console

mail.info /var/log/maillog

ftp.info /var/log/xferlog

cron.* /var/log/cron

*.emerg *

!ppp

*.* /var/log/ppp.log

!*

Для того, чтобы можно было по 514 порту получать лог-файлы от удаленного сервера 10.0.10.5 необходимо провести ряд манипуляций на этом удаленном сервере.

Используем самый простой вариант: напрямую apache будет транслировать сразу нашему серверу Rsyslog. Для этого в httpd.conf прописываем следующую строку:

CustomLog "| /usr/bin/nc -u rsyslogd.server.ip.address 514" combined

Необходимо проверить работу данного сервиса: /usr/sbin/rsyslogd -nd -f "/etc/syslog.conf"

Потом необходимо остановить этот процесс: # killall rsyslog

Все работает нормально, необходимо перезагрузить машину и смотреть, что получаем в итоге.

После перезагрузки все нормально:

В /var/log/rsyslog видим 3 папки: а)www-main — лог-файлы сервера 10.0.10.5 б) Log — лог-файлы (служебные) работы rsyslog в) myserver — папка локального сервера, куда складываются лог-файлы работы данного сервера (см.рис.1).

Рисунок 1. Состав лог-файлов rsyslog локального сервера.

Теперь необходимо подготовить данные файлы к обработке Awstats, поскольку если просто попробовать обработать их, то выдается ошибка, что формат файла не соответствует формату Apache или идет очень странный подсчет веб-статистики: будто бы всегда 1 уникальный адрес и 1 визит формирует всю массу просмотров страниц и обращений к сайту. Это, конечно, не может быть так.

Смотрим получившийся лог-файл (/var/log/rsyslog/www-main/www.access.log), видим записи такого вида:

Aug 12 11:15:38 www-main 109.123.173.117 — — [12/Aug/2019:11:15:42 +0700] «GET <далее стандартный запрос>»

Выделенный текст добавлен Rsyslogd, эта часть и мешает правильно обработать Awstats. Следовательно, нужно настроить предобработку файла — убрать в каждой строке избыточную информацию Rsyslog. Изучаем вопрос, по имеющимся источникам (ссылка 1, ссылка 2) формируем скрипт предобработки лог-файла следующего вида:

!/bin/sh

/usr/local/etc/rc.d/rsyslogd stop

mv /var/log/rsyslog/www-main/www.access.log /opt/www/www.'date +%Y%m%d‘.log

/usr/bin/sed -re ‘s:.www-main\s(.):\1:’ /opt/www/www.'date +%Y%m%d‘.log > /opt/www/test.log [Выражение 1]

/bin/rm /opt/www/www.’date +%Y%m%d‘.log

/usr/bin/sed ‘s/^[ \t]//’ /opt/www/test.log > /opt/www/www.’date +%Y%m%d‘.log [Выражение 2]

chown -R den:wheel /opt/www
/usr/local/etc/rc.d/rsyslogd start
exit

Сначала в данном скрипте избавляемся(в каждой строчке) от всего, что стоит до регулярного выражения www-main (включая и его самого) [Выражение 1] . Затем убираем пробелы и знаки табуляции в начале строк [Выражение 2]. Получаем такой файл (/opt/www/www.текущая_дата.log), в котором все строки такого вида:

109.123.173.117 — — [12/Aug/2019:11:15:42 +0700] «GET <далее стандартный запрос>»

Такой формат файла при обработке проблем не вызовет и Awstats подсчитает все правильно.

Удачи!