velikan5
@velikan5

Каково лучшее решение для хранения и выборки по логам (≈ 1 000 строк/сек)?

Приветствую, товарищи!

Есть сервер nginx, на него приходит порядка 500 - 1 500 запросов в секунду.
Вот для каждого из этих запросов я хочу сохранять время и несколько своих параметров.

И всё бы хорошо, если бы не нужно было это ещё и группировать по минутам/часам/дням и уметь показать юзеру, как сгруппированное, так и простынёй.
Что-то подобное обычному access log, только с возможность группировки и адекватной выдачи.

Если вдруг кто-то сталкивался с подобным и может поведать истории успеха - буду благодарен.

Всем успехов и болейте за наших!
  • Вопрос задан
  • 3663 просмотра
Решения вопроса 2
ptchol
@ptchol
Linux system administrator
Я бы в вашем случае прикрутил некоторый промежуточный буфер.
Если писать сырые данные напрямую в БД есть риск из тормозов БД залочить\затормозить пишущего, либо просто напросто потерять логи.
Мы в аналогичных задачах ставили буфер в виде redis и писали и читали ключи из объекта LIST с помощью команд RPUSH \ LPOP.
Таким образом если происходил всплеск количества логов (появление "горячего" контента на портале), и они не успевали записываться в базу мы видели лишь увеличение количества записей в очереди, и то, что данные поступающие на анализ, несколько "староваты". При этом сами данные не терялись, и ни одна из сторон не лочилась.

Если не боитесь оверхеда в 30% на хранении данных и новых продуктов, берите связку logstash + elasticsearch + kibana.
При помощи logstash читаете лог, парсите его на лету выцепляя только нужные части и отправляете в ES, который все это дело индексирует и складывает с таймстемпами.
А kibana дает красивенький интерфейс для просмотра, с графиками \ круговыми диаграмами и т д.
Ответ написан
Комментировать
egor_nullptr
@egor_nullptr
Отротированные логи парсите и вливаете в любую удобную для вас БД. А уж из БД делаете выборки какие сами захотите. Только не храните всё в одной таблице, разбивайте по суткам.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
velikan5
@velikan5 Автор вопроса
Думаю, что так и поступлю. Попробую прикрутить MySQL например.
Интересно только, справится ли он с 2000 инсёртов в секунду?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы