LINUX.ORG.RU
ФорумAdmin

Оптимизация работы связки syslog-ng + mysql

 , ,


1

3

Здравствуйте. Прошу советов и помощи в реализации задачи. Есть сервер Debian 8 x64. На нем развернут syslog-ng, который принимает логи с сетевых железок. Руководство поставило задачу вести логи кто-куда ходил и когда.

Изначально настроено было писать по дням в файлы. За одни сутки набегало порядка 58 гигов информации, после сжатия tar-ом объем уменьшался до 18 Гб. Что в принципе на данный момент приемлемо. Решил прикрутить ко всем этому базу данных mysql.

Но тут наткнулся на проблему, за 2,5 часа обьем базы вырос на 9,5 Гб. что по предварительным рассчетам много больше файлового варианта хранения.

Так как я с базами данных дружу от слова - «совсем никак», прошу помощи по оптимизации схемы.

1) есть ли в mysql способ сжатия данных на лету или по рассписанию?

2) Как можно реализовать ротацию данных? в случачи если свободное место закачивается, то удаляются старые данные.

3) Может быть есть другие средства сбора логов более оптимальные?

Схема базы mysql:

CREATE TABLE logs (

host varchar(32) default NULL,

facility varchar(10) default NULL,

priority varchar(10) default NULL,

level varchar(10) default NULL,

tag varchar(10) default NULL,

datetime datetime default NULL,

program varchar(15) default NULL,

msg text,

seq bigint(20) unsigned NOT NULL auto_increment,

) TYPE=MyISAM;

Посмотрев понимаю что можно уменьшить размер полей и некоторые совсем исключить, но поле msg самое обьемное по данным, там в основном ip-адреса.

Зарание спасибо за помощь.



Последнее исправление: IMP (всего исправлений: 1)

Так как я с базами данных дружу от слова - «совсем никак», прошу помощи по оптимизации схемы.

Так может использовать готовые решения, типа graylog + фильтрация событий на отправку на устройствах? И голову себе морочить не будешь, и место сэкономишь

Deleted
()

WiZ_Ed прав, насчет готовых решений. Также можно поставить связку Fluentd(сбор логов) + ElasticSearch(No-SQL база данных) + Kibana(визуальное отображение логов, с возможностью фильтрации, построения графиков и т.д).

Fess88
()

Решил прикрутить ко всем этому базу данных mysql.

А какой цели надо было достигнуть ?

AS ★★★★★
()
Ответ на: комментарий от Fess88

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

IMP
() автор топика
Ответ на: комментарий от Fess88

Прошу прощение не сразу увидел описаные возможности, в дальнейшем к моему варианту будет прикручен вебанализатор логов с фильтром, графиками и прочими плюшками. В настоящий момент стоит вопрос в отпимизации записи дабы логи не занимали 100 гигов за день в базе вместо 18 гигов в архивном файле.

IMP
() автор топика
Ответ на: комментарий от Deleted

Проблема в том что фильтр есть и в syslog-ng, но суть в том что руководство хочет иметь возможность посмотреть кто, когда, куда и откуда ходил, причем логируется не только http трафик. Я так понимаю это аналог того что ведут интернет операторы для спец-служб.

IMP
() автор топика
Ответ на: комментарий от AS

Цель как и написал товарищ выше постом, удобный просмотр и фильтр логов. С возможностью построения графиков и поиском по заданным параметрам.

IMP
() автор топика

1) х.з. что там с mysql. может попробовать файловую систему со сжатием ? 2) в cron задание вставить не вариант ? вообще-то базу можно партиционировать, но это не mysql. 3) rsyslog достаточно гибок, можешь писать по желанию. ненужные поля можно выкинуть. вот пример шаблона: $template sql0, «insert into events \ ( receivedat, \ devicereportedtime, \ facility, \ priority, \ fromhost, \ fromip, \ syslogtag, \ processid, \ message \ ) \ values \ ( '%timegenerated:::date-rfc3339%', \ '%timereported:::date-rfc3339%', \ %syslogfacility%, \ %syslogpriority%, \ '%HOSTNAME:R,ERE,1,FIELD:(^.+)\.mydomain\.ru--end%', \ '%fromhost-ip%'::inet, \ trim('%syslogtag:R,ERE,1,FIELD:([^][]+)(\[[0-9]{1,6}\])?:--end%'), \ '%syslogtag:R,ERE,1,ZERO:\[([0-9]{1,8})\]--end%', \ trim('%msg%'))», stdSQL

anonymous
()
Ответ на: комментарий от anonymous

rsyslog достаточно гибок

В теме syslog-ng, он не менее гибок вообще-то. Где-то, даже, более.

AS ★★★★★
()
Ответ на: комментарий от IMP

но суть в том что руководство хочет иметь возможность посмотреть кто,
когда, куда и откуда ходил, причем логируется не только http трафик.

В смысле ? Речь про кто/куда по IP, а не кто/куда по своим устройствам/серверам/разное ?

AS ★★★★★
()
Ответ на: комментарий от AS

именно так, ip у нас привязываются к маку. Поэтому это почти тоже самое что и по устройствам.

IMP
() автор топика
Ответ на: комментарий от IMP

именно так, ip у нас привязываются к маку. Поэтому это почти тоже самое что и по устройствам.

Нет. Я не про это. syslog нужен для того, чтобы собирать какие-то системные сообщения. syslog-сервер сервер может собирать такие сообщения, посланные через сеть с других устройств. Зашёл на коммутатор - коммутатор послал на сервер сообщение «ко мне зашёл тот-то так-то». При чём тут фраза «причем логируется не только http трафик» - это совершенно непонятно. Учёт трафика к syslog-у отношения не имеет совершенно.

Хотя, наверное, можно придумать, как такую статистику и в syslog писать, но это как-то так стоя, и в гамаке. :-)

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)

1) Включаем движок InnoDB barracuda, указываем что каждая таблица в отдельном файле, включаем компрессию для таблиц - https://dev.mysql.com/doc/refman/5.5/en/innodb-compression-usage.html

2) Включаем партицирование в MySQL, например сделать разбиение на 7 суток с удалением устаревших секций. Вот пример разбиения для БД Zabbix http://mpls-net.blogspot.ru/2013/10/zabbix-mysql.html

gfh ★★★
()
Последнее исправление: gfh (всего исправлений: 2)
Ответ на: комментарий от gfh

Спасибо, за помощь. Это я и искал :)

IMP
() автор топика
Ответ на: комментарий от AS

Так и есть порядка 500 сетевых железок шлют свои логи, об ошибках об авторизации об отвалившемся Линке и т.д. Все это разносится по хостам дабы не сваливать в одну кучу. Но и сюдаже шлют логи три шлюза, кто и куда пошёл в интернет. Вотдля этого и прикручиваю мискл.

IMP
() автор топика
Ответ на: комментарий от IMP

Но и сюдаже шлют логи три шлюза, кто и куда пошёл в интернет.

Вот это вот не стоит валить в syslog, для этого есть другие способы, под это заточенные. И сразу всё будет нормально, как мне кажется.

AS ★★★★★
()
Ответ на: комментарий от IMP

направьте в нужное русло для агрегации информации с трех шлюзов?

Чисто по Интернет-трафику само удачное решение сейчас, на мой взгляд, это ipt-netflow и какой-нибудь netflow-коллектор. Можно nfdump. И, если надо, к нему веб-морда есть nfsen.

AS ★★★★★
()
Ответ на: комментарий от AS

+1

Логгировать средствами iptables и syslog не очень оптимальное решение.

gfh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.