Web Design Blog / Programowanie:

Logi – w systemie plików czy w bazie danych?

Data publikacji: 20 grudnia 2018

Definicja dziennika zdarzeń (czy inaczej logów) jest zawarta już w samej ich nazwie. Logi to zapis wybranych zdarzeń jakie zachodzą w aplikacji internetowej czy jakimkolwiek innym systemie komputerowym. Czynność zapisywania tych informacji nazwy się logowaniem (nie należy mylić z logowaniem się użytkowników).

Najczęstszym zadawanym przez profesjonalistów pytaniem pojawiającym się w internecie jest „Gdzie zapisywać logi?„. Najczęściej przywołuje się dwie możliwości: system plików lub baza danych. Aby zrozumieć istotę problemu trzeba najpierw odpowiedzieć na dwa kluczowe pytania:

Po co zapisuje się logi?

Dziennik zdarzeń jest prowadzony do celów:

  • wykrywanie błędów
  • analizy pracy aplikacji
  • sporządzania statystyk
  • wykrywania specyficznych działań użytkowników np. próby włamań

Co zawierają wpisy o zdarzeniach?

Wpis dziennika w aplikacji internetowej najczęściej zawiera:

  • czas zdarzenia
  • adresy url
  • rodzaj zdarzenia
  • informacje o użytkowniku wywołującym zdarzenie
  • kwalifikacja zdarzenia „normalne zachowanie, ostrzeżenie lub błąd)

O charakterze i poziomie szczegółowości logów decyduje projektant aplikacji.

Zalety przechowywania logów w bazie danych:

Skoro dziennik zdarzeń zawiera pewne dane a bazy danych służą do przechowywania i organizowania danych wydaje się więc logiczne przechowywanie ich w taki sposób. Przemawia też za tym podejściem:

  • Prostota działania – baza danych już istnieje, wystarczy dodać tabelę i dopisywać kolejne rekordy,
  • Nie trzeba mieć dodatkowych uprawnień aby zapisywać dane w bazie danych – zapisywanie w systemie plików wymaga uprawnienia systemowego,
  • Łatwość filtrowania – bazy są stworzone do wyciągania danych dokładnie takich jak potrzebujemy, dodatkowo dane są indeksowanie co może przyspieszać całą procedurę,
  • Szybszy zapis i odczyt w porównaniu do dysku twardego, który jest najczęściej najwolniejszym nośnikiem pamięci w całym systemie.
  • Większe bezpieczeństwo – częściej wykonujemy kopie zapasowe całych baz danych niż wszystkich plików – bazy danych konserwujemy z zazwyczaj większa starannością
  • Większa odporność na błędy – bazy danych są budowane i optymalizowane pod utrzymanie integralności.

Zalety przechowywania logów w systemie plików:

Trzeba też zaznaczyć, że logi w porównaniu do innych danych aplikacji internetowej są dość specyficzne. Zwykłe dane w aplikacji internetowej są zazwyczaj częściej odczytywane niż zapisywane – z logami jest całkowicie odwrotnie. Rzadko też dochodzi do częstej  potrzeby ich przeglądania i filtrowania a szybkość odczytu tak naprawdę nie jest dla nas w tym momencie istotna. Są zapisywane dość regularnie tzn, podczas działania aplikacji cały czas dochodzi do  dodawania kolejnych wpisów.

  • Nie obciążamy bazy danych – logowanie informacji o zdarzeniach wymaga kolejnego połączenia a baza danych to najbardziej „zamęczany” element w aplikacjach internetowych, przechowywanie tam logów może ją nadmiernie obciążyć – im baza danych jest większa tym wolniej działa.
  • Starsze logi można łatwo kompresować – i przy okazji zaoszczędzić miejsce i ułatwić ich usuwanie – w bazie danych jest to trudne do wykonania
  • Można zapisać błędy dotyczące baz danych – jeżeli baza danych nie działa to nie zapiszemy w niej danych – w zapisywaniu w systemie plików mamy prostszą ścieżkę krytyczną i więcej zdarzeń można zapisać.
  • Łatwość dostępu – w przypadku awarii zwykłe pliki na dysku możemy łatwiej odczytać.
  • Pamięć do przechowywania zwykłych plików jest tańsza niż pamieć serwerów baz danych, która stara się efektywnie wykorzystywać RAM.
  • Łatwość migracji – bez problemu część plików można skopiować na inne nośniki, systemy chmurowe itp.

Podsumowanie

Można z tego wszystkiego wyciągnąć następujące wnioski: jeżeli aplikacja intensywnie korzysta z bazy danych i jest używana przez wielu użytkowników należy wykorzystać system plików a więc logi należy zapisywać do zwykłych plików tekstowych. Zapisywanie logów w bazie danych jest w tym wypadku „zbyt drogie”. Logowanie tego typu można spotkać najczęściej we wszelkiego rodzaju dużych aplikacjach i frameworkach.

Jeżeli logi są bardzo istotne a ich bezpieczeństwo jest na tyle ważne, że jest warte poniesienia dodatkowych kosztów związanych z utrzymaniem aplikacji to należy użyć bazy danych. Aby nie poświęcać wydajności aplikacji warto rozważyć stworzenie osobnej bazy danych do przechowywania logów.

Logi – w systemie plików czy w bazie danych?
4.5 (90%) głosów: 10


Komentarze

Brak komentarzy.

Dodaj swój komentarz