Приложение сейчас хранит логи в базе данных. Логи "write only", довольно активно пишутся, а читаются изредка. База удобна тем, что:
1. Легко фильтруются нужные записи (относящиеся к одному из множества объектов логирования, нужного типа)
2. Довольно важно всегда гарантированно иметь под рукой записи за последнее время (сутки, неделя). с logrotate это все усложняется, т.к. после ротации лог становится пустой, а логи читаются через веб-морду, а не из шелла. С базой задача очистить все что старше недели и гарантированно оставить все, что меньше недели - делается проще.
Однако, немного волнует нагрузка на базу. Ведь она не знает, что логи не нужны (не потребуются в ближайшее время). Поэтому может долго держать их в памяти, кешировать потребляя на это ресурсы, которые не достанутся на самом деле важным записям в других таблицах (о которых я, программист, знаю, что они гораздо более вероятно потребуются из памяти).
Насколько вобще хороша идея хранить логи в базе, или лучше переписать их на текстовые файлы и изредка, когда кто-то зашел смотреть логи - парсить текст?
Можно ли как-то правильно "проинструктировать" СУБД (mariadb), что данные из таблицы логов - "неважные" и их надо сразу скидывать на диск, а из некоторых других таблиц - "важные", и их надо по возможности держать в памяти?
Можно ли как-то посмотреть, сколько ресурсов "съедает" сейчас таблица логов в оперативке (не на диске)?
Погляжу, спасибо, но предварительно эта идея кажется оверкиллом. Логи в моем случае очень маленькая и не очень важная часть приложения, и разворачивать целый стек ПО для этой задачи - "ну такое"...
Примерно как для шелл скрипта вся схема логирования - это код: echo `date` message >> $LOG
тогда не парьтесь - ничего с базой от такой нагрузки не будет, а как только логи начнут влиять на производительность - переедете на нормальный стек для сбора логов.
Проблема в том, что я наверняка не знаю, что у меня жрет ресурсы. Сервер (VPS) при не очень высокой нагрузке более-менее нагружен. И у меня есть подозрение, что это связано с логированием (возможно, это и есть стадия "логи начали влиять на производительность"), но я в нем не уверен (возможно, другие части приложения грузят базу, и база тормозит не потому что загружена логами, а по иной причине).
Можно ли как-то посмотреть/сравнить сколько ресурсов отжирает работа с каждой таблицей?
Логичнее всего - не хранить логи в базе данных, черт побери) Использовать надо для каждой задачи свои инструменты, например, тот же самый пресловутый ELK