Когда у вас целая ферма серверов, то обслуживать их достаточно сложно. И если вам нужно посмотреть логи с какого-то сервера, то приходится заходить на него и смотреть. А если нужно посмотреть не на одном, а на 10? Такой процесс получается изнурительным. В данной статье будет рассмотрена возможность сбора логов с Windows серверов (а так же можно и *nix) и запись их в единую базу, из которой потом можно посмотреть.
Тестовый стенд: FreeBSD (сервер сбора логов), Windows 2003/2008 (клиенты)
1) Установка и настройка серверной части.
Полностью установка описана здесь, ниже приведу лишь конфиг rsyslog:
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark
$ModLoad ommysql
$ModLoad imudp
$UDPServerAddress 10.1.5.5
$UDPServerRun 10514
$ModLoad ommail
$ActionOmmysqlServerPort "/tmp/mysql.sock"
if ( $syslogseverity-text =='warning' or $syslogseverity-text =='err' or $syslogseverity-text =='crit' or $syslogseverity-text =='alert' or $syslogseverity-text =='emerg' ) then :ommysql:localhost,rsyslog_DB,rsyslog_user,rsyslog_pass
*.* /var/log/remote/windows/all.log
$FileOwner root
$FileGroup wheel
$ActionMailSMTPServer 10.1.5.1
$ActionMailSMTPPort 25
$ActionMailFrom loganalyzer@domain.ua
$ActionMailTo root@domain.ua
$template mySubject1,"[%hostname%] %syslogseverity-text% "
$template myBody1,"Facility.Serverity: %syslogfacility%.%syslogpriority% at %timegenerated% on host: %HOSTNAME%\r\n %msg%"
$ActionMailSubject mySubject1
#seconds interval for mailing
#$ActionExecOnlyOnceEveryInterval 10
#expression based filter
if ($syslogseverity-text =='err'\
or $syslogseverity-text =='crit'\
or $syslogseverity-text =='alert'\
or $syslogseverity-text =='emerg' )\
then :ommail:;myBody1
В данном конфиге я настроил сбор всех логов в файл /var/log/remote/windows/all.log, а критические (warning, crit, err, alert, emerg) – будут писаться в базу. Почему так? Потому что за сутки моя база выростает на 100мб (запись всех логов с 30 серверов) и поэтому ограничился только важными сообщениями. В лог пишу всё, ибо пускай будет (всё равно ротируется каждые 10 дней). Так же повесил слушать нестандартный порт 10514, так как на 514 слушает стандартный syslogd и мне он больше нравится. Остальные параметры можно узнать из документации
2) Установка и настройка на клиентах.
Для пересылки виндовых логов существует не так много ПО. Самым удачным мне показалась программа evtsys. Почему? Потому что: она лёгкая, есть необходимый минимум и есть версии для 32/64 бита, работает как служба. Скачать её можно отсюда.
Установка и настройка достаточно проста.
– разархивируем содержимое каталога строго в папку c:\windows\system32
– запускаем консоль от имени администратора и вводим такую команду:
evtsys -i -h 10.1.5.5 -l 0 -p 10514
где 10.1.5.5 – адрес сервера сбора логов, –p – порт, -l – уровень логгирования (debug). Остальные параметры можно посмотреть в справке.
– запускаем службу evtsys
3) Loganalyzer
Установка и настройка достаточно тривиальная – просто следуйте за мастером. Здесь укажу пару важных моментов. Они связаны с кодировками. Поскольку у Windows кодировка CP1251, а у FreeBSD KOI8-R могут быть проблемы с отображением логов.
– база rsyslog’a должна иметь charset latin-1
– в настройках просмотра выбираете кодировку UTF-8
– полные права юзера от которого работает loganalyzer на базу rsyslog’a
4) Послесловие
Недавно нашёл некий аналог – ПО Splunk. Тоже умеет собирать информацию как Windows, так и с *nix. Вот отличная статья на хабре о нём http://habrahabr.ru/post/160197/