172 похожих чатов

Всем привет! Появилась такая задача: Имеем postgresql 11 и приложение работающее

с ним и пишущее свои логи в graylog.
Для анализа логов часто нужна информация из БД дополнительно.
Поэтому предложили перенести логи в postgresql чтобы джоинить сразу выборку из логов с нужными таблицами базы.
Для поиска по логам будет использоваться FTS.
Кол-во логов 200 записей в минуту с хранением 1 год.
Кто то сталкивался с таким? Что стоит предусмотреть?
Пока что из идей было сделать таблицы при помощи timescaledb для более быстрого поиска фильтруя по времени.
Так же думал найти какой нибудь fdw для elasticaearch, но не нашел какого то популярного решения.
Или возможно вообще не с той стороны подхожу к этому вопросу? Если кто то имеет подобный опыт или есть идеи, прошу помочь)

16 ответов

34 просмотра

timescale тут точно поможет с удалением устаревших логов.

Артем-Сафиюлин Автор вопроса
Sergey Gr
timescale тут точно поможет с удалением устаревших...

Не знаю насколько хорошо с ним будет работать fts и соответствующие индексы, и не принесет ли он больше бед чем помощи.

Артем Сафиюлин
Не знаю насколько хорошо с ним будет работать fts ...

Не пробовали, но мне кажется для FTS Timescale не очень подходит. Его сила в другом. Мы для работы с логами пробовали ClickHouse с подтаскиванием в него нужных таблиц из Postgres и Grafana+Loki. Пока ни одно решение нас не устроило.

Если у вас реально 200 з/с то ещё норм, но кто дает гарантию что завтра их не станет 400 а потом тысяча и тогда вы очень быстро упретесь в лимиты постгреса

Артем-Сафиюлин Автор вопроса
central hardware
Если у вас реально 200 з/с то ещё норм, но кто дае...

200з/минуту не в секунду, гарантий нету конечно, это просто анализ из того как они все предыдущее время писались в грейлог насколько понимаю

Доброе утро, я бы не рекомендовал вам использовать postgres для данной задачи Есть например тот же clickhouse, складывайте туда логи и нужные данные из постгреса, например используйте очереди (Kafka, RabbitMQ), чтобы слать в одно место логи и данные, вариантов куча Но очень высока вероятность что вы упретесь в postgres с логами Ищите другое решение, более подходящее для этих задач

Артем-Сафиюлин Автор вопроса
Suchimauz #
Доброе утро, я бы не рекомендовал вам использовать...

данные с которыми надо джойнить логи уже лежат в postgres и их точно не вариант переносить в кликхаус например

их легко может стать 1000-и в секунду

Артем Сафиюлин
данные с которыми надо джойнить логи уже лежат в p...

хотя вакуум особо проблем не должен принести, так как логи зачастую неизменяемые) но лишняя генерация wal, нагруженные чекпоинты, стоит ли оно того но если вы уверены что этих логов в будущем не будет овер много и в целом проект уже не развивается сильно, то думаю проблем не будет, но в обратном случае, проблемы у вас точно появятся, и аффектить они будут на основную базу

Suchimauz #
их легко может стать 1000-и в секунду

Типичная ошыбка — оптимизировать систему под какие-то абстрактные фантазии, а не под свои потребности.

Ilya Anfimov
Типичная ошыбка — оптимизировать систему под какие...

мое выше сообщение говорит прямо, если есть понимание, что логов будет не много, пожалуйста, хоть в текстовый файл пишите тут спросили мнение, я его озвучил не такая уж и сложная задача спрогнозировать сколько будет логов, если проект уже в проде и он развивается планомерно если нет понятия - делайте как хотите, мое же дело предупредить) мы на это наступали и знаем, к каким проблемам может привести

А информация из бд статичная или может меняться после записи лога? Может имеет смысл ее в момент записи лога докладывать, либо насыщать лог данными через какой-нибудь воркер, который можно встроить в пайплайн обработки логов

Артем-Сафиюлин Автор вопроса
Артур Бердыев
А информация из бд статичная или может меняться по...

даже если она статична - то кажется дергать лишние 200раз прод таблицу вместо того чтобы потом её условно раз в месяц при инвестигейте каком то дернуть - тоже излишне

Артем Сафиюлин
даже если она статична - то кажется дергать лишние...

Да, но за это придется заплатить зависимостями табличек с данными от табличек с логами и сопутствующие проблемы от раздувания базы, вопросы масштабирования итд итп

Кстати, если хранить логи в рабочей базе при всплеске ошибок может быть "весело". Из личного опыта. Я бы хотя бы разделил базы.

Артем-Сафиюлин Автор вопроса
Андрей
Кстати, если хранить логи в рабочей базе при вспле...

Да, уже думаю выделить под них отдельный инстанс, который по длинк будет в прод за доп данными ходить по необходимости. Вариант с кликхаусом отпал потому что они пишут по одной строчки 200 отдельных инсертов в минуту, что не очень хорошо для клика

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта