1 Востаннє редагувалося Bartash (23.01.2014 20:56:27)

Тема: Як організувати лог?

Доброчасу доби.

Гугловський по сабжу пише багато чого, оскільки питання не має єдиного монополістичного розв'язку.

Окреслюю ситуацію:

Припустимо, є класичний демон на С++. Основний потік демона (відмінний від main-ового, можливо - таких навіть декілька) формує якісь дані та пише до бази. Управління демоном ведеться через сокети. Важливо відслідковувати роботу демона якомога повніше, оскільки дані до бази пишуться важливі.

Власне, питання:

1. Як ліпше організувати лог? У мене дві думки зараз. Перша - писАти у файл прямо з робочого (-их) потоку (-ів). Друга - буферизувати дані для логу у якомусь буфері (спільний queue, наприклад), а потім по таймеру запускати деякий flushLogThread(), який зливатиме буфер з пам'яті на диск.

2. Де ліпше зберігати лог? Кожен рядок логу фактично структурований (тип дії, час, зміст та ін.), тому можна зберігати дані або до файлу, або до бази. Повторюся: дані досить важливі, однак демон не матиме часу довго курити. Базу вважаємо такою, що лежить на іншому сервері. СУБД - SQL Server, sqlite (у крайньому випадку - MySQL).

Прошу усіх бажаючих відписатися. Критика, зауваження та поради вітаються. :)

I belong to the Dead Generation.

2

Re: Як організувати лог?

Ще шлють по UDP на інший сервер

Подякували: Bartash1

3

Re: Як організувати лог?

Singularity написав:

Ще шлють по UDP на інший сервер

А там куди - у файли ж?

I belong to the Dead Generation.

4

Re: Як організувати лог?

в мускул би не радив складати

pew pew :D
Блоґ
Подякували: Bartash1

5

Re: Як організувати лог?

1. Якщо якомога повніше - то, вочевидь, без буферу. При падінні ризикуєте втратити все. Хай система буферизує.
2. Ви збираєтеся часто і детально шукати набори записів в логах? Якщо так - користуйтеся БД, якщо ні - пишіть в файл і не дуріть собі голову.

Подякували: Bartash1

6

Re: Як організувати лог?

koala написав:

1. Якщо якомога повніше - то, вочевидь, без буферу. При падінні ризикуєте втратити все. Хай система буферизує.
2. Ви збираєтеся часто і детально шукати набори записів в логах? Якщо так - користуйтеся БД, якщо ні - пишіть в файл і не дуріть собі голову.

Суть яка: демон читає дані з деяких файлів, формує власні пакети даних і вставляє до бази. Випадки повторного читання з файлу допускаються: контроль унікальності ведеться на рівні БД. Логи потрібні суто для того, щоб правильно виставити точку відновлення, щоб не читати заново більше файлів, ніж треба. Тому, мабуть, зупинюся на файловому способі.

@miroslav.chandler

Суто цікаво: чому не в мускул? Повільно вийде?)

I belong to the Dead Generation.

7

Re: Як організувати лог?

1. Як на мене udp не підходить. Ви відправите пакет і не знаєте чи він дойшов чи не дойшов. Тобто 1н або декілька рядків з логу можуть пропасти безслідно.

2. База не найгірший варіант. Тільки варто врахувати що якщо пропадає конекшин що тоді?

Взагалі в таких штуках варто як на мене або дублювати логи або захищатись в якийсь інший спосіб.
Пишемо завжди в файл якщо переповнився лог пишемо в базу або ще кудись. І так дальше

Важко оцінювати пріорітети того чи іншого методу не знаючи яка машина, яка відстань між базою і робочим серваком. Пінги, обєми дискового простору і інше.


Якщо є можливість і дані дійсно важливі зберігайте у декілька стореджів. Буде зручно і заодно виясните який найкращий ;)

Логи потрібні суто для того, щоб правильно виставити точку відновлення, щоб не читати заново більше файлів, ніж треба.

Коли ви запускаєте відновлення. У яких випадках?

Подякували: Bartash1

8

Re: Як організувати лог?

funivan написав:

Взагалі в таких штуках варто як на мене або дублювати логи або захищатись в якийсь інший спосіб.
Пишемо завжди в файл якщо переповнився лог пишемо в базу або ще кудись. І так дальше

Важко оцінювати пріорітети того чи іншого методу не знаючи яка машина, яка відстань між базою і робочим серваком. Пінги, обєми дискового простору і інше.


Якщо є можливість і дані дійсно важливі зберігайте у декілька стореджів. Буде зручно і заодно виясните який найкращий ;)

База та сервак -у межах однієї локалки.
Ідея подвійного запису хороша, але її реалізація у моєму випадку занадто дорогою вийде. :)

I belong to the Dead Generation.

9

Re: Як організувати лог?

funivan написав:

Логи потрібні суто для того, щоб правильно виставити точку відновлення, щоб не читати заново більше файлів, ніж треба.

Коли ви запускаєте відновлення. У яких випадках?

Поки ніде - демон у розробці. :)
А взагалі - у разі, коли впав демон/пропав конект або мережа/пошкоджені чи неповні вхідні файли.

I belong to the Dead Generation.

10

Re: Як організувати лог?

Хм досить цікаво. Я рекомендую організувати наступну схему.

У вас валять вхідні дані. Ви їх обробляєте. Завжди можете визначити чи на якому останньому рядку закінчилась обробка. А дальше уже якщо демон впав ще раз підініймайте і розгрібайте дані. Якщо увас падає база то немає сенсу робити лог в цю саму базу або робити відновлення (так як ваша база дохла і перше її треба піднімати)

Хоча мабуть це все від ситуації залежить і від схеми роботи. ;)

11

Re: Як організувати лог?

funivan написав:

Хм досить цікаво. Я рекомендую організувати наступну схему.

У вас валять вхідні дані. Ви їх обробляєте. Завжди можете визначити чи на якому останньому рядку закінчилась обробка. А дальше уже якщо демон впав ще раз підініймайте і розгрібайте дані. Якщо увас падає база то немає сенсу робити лог в цю саму базу або робити відновлення (так як ваша база дохла і перше її треба піднімати)

Хоча мабуть це все від ситуації залежить і від схеми роботи. ;)

Та, рядок визначити - не проблема. Проте дані у файлі структуровані: один логічний елемент, по суті, розміщений у кількох рядках. Якщо зупинитися десь посередині блоку - буде непоганий бубнотанок, тому ліпшим варіантом бачив відкотитися на кілька рядків назад. :)

Лог робитиму все ж у файл: логічніше, враховуючи умови.

I belong to the Dead Generation.