Централизованный сбор, хранение и просмотр Syslog в Debian Linux

В качестве стандартного syslog-сервиса в Debian используется rsyslog. Дальше рассказывается, как отправлять копии журналов на сервер, сохранять их в SQL-базе и просматривать через удобный Веб-интерфейс.


Отправка с клиентских машин на центральный сервер


Создаём файл /etc/rsyslog.d/send2server со строкой:
*.* @hostname-или-fqdn-или-ip-адрес-сервера
Например:
*.* @netlog.lan
Чтобы не собирать отладочный мусор, можно заменить "*.*" на "*.notice" или "*.warning".
Перечитываем настройки: /etc/init.d/rsyslog restart

Протокол доставки


  • по умолчанию используется udp/514
  • если указать "@@" вместо "@", то вместо стандартного UDP станет использоваться TCP (нестандартное расширение!).
  • если нужна 100% надёжность доставки, вместо udp/tcp следует использовать модули omrelp на клиенте и imrelp на сервере.


Приём на сервере


В /etc/rsyslog.conf должны быть раскомментированы строки:
$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514

Перечитываем настройки: /etc/init.d/rsyslog restart

Хранение в MySQL


  • apt-get install rsyslog-mysql
  • аккуратно отвечаем на все задаваемые вопросы,
  • если не считать паролей, достаточно подтверждать предлагаемые значения,
  • настройки сохраняются в /etc/rsyslog.d/mysql.conf


Просмотр в LogAnalyzer


  • Страница скачивания: loganalyzer.adiscon.com/downloads (в пакетах Debian отсутствует)
  • Установка зависимостей: apt-get install libapache2-mod-php5
  • Из архива с исходными текстами внутрь /var/www требуется скопировать папку ./src и переименовать её в «loganalyzer».
  • Рекомендуемое исправление для ./include/functions_common.php, чтобы убрать предупреждения из логов Apache:
    --- loganalyzer/include/functions_common.php.orig 2011-11-14 14:32:32.000000000 +0200
    +++ loganalyzer/include/functions_common.php 2011-11-16 02:05:58.982834986 +0200
    @@ -1163 +1163,2 @@
    - $content['EXTRA_METATAGS'] .= '/>';
    + if (array_key_exists($content['HeaderDefaultEncoding']))
    + $content['EXTRA_METATAGS'] .= '/>';
  • Создание пустого файла конфигурации, будет заполнен инсталлятором:
    touch config.php
    chmod 666 config.php


Подготовка SQL-баз для LogAnalyzer



SQL-таблицу Syslog.SystemEvents стандартного формата LogAnalyzer автоматически дополняет собственными столбцами, но для этого потребуется давать ему слишком большие привилегии. Чтобы разрешить ему только SELECT, создадим столбцы вручную:
ALTER TABLE `SystemEvents` ADD `processid` varchar(60) NOT NULL DEFAULT '';
ALTER TABLE `SystemEvents` ADD `checksum` int(11) UNSIGNED NOT NULL DEFAULT '0';



Настройка LogAnalyzer


  • Открываем netlog.lan/loganalyzer/install.php и проходим все шаги.
  • Формат syslog-базы = MonitorWare.
  • Имя базы Syslog и таблицы SystemEvents являются регистрозависимыми.

После завершения установки:
chmod 644 config.php
rm install.php

Первый пользователь имеет права администратора.
Рекомендуется зайти в «Admin Center / Users» и зарегистрировать гостя с флагом «ReadOnly User».
Share post

Comments 12

    +4
    Вот хорошая штука для анализа логов -> graylog2.org/
      0
      Интересный вариант. Я использую php-syslog-ng, у него есть большой плюс для меня: база CEMDB, база с цисковыми описаниями логов, наводишь на лог и он показывает детальное описание записи:

        0
        Не вариант для меня из-за производительности, да и сеть мультивендорная. Я ни разу не адвокат, но graylog2 скорее работает на наших объемах, чем не работает.
      0
      в пункте Подготовка SQL-баз для LogAnalyzer вы упоминаете SQL-таблицу Syslog.SystemEvents — откуда она взялась?
        0
        Её создаёт пакет rsyslog-mysql при инсталляции.
        +2
        + if (array_key_exists($content['HeaderDefaultEncoding']))

        Это неправильный код. Надо либо использовать isset, либо array_key_exists('HeaderDefaultEncoding', $content)
          0
          Можно ли так хранить логи за год — 64.000.000 строк, 7 гигабайт. И это только с одного сервера только лог почтового сервера со сравнительно небольшим трафиком. Может быть, для централизованного хранения логов есть более удобные средства?
            0
            Я бы оставлял сырые логи в файлах на почтовом сервере, а на центральный сервер отправлял бы нечто отфильтрованное.

            Т.е. данные на центральном сервере помогают увидеть проблему, а если нужно глубокое расследование — идём на конкретный сервер.
            0
            Так и происходит, но надо заметить, что за годы центральный сервер может сломаться и логи пропадут. Да и возникают проблемы с доступом. В общем, централизованное хранение логов нужно.
              0
              то есть сломаться может почтовый сервер, я опечатался.
              0
              А кто-то пробовал настроить LogAnalyzer для работы с MongoDB?

              loganalyzer.adiscon.com/articles/using-mongodb-with-rsyslog-and-loganalyzer/
                0
                текущий Debian содержит в репозитории данный фронт-енд:

                apt-get install loganalyzer

                Конфиг в апач: /etc/loganalyzer/apache.conf
                Само приложение в: /usr/share/loganalyzer/

                Only users with full accounts can post comments. Log in, please.