Настройка централизованного логирования с LogAnalyzer и Rsyslog



    Совсем недавно у меня возникла необходимость создать центральный лог-сервер с веб-интерфейсом и в этой статье я хотел бы поделиться опытом, возможно кому-то он будет полезен. Я опишу установку и настройку веб-просмотрщика логов LogAnalyzer, Rsyslog-клиента, который будет отсылать все логи на удаленный Rsyslog-сервер, и последний, в свою очередь, будет писать их в базу MySQL.

    В качестве ОС я выбрал Ubuntu 12.04.

    Адреса тестовых вебнод:
    192.168.1.51 (loganalyzer-mysql.ip) — Rsyslog-сервер, на этом хосте также будет проинсталлирован LogAnalyzer
    192.168.1.50 (loganalyzer-mongo.ip) — Rsyslog-клиент, который будет отсылать логи на сервер loganalyzer-mysql.ip

    Настраиваем серверную часть, для чего добавим репозиторий от разработчика Rsyslog:

    ...
    # Adiscon stable repository
    deb http://ubuntu.adiscon.com/v7-stable precise/
    deb-src http://ubuntu.adiscon.com/v7-stable precise/
    ...
    

    # apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AEF0CF8E
    # gpg --export --armor AEF0CF8E | sudo apt-key add -

    Конечно, можно воспользоваться версией Rsyslog, что доступна в стандартных репозиториях, однако у меня имелась проблема с открытием 514 TCP-порта от имени пользователя syslog.

    Обновляем пакеты и устанавливаем Rsyslog с дополнительными пакетами, которые в дальнейшем будут необходимы:

    # apt-get update
    # apt-get install rsyslog rsyslog-mysql mysql-server mysql-client

    Как я уже сказал выше, будем настраивать запись логов в локальную MySQL базу. Также нужно будет ответить на некоторые вопросы в процессе установки. Пакет rsyslog-mysql во время конфигурации запросит создание пользователя и базы для хранения будущих логов:



    Предварительно следует указать пароль для пользователя root базы данных. С его помощью будет залита структура базы rsyslog:



    Указания пароля для отдельного пользователя rsyslog базы данных:



    Если MySQL-сервера не существовало на хосте — то установщик проинсталирует его и также предложит создать пароль для пользователя root.

    Конечный конфиг интеграции Rsyslog и MySQL выглядит следующим образом:

    # vim /etc/rsyslog.d/mysql.conf 
    ### Configuration file for rsyslog-mysql
    ### Changes are preserved
    
    $ModLoad ommysql
    *.* :ommysql:localhost,Syslog,rsyslog,p@ssw0rD

    *.* — запись всех логов в базу
    ommysql — модуль, с помощью которого rsyslog будет писать в MySQL
    Syslog — имя базы
    rsyslog — пользователь, которому предоставлен доступ писать в базу Syslog
    p@ssw0rD — пароль пользователя rsyslog

    Перегружаем rsyslog и проверяем базу:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | Syslog             |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    
    mysql> use Syslog;
    
    mysql> show tables;
    +------------------------+
    | Tables_in_Syslog       |
    +------------------------+
    | SystemEvents           |
    | SystemEventsProperties |
    +------------------------+
    
    mysql> select * from SystemEvents limit 2 \G
    *************************** 1. row ***************************
                    ID: 1
            CustomerID: NULL
            ReceivedAt: 2014-02-11 04:22:52
    DeviceReportedTime: 2014-02-11 04:22:52
              Facility: 5
              Priority: 6
              FromHost: loganalyzer
               Message:  [origin software="rsyslogd" swVersion="8.1.5" x-pid="11992" x-info="http://www.rsyslog.com"] start
    ...
            InfoUnitID: 1
             SysLogTag: rsyslogd:
          EventLogType: NULL
       GenericFileName: NULL
              SystemID: NULL
    *************************** 2. row ***************************
                    ID: 2
            CustomerID: NULL
            ReceivedAt: 2014-02-11 04:22:52
    DeviceReportedTime: 2014-02-11 04:22:52
              Facility: 5
              Priority: 6
              FromHost: loganalyzer
               Message: rsyslogd's groupid changed to 103
    ...
            InfoUnitID: 1
             SysLogTag: rsyslogd:
          EventLogType: NULL
       GenericFileName: NULL
              SystemID: NULL
    2 rows in set (0.00 sec)
    
    mysql> 

    Похоже, что логи пишутся, как и ожидалось.
    Теперь настроим прием логов от удаленного хоста. Для этого отредактируем конфигурационный файл на Rsyslog-сервере, т.е. проверим не закомментированы ли строки:

    # vim /etc/rsyslog.conf
    ...
    $ModLoad imudp
    $UDPServerRun 514
    
    # provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514
    ...

    Перегружаем службу rsyslog. Таким образом 514-е порты UDP и TCP будут открыты для приема логов.

    Переходим к настройке Loganalyzer. Он будет установлен на ноду с IP 192.168.1.51, то есть на ноду с Rsyslog-сервером. В качестве веб-сервера используем Apache, поэтому установим его и пакеты необходимые для работы LogAnalyzer-а:

    # aptitude install apache2 libapache2-mod-php5 php5-mysql php5-gd

    Скачиваем последний Loganalyzer, распаковываем его, ставим необходимые права на конфигурационные скрипты:

    # mkdir /tmp/loganalyzer
    # cd /tmp/loganalyzer
    # wget http://download.adiscon.com/loganalyzer/loganalyzer-3.6.5.tar.gz
    # tar zxvf loganalyzer-3.6.5.tar.gz
    # mkdir /var/www/loganalyzer
    # mv loganalyzer-3.6.5/src/* /var/www/loganalyzer
    # mv loganalyzer-3.6.5/contrib/* /var/www/loganalyzer
    
    # chmod +x /var/www/loganalyzer/configure.sh /var/www/loganalyzer/secure.sh
    # ./configure.sh && ./secure.sh
    # chown -R www-data:www-data /var/www/loganalyzer

    На момент публикации этой статьи последняя версия просмотрщика логов Loganalyzer — 3.6.5.
    Создаем виртуальный хост, в котором следует не забыть, как минимум, изменить параметры ServerName и DocumentRoot:

    # cd /etc/apache2/sites-available
    # cp default loganalyzer.conf
    # vim loganalyzer.conf

    <VirtualHost *:80>
            ServerAdmin webmaster@localhost 
            ServerName loganalyzer-mysql.ip   #<<---insert your domainname here
    
            DocumentRoot /var/www/loganalyzer  #<<---insert root directory of unpacked Loganalyzer
            <Directory />
                    Options FollowSymLinks
                    AllowOverride None
            </Directory>
            <Directory /var/www/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
            </Directory>
    
            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
            <Directory "/usr/lib/cgi-bin">
                    AllowOverride None
                    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                    Order allow,deny
                    Allow from all
            </Directory>
    
            ErrorLog ${APACHE_LOG_DIR}/error.log
    
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel warn
    
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
        Alias /doc/ "/usr/share/doc/"
        <Directory "/usr/share/doc/">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride None
            Order deny,allow
            Deny from all
            Allow from 127.0.0.0/255.0.0.0 ::1/128
        </Directory>
    
    </VirtualHost>

    Активируем виртуальный хост, проверяем конфигурационные файлы и перезагружаем Апач:

    # a2ensite loganalyzer.conf
    # a2dissite 000-default
    # apachectl configtest
    # service apache2 restart

    Открываем ссылки loganalyzer-mysql.ip/install.php (в моем случае loganalyzer-mysql.ip через /etc/hosts привязан к IP-адресу 192.168.1.51 ). Отвечаем на поставленные вопросы:



    Проверка прав доступа к директориям:



    Конфигурация пользователя для базы и некоторых дополнительных опций. Вписываем сюда значения из конфигурационного файла /etc/rsyslog.d/mysql.conf о котором я писал выше. Для этого может использоваться только база данных MySQL.



    Проверка доступов к базе по предоставленному логину/паролю и заливка структуры таблиц, с которыми будет работать LogAnalyzer.



    Создание администратора к web-интрерфейсу LogAnalyzer.



    Добавляем источник логов для отображения. LogAnalyzer умеет показывать записи из текстового файла, базы данных MongoDB или MySQL. Описываем опции доступа к базе (все пишем в точности так как показано на скриншоте ниже, регистр также важен):





    Все готово! Логинимся, используя логин/пароль.



    Интерфейс LogAnalyzer-а выглядит следующим образом:



    Он также умеет рисовать немного графиков:



    Пользователям браузера Chrome сразу посоветую убрать галочку «Use Popup to display the full message details», иначе будут заметны значительные графические баги:



    Сейчас LogAnalyzer отражает логи только с одной хоста, то есть именно те​, что собирает rsyslog. Поэтому настраиваем отсылки логов с удаленного сервера, для чего редактируем конфиг rsyslog на хосте 192.168.1.50 и добавляем опцию:

    # vim /etc/rsyslog.conf
    ...
    *.* @@192.168.1.51
    ...

    *.* — описание всех логов по важности и программах, которые их пишет.
    @@ — отсылать логи по TCP
    @ — отсылать логи по UDP
    192.168.1.51 — сервер, на который будут направлены логи.

    Иногда возникает желание отсылать логи сервисов, которые не умеют писать в syslog. Потому может быть полезная подобная конфигурация:

    # vim /etc/rsyslog.d/mongo.conf
    $ModLoad imfile
    $InputFileName /var/log/mongodb/mongodb.log
    $InputFileTag mongodb:
    $InputFileStateFile stat-mongo-error
    $InputFileSeverity error
    $InputFileFacility daemon
    $InputRunFileMonitor
    error.* @@192.168.1.51

    Все что в директории /etc/rsyslog.d/ и с окончанием conf включается в основной конфиг /etc/rsyslog.conf. В данном случае будут отсылаться логи из текстового файла /var/log/mongodb/mongodb.log и помечаться как ошибки. Все что в файле /var/log/mongodb/mongodb.log будет отослано в общий syslog и иметь такой вид:

    Feb 17 17:27:05 loganalyzer - mongo mongodb : Sun Feb 16 7:26:13 [ clientcursormon ] mem (MB ) res : 15 virt : 624 mapped : 0

    И вот результирующий вид LogAnalyzer-а:



    В качестве базы хранения логов можно использовать и другие варианты. Идеальным выбором может служить нереляционная база данных MongoDB, ведь работу с ней поддерживает как LogAnalyzer, так и Rsyslog.

    Cсылки:
    www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera
    rtfm.co.ua/debian-log-syslog-mysql-loganalyzer
    www.unixmen.com/install-and-configure-rsyslog-in-centos-6-4-rhel-6-4
    terraltech.com/syslog-server-with-rsyslog-and-loganalyzer
    rogovts.ru/opensource/rsysloganalyzer.html
    lists.adiscon.net/pipermail/rsyslog/2013-March/031884.html
    loganalyzer.adiscon.com/articles/using-mongodb-with-rsyslog-and-loganalyzer
    www.rsyslog.com/sending-messages-to-a-remote-syslog-server
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 71

      0
      Из вариантов попроще — это использование Splunk habrahabr.ru/search/?q=splunk (про mysql тоже писали habrahabr.ru/post/178175/)

      P.S. Я работаю в Splunk
        +5
        Да, но вы не упоянули стоимость Splunk.
          +1
          У Splunk есть бесплатная версия с ограничением 500 мегабайт в сутки индексируемых данных (ограничений на количество хранимой информации нет) www.splunk.com/view/SP-CAAAE8W Предполагаю, что многим этого может хватить.
            0
            как то маловато, тут уже даже в небольшой системе надо будет выбирать, что ложить в спланк, а что не ложить, чтобы в лимиты уложиться.
              0
              Всегда казалось, что 500 мегабайт — это много. Особенно для небольших систем. А можете поделиться, сколько у вас в среднем системы генерируют логи? На вскидку?
          +1
          Раз работаете, то рост решений на Elasticsearch+Logstash+Kibana сильно вас коснулись?
            0
            Лично меня нет :)

            А насчет компании, если посмотреть на последний отчет investors.splunk.com/releasedetail.cfm?ReleaseID=809039
            Signed more than 450 new customers, ending the quarter with more than 6,400 customers worldwide."

            Но никаких домыслов по поводу того, зависит ли эта цифра от Logstash, у меня нет.
            +1
            для Спланка нужен свой клиент и сервер, тут же в качестве клиента выступает обыкновенный rsyslog (который во многих дистрах установлен по дефолту). Плюс Спланк написан на джаве, а она иногда живет «своей жизнью»: не смотрит ни на какие ограничения и тд.
              +3
              > для Спланка нужен свой клиент и сервер, тут же в качестве клиента выступает обыкновенный rsyslog

              Splunk умеет импортировать со всего чего только можно, а так же слушать на tcp (http://docs.splunk.com/Documentation/Splunk/latest/Data/SyslogTCP) или udp (http://docs.splunk.com/Documentation/Splunk/latest/Data/SyslogUDP) портах

              > Плюс Спланк написан на джаве

              Java? Вы шутите? Откуда это? :) Все что нас связывает с Java — это SDK для Java и плагин для Eclipse. Индексер написан на C++, web морда на python.
                +2
                ну хорошо, тогда я вообще не прав.
            0
            Всё это хорошо только в пределах локальной сети.
            Если слушать внешний интерфейс — то любой злодей может на порт rsyslog'а который хранит логи что угодно заслать.
              0
              именно потому придуман iptables или можно указать разрешенные хосты в самом конфиге rsyslog.
                –1
                Как бы на это и был намёк ;)
                  0
                  Я просто о нем (iptables) не писал. Хотя то что он нужнен — это очевидно.
                0
                Если не гора к Магомету… Может, тогда построить VPN любого удобного Вам вида, и гонять данные таки уже внутри вашей сети?

                Через паблик слать логи, какие бы брандмауэры не стояли на входе в лог-сервер, не комильфо: перехват трафика от этого не усложнится (усложнится задача насыпать Вам в лог левых данных, да и то, подменить обратный адрес пакетов особо не сложно) а в этом трафике может быть много того, что бы Вы не хотели светить — пароли, хеши, адреса.
                  –1
                  Суть в том, что прежде чем подменить IP адрес, надо знать адрес получателя, порт и что вообще там есть что-то подобное.
                  Промолчать о таких вещах в статье на хабре — не комильфо. Разрешить подключения на этот порт только для «избранных» IP-адресов — имхо, необходимый минимум защиты.
                    0
                    Ну, если мы с Вами пересылаемый через паблик трафик перехватили (а это делается элементарно на современном-то оборудовании; притом syslog не шифрует сообщения и вообще никак их содержимое не защищает), наверное, и подделать пакеты ничего не стоит.

                    Но подделка — это не всегда самое актуальное. Куда неприятнее может быть перехват. Представим себе (утрирую схему!!!): Вы, скажем, будете отлаживать свое веб-приложение, и с www-сервера (на хостинге) на свой dev-сервер (который в офисе, рядом, в локалке) возьметесь пересылать логи приложений, а в логах будут логины и пароли пользователей веб-приложения. Я, изобразив злобного хаЦкера, заполучу копию ваших логов, перехватив этот трафик по пути от www-сервера до dev-сервера, и спокойно себе соберу базу паролей.

                    Потому про VPN и говорю. Сделайте лучше на вашем каналообразующем оборудовании/ПО туннель шифрованный от www до dev, и уже в нем гоните логи. А брандмауэром зажимайте, чтобы «внешний» трафик туннеля приходил на конкретный хост только с «правильных» точек, это точно не помешает. Ну и конечно, уже внутри локалки фильтровать трафик тоже не помешает.
                      +1
                      [sarcasm]Кому-то надо подтянуть теорию IP-сетей. Расскажите мне, как вы будете собирать трафик с моего сервера, скажем, в германии?[/sarcasm].

                      Я не понимаю, что Вы ко мне прицепились? :) В статье про безопасность ни слова. Более того, даже не написано, что никакой аутентификации в таком решении нет, и любой желающий может забить левыми логами весь сервер. Собственно на это я намекнул, и сказал, что как минимум должен быть настроен iptables соответствующим образом.

                      А вообще, при желании, можно выдумать и не только VPN, было бы желание ;)
                        +1
                        Как в том анекдоте, «ты мне еще скажи, что я ей между страниц заглядываю».

                        Здесь статья класса howto, о том, как установить пару программ на Ubuntu. Причем ничего суперсложного нет, для того aptitude и есть, и даже вопросы можно просто в диалоговых окнах вписать (по сути, статья не для Хабра, хотя, конечно, это мое мнение). Я написал на ваше мнение про iptables, что файрволл не решит вопрос ни левых вбросов в логи, ни от перехвата (потенциально непубличного) трафика. Как-то так.

                        Но вообще конечно поставим смайлики, и оставим и howto, и теории заговора )))
                          0
                          Хабр — очень популярный ресурс. При поиске, новичок скорее всего наткнётся именно на эту статью, и сделает по ней. Следовательно, сделает дыру в безопасности, а потом будет ломать голову как же так вышло. Новичку, надо сразу сказать обо всех подводных камнях, и способах решения. Иначе никакого смысла в этой статье нет. Не надо думать, что «новичок» сам всё знает, найдёт и сделает.

                          Никаких теорий заговора. Я знаю людей, которые уже об эти грабли спотыкались.

                          Небольшой ликбез:

                          — Правильно настроенный iptables решит эту проблему. Никакого шифрованного туннеля не нужно. Для этой задачи это излишне.
                          — Чтобы собрать трафик с сервера, надо как минимум оказаться с ним в одном широковещательном домене (читай подключиться в один коммутатор/роутер с ним). Я уже не говорю о том, что если он правильно настроен то это всё равно бесполезно. Если Вы допустили такое, то, простите, Вы сам себе злобный Бурратино. :)
                            0
                            Много ли серверов окажется в одном широковещательном домене на каком-нибудь Амазоне, Хетцнере и т. п.? Много ли новичков будут арендовать VDS/DS, а не настраивать своё оборудование в своей стойке?
                              0
                              Даже на очень бюджетных DES1228ME можно настроить защиту от подобного рода атак. Вы серьёзно такое допускаете? Если малоизвестный хостер то, конечно, такое возможно, но тут опять же — «сами себе злобные Бурратины».
                                0
                                Я не хостер и не админ, а разработчик. Так что вопрос про «допускаете» явно не по адресу.

                                Я вполне допускаю, что у значительной пачки хостеров, как минимум, реально кинуть udp-пакет обернутый ip с некорректным src-адресом.
                                  0
                                  Я вполне допускаю, что у значительной пачки хостеров, как минимум, реально кинуть udp-пакет обернутый ip с некорректным src-адресом.


                                  Правильно настроенный firewall решает эту проблему.
                                    0
                                    Вот о правильной настройке и хочется услышать.

                                    Допустим, rsyslogd/graylogd/whatever слушает 10.0.0.1:514 и принимает данные с 10.0.0.2 и 10.0.0.3. Рассмотрим 2 варианта:
                                    1. Evil host 10.1.0.1, стоящий в той же стойке, отправляет udp пакет с ip.src=10.0.0.2 на 10.0.0.1:514.
                                    2. Evil host 10.1.0.1, стоящий на расстоянии 1 L3-маршрутизатора, отправляет udp пакет с ip.src=10.0.0.2 на 10.0.0.1:514.

                                    Что должно быть настроено на фаейрволе 10.0.0.1, чтобы избежать записи этого нелегитимного пакета в лог?
                                      0
                                      Собственно, объясните чего Вы пытаетесь добиться ввергая меня в бессмысленный спор? Если Вы разработчик, занимайтесь своей работой, а администрирование оставьте людям которые в этом что-то понимают.

                                      Правильная настройка — это не пара строк, а большой багаж знаний «зачем и почему нужно делать именно так». Я Вам её рассказывать не буду. Если Вам нужно — ищите, читайте.

                                      Попробую вкратце.
                                      Ответьте себе для начала на вопрос: «почему ПК с linux на борту должен что-то делать с пакетом, который ему не предназначен?».
                                      Далее, даже если предположим, что зачем-то используется такая широкая маска (а при такой маске в широковещательном домене получается ~131072 хоста, и так никто в здравом уме не делает) для одного широковещательного домена и компьютер подконтрольную взломщику находится в одном широковещательном домене, то это уже совершенно другой аспект со своими заморочками (коллизии, баги прошивки, неправильная настройка, косяки при проектирование ASIC и/или CPU в коммутаторах/роутерах). В современных коммутаторах/L3 коммутаторах/роутерах есть средства защиты от подавляющего большинства подобных атак. Если они криво настроенны, то я повторюсь — «Вы сами себе злобный Бурратино», и остаётся надеяться на то, что взломщик по каким-то причинам не заметит, или не знает что с этим делать, но такой вариант маловероятен.

                                      Касательно iptables. Опустим остальное, оставим только необходимое:

                                      iptables -F
                                      iptables -X 
                                      iptables -P INPUT DROP
                                      iptables -P FORWARD DROP
                                      
                                      iptables -A INPUT -i lo -p all -j ACCEPT
                                      
                                      iptables -A INPUT -m state --state INVALID -j DROP
                                      iptables -A OUTPUT -m state --state INVALID -j DROP
                                      
                                      iptables -A INPUT -s 10.0.0.2 -p tcp -m tcp --dport 514 -j ACCEPT
                                      iptables -A INPUT -s 10.0.0.3 -p tcp -m tcp --dport 514 -j ACCEPT
                                      
                                      iptables -A INPUT -j DROP
                                      

                                        +1
                                        Я просто замечу, что термин «широковещательный домен» говорит не о сетевом уровне, а о канальном, потому об IP-адресах вообще вести речь некорректно. Злоумышленник отравит ARP-кэш и заставит считать вас роутером/syslog-сервером его, даже не имея IP-адреса вообще и слушая raw-сокет.

                                        Однако, с тем, что тема защиты от подделки и перехвата трафика сильно выходит за рамки статьи, полностью с вами соглассен.
                                          0
                                          Будьте любезны внимательно читать то, что написано. Вам уже мерещится что я писал то, чего на самом деле я не писал.
                                          0
                                          «Авторитетно» заявлять, что фаейрвола достаточно можно имея на то какие-нибудь основания кроме понтов в стиле «администрирование оставьте людям которые в этом что-то понимают».

                                          Я задал простой вопрос и привел простую конфигурацию в которой ваши настройки файервола идут лесом.

                                          Во-первых, широковещательный домен, как iavael сказал ниже, — понятие L2. IP адреса хостов могут быть любыми, это L3.

                                          В описанной мной конфигурации атакующий хост (10.1.0.1) отправляет пакет с ip.dst = 10.0.0.1, ip.src = 10.0.0.2 и udp.dstport = 514.

                                          И становится невозможно различить два варианта:
                                          — 10.1.0.1 — роутер и просто смаршрутизировал пакет от 10.0.0.2;
                                          — 10.1.0.1 — атакующих хост и сфабриковал пакет.

                                          В данную дискуссию я влез после вашего заявления
                                          Правильно настроенный iptables решит эту проблему. Никакого шифрованного туннеля не нужно. Для этой задачи это излишне.
                                          которое выглядит не соответствующим действительности.
                                            0
                                            Вообще, то, что bosha ошибся с широковещательным доменом, скорее говорит в пользу аргумента «администрирование оставьте людям которые в этом что-то понимают». Тема безопасности действительно не относится к основной теме статьи.
                                              0
                                              Вообще-то, я не ошибся, а использовал словосочетание «широковещательный домен» совершенно верно. Вам даже русскоязычная википедия подсказывает, что оно применимо к 3-ему уровню модели OSi с некоторыми оговорками.

                                              Более того, я никак в своём комментарии не связывал эти два понятия.

                                              Иными словами — Вы дважды неправы.
                                              0
                                              iavael неправ, и крайне невнимателен. Оставьте его в покое.

                                              Вы, к сожалению, так же немного неправы ввиду невнимательности при прочтении: я никак не связывал защиту средствами iptables и случаи, когда у взломщика есть возможность сделать описанное Вами.

                                              По поводу Вашего примера — тут Вы совершенно правы. Я невнимательно его прочитал, и соответственно ответил. Такая атака получится. Извиняюсь за невнимательность. Однако я повторюсь, что никак не связывал защиту средствами iptables и подобные атаки.
                                              0
                                              А зачем дополнительное правило DROP, если политика для цепочки INPUT уже в DROP установлена?
                                  0
                                  >Здесь статья класса howto, о том, как установить пару программ на Ubuntu. Причем ничего суперсложного нет, для того aptitude и есть, и даже вопросы можно просто в диалоговых окнах вписать (по сути, статья не для Хабра, хотя, конечно, это мое мнение)

                                  Если бы я начал компилировать и половину статьи упустил — статья была бы более професиональной, т.к. было бы ничего не понятно?

                                  2bosha: Вопрос защиты и настройки фаервола — это другая статья.
                          0
                          Rsyslog умеет TLS
                          0
                          А чем плох fluentd?
                            0
                            Видимо, тем, что про fluentd нет статей на хабре.
                              0
                                0
                                в черновиках есть :) скоро будет.
                                  0
                                  А мы ждём… :) Когда же уже?
                                0
                                а для него есть какая-либо вебморда?
                                  0
                                  Тут уже упоминали Kibana.
                                    0
                                    Ну я же просто предложил вариант организации лог-системы. Конечно же есть другие варианты и, очень вероятно, что они лучше.
                                +3
                                Какое-то непродолжительное время мы тоже использовали связку rsyslog+mysql+LogAnalyzer и в итоге оказались от неё в пользу rsyslog+logstash+elasticsearch+kibana.
                                Причины собственно две:
                                1. В LogAnalyzer уууужасный web-интерфейс. Это по-моему что-то даже более доисторическое, чем web 1.0. А ещё очень сильно раздражает popup, который всплывает на каждую строку лога в листинге.
                                2. MySQL из коробки банально не справляется при большом количестве логов и хитрой выборке данных. То есть банальный листинг и pagination всех имеющихся логов конечно не тормозит, но вот если надо выбрать например только логи nginx-а и только за определённый период времени, и только те, где встречается определенный user-agent, то тут и начинаются проблемы.

                                Связка rsyslog+logstash+elasticsearch+kibana решила эти две проблемы.
                                1. Logstash позволяет осуществлять парсинг и нормализацию логов. При помощи фильтров можно выдрать из логов по определенному шаблону конкретные кастомные значения для того, чтобы в дальнейшем добавить их в поисковый индекс.
                                2. Kibana няшка demo.kibana.org/, даст 100 очков форы LogAnalyzer-у
                                3. Elasticsearch — поисковый сервер на основе Apache Lucene. Масштабируемый из коробки. Одна из частных задач, которую он решает вкупе с logstash — организация хранения логов
                                  +1
                                  Недавно настроили связку rsyslog+mysql+LogAnalyzer, вроде бы всё работает, но пункт №1, указанный у вас, уже бесит. Пока завели около 10ка хостов. Судя по вашему опыту нас ждёт и пункт №2.

                                  Вы по какому-то мануалу настраивали связку rsyslog+logstash+elasticsearch+kibana или по наитию? Думаю тоже попробовать сразу хорошее, чтобы не ходить по граблям.
                                    0
                                    Настраивали в основном по официальной документации logstash.net/docs/1.3.3/ и плюс немного по статьям с хабра
                                    0
                                    Согласен, LogAnalyzer страшненький, но зато работает неплохо. Как хранилище логов можно использовать и MongoDB, где поиск должен работать быстрее. В любом случае если инфраструктура большая — сервер нужно использовать с хорошим, мощным железом.
                                      +2
                                      По поводу mongodb для хранения логов: когда на одном из предыдущих мест работы в одном из проектов перестал устраивать greylog и начали его переписывать, на одном из этапов пришлось перестать хранить данные в монге из-за ее низкой производительности и перейти на постгрес.
                                      Этот пример, конечно, совершенно не обязан что-то значить по отношению ко всем случаям использования системы хранения логов, но, все-таки, рассужения «а давайте вкатим монгу, она быстро работает» далеко не всегда правильны.
                                        0
                                        Скажите, а что именно перестало устраивать в greylog?
                                          0
                                          Судя по тому, что его переписали практически полностью, примерно всем. К сожалению я подробнее рассказать о конкретных проблемах команды, затеявшей переписывание, не могу, поскольку я уже лишь пользовался переписанной версией.
                                        0
                                        На самом деле MongoDB в случае LogAnalyzer позиционируется как альтернативное хранилище данных, а не как хранилище, которое даст improvement производительности. То есть по принципу «Вот у нас в проекте одна монга — зачем нам ещё MySQL? Коль уж используем монгу, то давайте и логи туда складировать.»
                                        Объясняю основную причину, почему нас не устроил ни MySQL, ни MongoDB. Вот у нас есть, скажем, логи от сервера приложений, и разработчики обязуются слать логи в формате JSON, проталкивая при этом параметр user_id в каждом из логов. Благодаря этому мы сможем легко и непринужденно получить информацию об активности пользователя за прошедшее время. А такое зачастую очень даже надо. Например в случае багфикса. Так вот, в принципе в LogAnalyzer можно задавать кастомные поля для выборки логов, но так, как это так реализовано, нам показалось далеко не юзер-френдли. То ли дело в logstash, где данная задача решается на уровне встроенных фильтров. А если искать значение тупо по регулярке по телу message-а, то насколько я понимаю на уровне базы данных делается что-то на подобии Full-Text Search, и база просто настолько долго делает скан, что веб-интерфейс не дождавшись ответа умирает с ошибкой. И тут дело не в MySQL или MongoDB, тут скорее вопрос, идет запрос в индекс или нет.
                                          0
                                          А если искать значение тупо по регулярке по телу message-а, то насколько я понимаю на уровне базы данных делается что-то на подобии Full-Text Search
                                          Это называет full table scan, а не full text search =)
                                            0
                                            Я имел ввиду именно что полнотекстовый поиск. Но это лишь предположение — я не копался во внутренностях, поэтому не могу сказать ничего конкретного. Может быть там делается полнотекстовый поиск, а может быть просто что-то на подобии like %...%. В любом случае если не выносить искомые значения в кастомные предопределенные поля, то «сложный» поиск по телу сообщения при больших объемах логов будет работать медленно — у нас по крайне мере так было
                                              0
                                              Тогда какие регулярки? Префиксный или суффиксный — может по индексу делаться.

                                              Так-то полнотекст работает быстро: по базе в 100М документов по 2-3 кб в среднем — меньше 100 мс на lucene/solr. SQL like работает помедленнее, естественно, и не поддерживает нормализацию и т. п.

                                              Так что проблема только в реализации.
                                        0
                                        >А ещё очень сильно раздражает popup, который всплывает на каждую строку лога в листинге.

                                        такое поведение можно отключить в настройках LogAnalyzer-а.
                                        0
                                        Стоит упомянуть, что при большом объеме данных, допустим как у меня
                                        mysql> select count(*) from SystemEvents;
                                        +----------+
                                        | count(*) |
                                        +----------+
                                        | 82625385 |
                                        +----------+
                                        

                                        Enable Row Counting чтобы не использовалась функция SQL_CALC_FOUND_ROWS. Иначе у вас интерфейс будет еле ползать, Так же можно добавить индекс на FromHost
                                          0
                                          Интрересно, а разработчики в курсе таких дел? А то получается очивидные вещи отсутсвуют в базовой комплектации ПО.
                                            0
                                            Думаю да, но нигде у них в документации этого не сказано, когда у меня объемы выросли, мне пришлось искать решение, так как собирать плагин для mongo было неохота, решил поискать решения, честно было несказанное удивление когда увидел, что используется SQL_CALC_FOUND_ROWS. Не хочу сказать что функция ужасная или плохая, ее применения обосновано, при маленьких объемах
                                            К примеру:
                                            mysql> SELECT SQL_CALC_FOUND_ROWS id, devicereportedtime, facility, priority, fromhost, syslogtag, processid, infounitid, message FROM `SystemEvents` ORDER BY id DESC LIMIT 100;
                                            
                                            100 rows in set (5 min 49,02 sec)
                                            
                                            

                                            Как видно, этот запрос мягко говоря медленный и тяжелый.
                                            0
                                            Вы имеете ввиду опцию «Enable Row Counting» при добавлении источника логов? Ee нужно разрешать? beta.hstor.org/getpro/habr/post_images/a79/bde/dba/a79bdedba68878d9323f23b1e983761d.png

                                            Как улучшилась производительность после этого?
                                              0
                                              наоборот, ее лучше не выключать, если у вас предполагается большой размер таблицы. Как я и написал если включена опция Enable Row Counting, то начинается проседание по производительности. Запрос выше, как раз генерирует движок с включенной опцией.
                                                0
                                                Ну мануалы в бложиках говорят что включать не стоит, только не говорят почему.
                                                А та же кверя с выключенной «Enable Row Counting» сколько выполняется?
                                                  0
                                                  При выключенной опции запрос имеет вид:
                                                  mysql> SELECT id, devicereportedtime, facility, priority, fromhost, syslogtag, processid, infounitid, message FROM `SystemEvents` ORDER BY id DESC LIMIT 100;
                                                  
                                                  

                                                  Выполняется за:
                                                  100 rows in set (0,00 sec)
                                                  
                                                  

                                                  И все начинает летать, при больших объемах.
                                                    0
                                                    я интересуюсь, потому что StraNNikk habrahabr.ru/post/213519/#comment_7342253 вроде как говорит, что при большом к-ве логов все значительно медленней работает.
                                                      0
                                                      при моих объемах достаточно шустро бегает, сейчас на тестовом очищу табличку, для чистоты эксперимента.
                                                        0
                                                        собственно протестировал при моих настройках генерация и работа стабильная и быстрая у меня уже событий в тбилце много больше чем 82625385 как я писал выше, включил логирование на уровне инфо и у меня инсертов куча, все стабильно и быстро использую perconadb +apache+nginx пока не смотрел как прикрутит кеширование дополнительное
                                                          0
                                                          зачем кеширование, если и так все хорошо :)
                                                            0
                                                            у меня слишком большие объемы, со временем придется скорее всего
                                            +1
                                            graylog2 — open-source решение, в отличие от splunk
                                              0
                                              кстати замечание при таком конфиге, если не указать
                                              :hostname,!contains ,"имя сервера syslog" :ommysql:localhost,Syslog,rsyslog,password
                                              
                                              

                                              будет генерироваться много не нужного
                                                0
                                                Если кому-нибудь пригодится русский язык для loganalyzer, то берите: www.transifex.com/adiscon/loganalyzer
                                                Чтобы скачать, к сожалению, придется авторизоваться (можно через соц. сети).
                                                  0
                                                  Кто шлет логи через rsyslog плюсаните
                                                  github.com/rsyslog/rsyslog/issues/3340

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