LINUX.ORG.RU

На чём написать логгер

 ,


0

2

Привет! Хочу написать логгер. В логе будут храниться небольшие (<100 символов) сообщения, которые скорее всего не будут читаться непосредственно, но на основе которых будет формироваться статистика.

При помощи каких средств правильнее, удобнее это можно сделать?

Подойдёт ли sqlite?

★

sqlite подойдёт вполне. в принципе, тут любая БД подойдёт, какая тебе больше нравится.

Iron_Bug ★★★★★
()

elastic+logstash+grafana?

Deleted
()

Подойдёт ли sqlite?

Да. только не забудь добавить поля с датой/временем и пр., если они могут понадобится для запросов.

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

долго обрабатывать. статистика должна формировать достаточно быстро: она важна не только для пользователя, на её основе также работает программа.

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

Да, так и думал: номер запуска программы, номер операции, дата и время, сообщение, или как-то так.

dann ★
() автор топика

syslog + прием в syslog-ng, который дальше может классифицировать сообщения, видоизменять их, писать в SQL и NoSQL базы, в общем что душе угодно

annulen ★★★★★
()

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

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

Все таки в текстовых файлах удобней.

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

Да уж, “удобней” некуда. Чем запись в sqlite-базу сложнее, чем это?

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

нет, у меня настроение плохое просто. Невлезай тут не причём

mittorn ★★★★★
()

Подойдёт ли sqlite?

Чисто технически использовать его можно, но, верятно, это будет большой глупостью. Всё зависит от дальнейшего способа работы с данными - если будешь разом последовательно всё прочитывать и что-то считать, то sqlite точно не нужен и даже вреден если поток данных относительно бесконечный. Нужно будет думать как чистить старые данные и тут sqlite со временем фрагментируется и может устроить пц. Самый прострой способ это текстовый лог с ротацией и последующим удалением старых кусков. Когда-то был похожий тред с чуть более объёмной задачей.

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

Нужно будет думать как чистить старые данные и тут sqlite со временем фрагментируется и может устроить пц.

https://sqlite.org/lang_vacuum.html

Да и не та задача у ТС, чтоб получить подобные проблемы. SQLite вполне себе справляется как основное хранилище данных для десятков гигов разномастных данных, а тут просто логи.

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

к примеру удобней читать, что можно без тулзы просто открыть tail и смотреть что в лог попадает

Чем запись в sqlite-базу сложнее, чем это?

абсолютно ничем. Поэтому я и предложил

Рекомендую предусмотреть разные источники хранения и далее уже выбирать для удобства

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

sqlite ненамного медленее текстовых файлов на чтение/запись а фич имеет больше.

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

а зачем это делать на c ? есть же много готовых инструментов: pandas под python например

Предлагаешь прикручивать питон, что писать логи из сишной программы?

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

нет чтобы их анализировать

У ТС другая задача.

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

Спасибо! Тема по ссылке оказалась очень познавательна.

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

Думаю, начну всё же с текстовых файлов. Спасибо!

dann ★
() автор топика

Если хочешь именно на основе какой-либо БД да еще с индексами, то подойдет все что угодно. Хоть люценовский поисковый двиг, или уже готовые обертки а-ля эластика или сфинкса как тут уже советовали выше. Но нужно отличать логгер от собственно средств обработки. Я бы пихал все в стандартные логи, а парсил это уже отдельно в нужный формат для отчетов/статистики/etc. Уже там бы и работал кэш и все прочее, но за собственно хранение самих «черновых» мессаг в логах не парился бы.

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

Ну и как, сам то читал что там написано? Компактизация БД очень дорогая операция и на время её работы с базой ничего делать нельзя. Кроме этого рСУБД c ACID доставляет и другие проблемы, можешь посмотреть тут (sqlite.org) сколько fsync() минимум уйдёт на одну запись лога и к чему смело можно накинуть несколько IOPSов на поддержку индекса без которого нельзя будет делать выборки в хронологическом порядке. Итого, получается около 50-80 записей в лог в секунду.

Это всё против обычного добавления данных в конец файла которое с буферизацией даст эффективный RPS ближе к 1M в условиях топикстартера.

Кроме этого могут быть проблемы с эффективным вычитываем большого куска записей из базы. Можно батчить запись и в sqlite, как-то особенно тюнить параметры для оптимизации работы ... но для всего этого нужно осилить кучу документации и накодить некоторое кол-во костылей не получая в замен никакой пользы.

Да и не та задача у ТС, чтоб получить подобные проблемы.

Менее 100 записей в лог в секунду это вообще ничто для любого приложения, какой-нибудь простенький hellow world для отладки может херачить в разы больше и на таком RPS будет тормозить.

SQLite вполне себе справляется как основное хранилище данных для десятков гигов разномастных данных, а тут просто логи.

Как формат записи в плоский файл разноформатных табличек с возможностью редактирования несоменно sqlite справляется. Но СУБД нужно то справляться не только с этой, вторичной, задачей.

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