в debian, monitoring

Сбор и просмотр логов с помощью LogAnalyzer

loganalyzer
Порой возникает необходимость создать сервер для централизованного сбора, анализа и просмотра логов.

LogAnalyzer от Adiscon предоставляет удобный веб-интерфейс для просмотра логов, полученных с нескольких серверов — давайте разберемся с его установкой и настройкой!

Устанавливать LogAnalyzer будем на:

lsb_release -a
Distributor ID: Debian
Description:    Debian GNU/Linux 7.9 (wheezy)
Release:    7.9
Codename:   wheezy

В файле /etc/rsyslog.conf должны быть раскоментированы следующие строки:

...
$ModLoad imudp
$UDPServerAddress 192.168.0.13
$UDPServerRun 514
$AllowedSender UDP, 192.168.0.0/24
...

Примечание. В данном примере директива $UDPServerAddress определяет адрес сервера сбора логов, а директива $AllowedSender UDP список хостов, с которых разрешено принимать логи.

Перезапускаем rsyslog командой:

/etc/init.d/rsyslog restart

После этого наш сервер может принимать логи с удаленных хостов по протоколу UDP.

Устанавливаем необходимые пакеты:

aptitude install mysql-server php5-mysql libapache2-mod-php5 rsyslog-mysql

Примечание. Во время установки нужно будет ввести пароль пользователя root сервера MySQL, а также установить пароль для rsyslog-mysql.

Настройки rsyslog-mysql хранятся в файле /etc/rsyslog.d/mysql.conf и могут быть изменены с помощью текстового редактора.

По умолчанию настройки в /etc/rsyslog.d/mysql.conf выглядят так:

### Configuration file for rsyslog-mysql
### Changes are preserved

$ModLoad ommysql
*.* :ommysql:localhost,Syslog,rsyslog,password

Примечание. Syslog — имя базы, в которую будут записываться логи, rsyslog — имя пользователя этой базы, password — введенный пароль при установке rsyslog-mysql.

На серверах, с которых будем принимать логи, также редактируем файл /etc/rsyslog.conf добавляя несколько строк в секцию RULES:

###############
#### RULES ####
###############

#
# 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
daemon.*      -/var/log/daemon.log
kern.*        -/var/log/kern.log
lpr.*       -/var/log/lpr.log
mail.*        -/var/log/mail.log
auth,authpriv.*                 @192.168.0.13
user.*                          @192.168.0.13
kern.*                          @192.168.0.13

...

Примечание. Логи, поступающие в каналы auth,authpriv.*, user.* и kern.* будут передаваться по UDP на сервер 192.168.0.13. Это лишь пример возможной настройки, в каждом конкретном случае нужно самостоятельно решить какие логи вы хотите просматривать.

Не забываем перезапустить rsyslog:

/etc/init.d/rsyslog restart

Для пользователя rsyslog нужные права на базу Syslog должны быть установлены автоматически, если это не так, то подключаемся к MySQL-серверу:

mysql -u debian-sys-maint -p<пароль_суперпользователя>

и выставляем права доступа:

grant all on Syslog.* to ‘rsyslog’@’localhost’ identified by ‘password’;
Query OK, 0 rows affected (0.00 sec)

Правим конфигурационный файл /etc/apache2/sites-enabled/default, добавляя в него:

...
    Alias /loga "/var/www/loga"
...

С сайта разработчиков качаем последнюю стабильную версию LogAnalyzer:

wget http://download.adiscon.com/loganalyzer/loganalyzer-3.6.6.tar.gz

Распаковываем скачанный архив:

tar xpf loganalyzer-3.6.6.tar.gz

Рекурсивно копируем содержимое директории src в директорию /var/www/loga:

cp -R loganalyzer-3.6.6/src/* /var/www/loga

Далее переходим в каталог /var/www/loga и создаем пустой файл конфигурации (его заполнит мастер установки):

cd /var/www/loga
touch config.php
chmod 666 config.php

Далее настраиваем LogAnalyzer — открываем в браузере страницу 192.168.0.13/loga/install.php и следуем инструкциям мастера установки.

Примечание. Конечно, если у вас настроен и работает DNS-сервер, то вместо ip-адреса можно использовать имя хоста.

настройка LogAnalyzer, шаг 1

Нажимаем Next:

настройка LogAnalyzer, шаг 2

Конфигурационный файл /var/www/loga/config.php доступен для записи, жмем Next:

настройка LogAnalyzer, шаг 3

В поле Enable User Database выбираем значение Yes, после чего заполняем настройки соединения с базой данных (берем их из файла /etc/rsyslog.d/mysql.conf). После заполнения жмем Next:

настройка LogAnalyzer, шаг 4

После проверки прав доступа к базе и создания необходимых для работы LogAnalyzer таблиц, нажимаем Next и создаем пользователя с правами администратора для веб-интерфейса:

настройка LogAnalyzer, шаг 5

Далее добавляем источник логов для отображения — в поле Source Type выбираем значение MySQL Native и заполняем появившиеся поля значениями из файла /etc/rsyslog.d/mysql.conf:

настройка LogAnalyzer, шаг 6

Примечание. Обратите внимание как написано имя таблицы SystemEvents, это важно!

После нажатия кнопки Next откроется последняя страничка мастера установки:

настройка LogAnalyzer, шаг 7

Если все правильно настроено, то веб-интерфейс LogAnalyzer будет выглядеть примерно так:

настройка LogAnalyzer, финиш

Советую также залогиниться в Admin Center установленного LogAnalyzer'а и убрать галочку Use Popup to display the full message details в настройках.

На этом все, настройка сервера для централизованного сбора и просмотра логов с помощью LogAnalyzer закончена.

Добавить комментарий

14 Комментария

  1. Спасибо что помогаете.
    У меня нету в папке /etc/rsyslog.d/ файла 35-pam_unix.conf
    я его создал и добавил строчки что вы написали. После перезапуска вообще писать логи перестало =)
    Удалил из 35-pam_unix.conf 2 эти строчки и логи опять пошли.

    • Может других логов у вас в этот момент просто не было и поэтому они не отображались в логаналайзере?

      Это 100% рабочий вариант, могу прислать вам содержание своих конфигов /etc/rsyslog.d/35-pam_unix.conf и /etc/rsyslog.conf

      • У меня он собирает логи с коммутаторов. И я специально заходил на коммутатор делал разного рода действия чтоб они отобразились в LogAnalyzer.
        До того как добавляешь эти строчки там всё это пишется вперемешку с cron, когда перезапускаешь службу, в логах тоже это пишется что служба запустилась и всё такое.
        А с этими строчками вообще тишина.
        Пришлите конфиги свои если не сложно.

        • В моем случае логи с нескольких серверов (web-сервера, почтовые сервера, сервера баз данных, сервера телефонии) отсылаются на сервер с настроенным логаналайзером. Конфиги на сервере с установленным логаналайзеров выглядят так:
          1) /etc/rsyslog.conf

          #  /etc/rsyslog.conf	Configuration file for rsyslog.
          #
          #			For more information see
          #			/usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
          
          
          #################
          #### MODULES ####
          #################
          
          $ModLoad imuxsock # provides support for local system logging
          $ModLoad imklog   # provides kernel logging support (previously done by rklogd)
          #$ModLoad immark  # provides --MARK-- message capability
          
          # provides UDP syslog reception
          $ModLoad imudp
          $UDPServerAddress 192.168.0.10
          $UDPServerRun 514
          
          # provides TCP syslog reception
          #$ModLoad imtcp
          #$InputTCPServerRun 514
          
          
          ###########################
          #### GLOBAL DIRECTIVES ####
          ###########################
          $MaxMessageSize 4096
          $EscapeControlCharactersOnReceive off
          #
          # Use traditional timestamp format.
          # To enable high precision timestamps, comment out the following line.
          #
          $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
          
          #
          # Set the default permissions for all log files.
          #
          $FileOwner root
          $FileGroup adm
          $FileCreateMode 0640
          $DirCreateMode 0755
          $Umask 0022
          
          #
          # Include all config files in /etc/rsyslog.d/
          #
          $IncludeConfig /etc/rsyslog.d/*.conf
          
          
          ###############
          #### RULES ####
          ###############
          
          #
          # First some standard log files.  Log by facility.
          #
          auth,authpriv.* 		/var/log/auth.log
          *.*;news.none;mail.none;\
                  ;user.none;cron.none    /var/log/syslog
          cron.*				/var/log/cron.log
          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
          
          #
          # Logging for the mail system.  Split it up so that
          # it is easy to write scripts to parse these files.
          #
          
          #
          # Logging for INN news system.
          #
          news.crit			/var/log/news/news.crit
          news.err			/var/log/news/news.err
          news.notice			-/var/log/news/news.notice
          
          #
          # Some "catch-all" log files.
          #
          *.=debug;\
                  auth,authpriv.none;\
          	news.none;mail.none	-/var/log/debug
          *.=info;*.=notice;*.=warn;\
          	auth,authpriv.none;\
          	cron,daemon.none;\
          	mail,news.none		-/var/log/messages
          
          #
          # Emergencies are sent to everybody logged in.
          #
          *.emerg				:omusrmsg:*
          
          #
          # I like to have messages displayed on the console, but only on a virtual
          # console I usually leave idle.
          #
          #daemon,mail.*;\
          #	news.=crit;news.=err;news.=notice;\
          #	*.=debug;*.=info;\
          #	*.=notice;*.=warn	/dev/tty8
          
          # The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
          # you must invoke `xconsole' with the `-file' option:
          #
          #    $ xconsole -file /dev/xconsole [...]
          #
          # NOTE: adjust the list below, or you'll go crazy if you have a reasonably
          #      busy site..
          #
          daemon.*;mail.*;\
          	news.err;\
          	*.=debug;*.=info;\
          	*.=notice;*.=warn	|/dev/xconsole

          2) /etc/rsyslog.d/mysql.conf

          ### Configuration file for rsyslog-mysql
          ### Changes are preserved
          
          $template dbFormat,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag, ProcessID) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag:R,ERE,1,FIELD:([a-zA-Z\/]+)(\[[0-9]{1,5}\])*:--end%', '%syslogtag:R,ERE,1,BLANK:\[([0-9]{1,5})\]--end%')",sql
          
          $ModLoad ommysql
          *.*;mail.none;cron.none;auth.!=info,authpriv.!=info;authpriv.!=notice  :ommysql:localhost,Syslog,rsyslog,Password;dbFormat

          3) /etc/rsyslog.d/35-pam_unix.conf

          #This will filter out and drop lines generated by pam_unix module presumably caused by zabbix custom items that are using sudo
          if $syslogtag contains 'sudo' and $msg contains 'pam_unix(sudo:session): session closed for user' then stop
          if $syslogtag contains 'sudo' and $msg contains 'pam_unix(sudo:session): session opened for user' and $msg contains ' by (uid=0)' then stop
          if $syslogtag contains 'server' then stop
          if $syslogtag contains 'agent' then stop
          if $syslogtag contains 'rsyslogd0:' then stop
          if $syslogtag contains 'rsyslogd-2007:' then stop
          if $syslogtag contains 'rsyslogd-2359:' then stop
          if $syslogtag contains 'ntpd' then stop
          if $syslogtag contains 'sshd' and $msg contains 'pam_unix(sshd:auth): check pass; user unknown' then stop
          if $syslogtag contains 'sshd' and $msg contains 'fatal: Read from socket failed: Connection reset by peer [preauth]' then stop
          if $syslogtag contains 'sudo' and $msg contains 'zabbix' then stop
          if $syslogtag contains 'infra' then stop
          if $syslogtag contains 'systemd' and $msg contains 'grafana' then stop
          if $msg contains 'sda: unknown partition table' then stop

          На серверах, с которых собираются логи, конфигурационный файл только один и везде выглядит одинаково:
          1) /etc/rsyslog.conf

          #  /etc/rsyslog.conf	Configuration file for rsyslog.
          #
          #			For more information see
          #			/usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
          
          
          #################
          #### MODULES ####
          #################
          
          $ModLoad imuxsock # provides support for local system logging
          $ModLoad imklog   # provides kernel logging support (previously done by rklogd)
          #$ModLoad immark  # provides --MARK-- message capability
          
          # provides UDP syslog reception
          #$ModLoad imudp
          #$UDPServerRun 514
          
          # provides TCP syslog reception
          #$ModLoad imtcp
          #$InputTCPServerRun 514
          
          
          ###########################
          #### GLOBAL DIRECTIVES ####
          ###########################
          $MaxMessageSize 4096
          $EscapeControlCharactersOnReceive off
          #
          # Use traditional timestamp format.
          # To enable high precision timestamps, comment out the following line.
          #
          $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
          
          #
          # Set the default permissions for all log files.
          #
          $FileOwner root
          $FileGroup adm
          $FileCreateMode 0640
          $DirCreateMode 0755
          $Umask 0022
          
          #
          # Include all config files in /etc/rsyslog.d/
          #
          $IncludeConfig /etc/rsyslog.d/*.conf
          
          
          ###############
          #### RULES ####
          ###############
          
          #
          # First some standard log files.  Log by facility.
          #
          auth,authpriv.*			/var/log/auth.log
          *.*;auth,authpriv.none\
                  ;news.none;mail.none;\
                  ;user.none;cron.none    /var/log/syslog
          cron.*				/var/log/cron.log
          daemon.*			-/var/log/daemon.log
          kern.*				-/var/log/kern.log
          lpr.*				-/var/log/lpr.log
          mail.*				-/var/log/mail.log
          user.*                          @192.168.0.10
          kern.*                          @192.168.0.10
          
          #
          # Logging for the mail system.  Split it up so that
          # it is easy to write scripts to parse these files.
          #
          
          #
          # Logging for INN news system.
          #
          news.crit			/var/log/news/news.crit
          news.err			/var/log/news/news.err
          news.notice			-/var/log/news/news.notice
          
          #
          # Some "catch-all" log files.
          #
          *.=debug;\
          	auth,authpriv.none;\
          	news.none;mail.none	-/var/log/debug
          *.=info;*.=notice;*.=warn;\
          	auth,authpriv.none;\
          	cron,daemon.none;\
          	mail,news.none		-/var/log/messages
          
          #
          # Emergencies are sent to everybody logged in.
          #
          *.emerg				*
          
          #
          # I like to have messages displayed on the console, but only on a virtual
          # console I usually leave idle.
          #
          #daemon,mail.*;\
          #	news.=crit;news.=err;news.=notice;\
          #	*.=debug;*.=info;\
          #	*.=notice;*.=warn	/dev/tty8
          
          # The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
          # you must invoke `xconsole' with the `-file' option:
          #
          #    $ xconsole -file /dev/xconsole [...]
          #
          # NOTE: adjust the list below, or you'll go crazy if you have a reasonably
          #      busy site..
          #
          daemon.*;mail.*;\
          	news.err;\
          	*.=debug;*.=info;\
          	*.=notice;*.=warn	|/dev/xconsole

          Других хитростей никаких нет )

          • Я нашел в чём была хитрость…
            В примере что вы дали, были написаны другие кавычки!

            Стояли такие:

            if $msg contains ‘pam_unix(cron:session): session closed for user’ then stop

            Я поставил такие и всё пошло.
            if $msg contains ‘pam_unix(cron:session): session closed for user root’ then stop

            Спасибо вам огромное!

          • А ну я понял что сайт не передаёт нужные кавычки =)

  2. Подскажите как отключить запись cron в логах, засорил весь лог работающие скрипты на сервере.

    • Все лишние логи я отключаю с помощью файла /etc/rsyslog.d/35-pam_unix.conf, содержание его примерно такое:

      #This will filter out and drop lines generated by pam_unix module presumably caused by zabbix custom items that are using sudo
      if $syslogtag contains 'sudo' and $msg contains 'pam_unix(sudo:session): session closed for user' then stop
      if $syslogtag contains 'sudo' and $msg contains 'pam_unix(sudo:session): session opened for user' and $msg contains ' by (uid=0)' then stop
      #Feb 11 16:21:48 saturn sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
      #Feb 11 16:21:48 saturn sudo: pam_unix(sudo:session): session closed for user root
      
      #server stat
      if $syslogtag contains 'server' then stop
      #Today 10:22:33	stat	server	Message Details 2016/03/15 10:22:33 [I] Completed 94.153.163.154 admin "GET /api/datasources/proxy/1/api/v1/query_range HTTP/1.1" 401 Unauthorized 26 bytes in 491us
      
      if $syslogtag contains 'agent' then stop
      if $syslogtag contains 'rsyslogd0:' then stop
      if $syslogtag contains 'rsyslogd-2007:' then stop
      if $syslogtag contains 'rsyslogd-2359:' then stop
      if $syslogtag contains 'ntpd' then stop
      
      #sshd stat
      if $syslogtag contains 'sshd' and $msg contains 'pam_unix(sshd:auth): check pass; user unknown' then stop
      if $syslogtag contains 'sshd' and $msg contains 'fatal: Read from socket failed: Connection reset by peer [preauth]' then stop
      #Today 11:31:44 stat sshd Message Details pam_unix(sshd:auth): check pass; user unknown
      #Today 11:42:07 stat sshd Message Details fatal: Read from socket failed: Connection reset by peer [preauth]
      
      #newrelic-infra
      if $syslogtag contains 'infra' then stop
      ...
      • У меня вот так настроено. Во второй строчке «cron.none» по идее это она должна отключать?

        auth,authpriv.* /var/log/auth.log

        *.*;auth,authpriv.none;cron.none -/var/log/syslog

        cron.* /var/log/cron.log

        #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

          • или мне надо просто взять пример что вы дали и закинуть его в конфиг?

          • Я думаю в вашем случае нужно в файл /etc/rsyslog.d/35-pam_unix.conf добавить следующее:

            if $msg contains ‘pam_unix(cron:session): session closed for user’ then stop
            if $msg contains ‘pam_unix(cron:session): session opened for user’ and $msg contains ‘ by (uid=0)’ then stop

            и перезапустить rsyslog )))

        • Это вы мне прислали часть конфига /etc/rsyslog.conf, а я вам писал про конфиг /etc/rsyslog.d/35-pam_unix.conf )))
          Его нужно создать самостоятельно и подправить под свои нужды ))))

          В той части конфига, что вы прислали, строка *.*;auth,authpriv.none;cron.none -/var/log/syslog лишь говорит, что не нужно писать логи крона в /var/log/syslog, потому что в следующей строке cron.* /var/log/cron.log есть указание писать их в /var/log/cron.log