Logujesz się do pliku tekstowego lub bazy danych?


25

Kiedy powinienem używać bazy danych do logowania, a kiedy pliki tekstowe?
Widzę, że serwery i frameworki (z których aplikacja korzysta wewnętrznie) zazwyczaj (zawsze?) Domyślnie rejestrują żądania i błędy w plikach tekstowych. Widzę jednak, że ludzie, którzy rozwijają swoją aplikację w oparciu o te serwery i frameworki, czasami logują się do bazy danych (nawet głównej bazy danych aplikacji, a nie zewnętrznej).
Być może istnieje różnica między dziennikami debugowania a dziennikami kontroli - przeczytałem tę klasyfikację gdzieś na tej stronie.





Chociaż nie powinieneś rejestrować poufnych informacji, niektóre systemy mogą tego wymagać, i jest to dobry powód do logowania się do bazy danych. Czasami programiści nieumyślnie rejestrują poufne informacje. Aby uchronić się przed tym wypadkiem, wielu programistów aplikacji loguje się tylko do bazy danych, więc numery ubezpieczenia społecznego w komunikatach dziennika nie znajdują się w pliku tekstowym w postaci zwykłego tekstu na 13 różnych serwerach.
Greg Burghardt

Odpowiedzi:


16

Mówiąc bardzo ogólnie, logowanie do pliku tekstowego jest znacznie szybsze niż logowanie do bazy danych. To główny aspekt rejestrowania, który należy wziąć pod uwagę.

Powodem, dla którego logujesz się do bazy danych jest bardziej prawdopodobne, ponieważ chcesz zapytać o wyniki - wyszukiwanie danych dziennika jest łatwiejsze w bazie danych, szczególnie jeśli logujesz informacje kontekstowe, których można użyć do grupowania wpisów dziennika. Zwykle łatwiej jest również uzyskać dostęp do centralnej bazy danych niż do pliku dziennika na serwerze, który może być zabezpieczony i niedostępny.

Idealnym rozwiązaniem byłoby zalogowanie się lokalnie do pliku, a następnie migracja tych danych do bazy danych w celu sprawdzenia, jeśli zajdzie taka potrzeba.

Teraz audyt to zupełnie inna bestia. Chociaż jest to koncepcja podobna do rejestrowania, inspekcja jest zwykle potrzebna do przechowywania przez długi czas (w przeciwieństwie do plików dziennika używanych do debugowania lub śledzenia, które można usunąć kaprysem). Audyty mają na celu pokazanie ważnych informacji. Rejestrujesz znacznie mniej informacji kontrolnych i rzadziej niż zwykłe rejestrowanie, więc wydajność nie jest problemem. Z tego powodu widoczne są zalety pisania tych informacji kontroli do centralnej bazy danych.


1
Innym rozwiązaniem, które widziałem, jest zapisywanie dzienników lokalnie na początku, a następnie wypychanie ich do bazy danych przez jakieś zadanie w tle.
Robbie Dee

@RobbieDee Podoba mi się ten pomysł. Mam coś w rodzaju duplikatu: czy często pliki dziennika mają ograniczony czas trwania (np. Tylko ostatnie 30 dni), ale ponieważ dzienniki są wypychane do bazy danych (np. Co tydzień), to wszystkie dzienniki są przechowywane w bazie danych => pliki dziennika działają jak tylko bufor i wszystkie operacje odczytu są wykonywane w bazie danych? Ponieważ pisanie w DB jest opóźnione, nie martw się o wydajność, prawda?
Al-un

9

Nie ma jednego uniwersalnego podejścia, a ze względu na odporność czasami trzeba zastosować wiele podejść. Biorąc przykład, możesz chcieć ukryć dzienniki debugowania w pliku i przechowywać dzienniki kontroli w bazie danych.

Bułka tarta aplikacji

Zalety: Łatwy do wdrożenia i od razu widoczny dla użytkownika

Wady: informacje są przechowywane tylko podczas działania aplikacji

Plik tekstowy

Plusy: łatwe do wdrożenia

Minusy: Konieczne jest zablokowanie pliku. Co zrobić, gdy na dysku dziennika zabraknie miejsca na dysku?

Dziennik zdarzeń

Plusy: łatwe do wdrożenia

Wady: dziennik zdarzeń może się zapełnić, jeśli nie zostanie poprawnie skonfigurowany lub stare dzienniki mogą zostać utracone z powodu zasad przechowywania / usuwania.

Baza danych

Plusy: łatwe do wdrożenia

Minusy: większy ruch DB. Jak zarejestrować utratę DB lub innego problemu z DB?

Wiadomości (MQ)

Plusy: Strzelaj i zapominaj

Minusy: kolejna warstwa, która może się nie udać. Wymaga konfiguracji


Możesz także dołączyć demona syslog i miejsca docelowe dziennika SNMP.
gbjbaanb

@gbjbaanb Cóż - niektóre systemy operacyjne mają wbudowaną taką funkcjonalność - z pewnością nie jest to wyczerpująca lista. Systemy wysokiej dostępności mogą również wysyłać SMS-y, gdy spadną.
Robbie Dee

2

Dzienniki audytu muszą zapewniać pełną identyfikowalność operacji przez dłuższy czas dla celów audytu, w celu pełnego uzasadnienia zawartości bazy danych.

W niektórych przypadkach (np. Aplikacje finansowe) dzienniki te mogą wymagać zapewnienia zgodności z wymogami prawnymi, takimi jak przechowywanie (w niektórych krajach przez 10 lat) lub niezmienność. Ponieważ dzienniki te muszą uzasadniać zawartość bazy danych na poziomie aplikacji, powszechną praktyką jest przechowywanie ich w bazie danych, gdzie dostęp można kontrolować, aby uniknąć nieautoryzowanych zmian.

Inne dzienniki , takie jak dzienniki monitorowania lub dzienniki zabezpieczeń, często muszą radzić sobie z ograniczeniami wydajności i woluminów. Zazwyczaj są one zapisywane w pliku, ponieważ zapisywanie jest szybsze (bez narzutów związanych z zarządzaniem transakcjami), łatwiejsze do archiwizacji offline i łatwiejsze do zintegrowania z zewnętrznymi narzędziami SIEM do monitorowania .

Należy zauważyć, że chociaż tego rodzaju dzienniki można wykorzystać do wykazania wiarygodności dzienników kontroli (np. Brak nieautoryzowanego dostępu), mają one generalnie krótsze ograniczenia przechowywania (na przykład od 6 miesięcy do 2 lat dla celów egzekwowania prawa od dzienników telekomunikacyjnych) jeśli w ogóle jakieś ograniczenie.


1

Jednym z wielu powodów, dla których warto korzystać z bazy danych do rejestrowania debugowania, jest brak dostępu do aplikacji lub serwera WWW w celu przeglądania podglądu zdarzeń lub plików tekstowych

Dzienniki audytu różnią się od dzienników debugowania w kontekście aplikacji internetowej, ponieważ w niektórych aplikacjach może być konieczne pokazanie ich użytkownikowi końcowemu, aby mogli oni przejść do bazy danych w celu łatwego wyszukiwania.

Możesz użyć DB Tools do filtrowania i łatwego przeglądania.


Zapisywanie do plików dziennika serwera nie jest jedyną opcją dla systemów o wysokiej współbieżności. Te dzienniki są często zapisywane na urządzeniu klienckim, a następnie przekazywane do obsługi w przypadku wystąpienia problemu. Wysoka współbieżność może również uniemożliwić zapisywanie w jednej bazie danych.
Robbie Dee

@RobbieDee Czy dotyczy to również serwerów i aplikacji internetowych? bo o to właśnie prosi OP
Muhammad Raja
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.