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.
Odpowiedz lub skomentuj