[Narzędzia] logdetect - monitorowanie logów w czasie rzeczywistym
Witam.
W ramach zdobywania doświadczenia i poszerzania swojej wiedzy z zakresu programowania rozwijam różne swoje projekty, o tym już pisałem jakiś czas temu. Tak więc tym razem przedstawiam Wam projekt logdetect napisany w języku Python. Aktualna wersja jest w fazie alpha więc nie radzę używać tego na serwerze produkcyjnym ;‑)
Strona projektu: https://github.com/webnull/logdetect Paczki: (obecnie niedostępne)
Jak działa logdetect
Głównym zadaniem aplikacji jest monitorowanie zmian w plikach i przepuszczanie ich przez filtr który zależnie od wyniku dopasowania podejmie określone działanie.
Poprzez podjęcie działania można rozumieć dowolną czynność, a przykładowo może to być zbanowanie użytkownika, powiadomienie administratora, wyłączenie serwera, czy po prostu uruchomienie programu X.
Logdetect od środka
Działanie programu to główna pętla w której mamy ustalony w konfiguracji odstęp czasowy pomiędzy sprawdzaniem zdarzeń, może to być 500 ms, 1 sec, 60 minut, różnie - po prostu częstotliwość sprawdzania samej daty modyfikacji wszystkich plików.
Jeśli data modyfikacji różni się od poprzedniego sprawdzenia to znaczy, że plik został zmieniony - w takim razie trzeba ruszać na przód, tutaj jest kolejny krok.
Skoro zaszły jakieś zmiany to trzeba sprawdzić co dokładnie - a możliwe jest to do wykonania poprzez zapisywanie swojej pozycji w pliku, a następnie wracanie do niej przy następnym sprawdzaniu.
Kolejnym etapem jest parsowanie każdej linii przez wtyczkę do tego przeznaczoną, używa ona odpowiednich filtrów które pozwolą wyodrębnić interesujące nas dane.
W zależności od dopasowania może zostać podjęta akcja, ale z tym nie należy się śpieszyć, bo najpierw można przyznać użytkownikowi punkty ostrzeżeń. Dopiero po przekroczeniu ustalonego limitu punktów może zostać podjęta akcja. Można także zrezygnować z tej funkcji ustawiając wymaganą ilość punktów na "immediately".
Czyż to nie wynajdowywanie koła od nowa?
Pisanie tego typu aplikacji w wolnym czasie to dla mnie spore doświadczenie, lubię to robić oraz udostępniać. Myślę, że warto mieć pod ręką tą trzecią alternatywę, kto wie - być może akurat moja aplikacja będzie komuś bardziej pasować od tych popularnych, powszechnie stosowanych. Myślę, że na razie musi tylko wyjść z faz testowych, ale to nie tak prędko nastanie.
Ozdabianie koła
Staram się tak jak to możliwe implementować funkcje które są niedostępne w alternatywnych aplikacjach tego typu dlatego myślę, że jedną z takich funkcji jest obsługa FTP. Możliwe jest zdalne sprawdzanie logów od serwera do którego mamy przykładowo dostęp tylko przez FTP, bo SSH na tanich hostingach WWW przecież nie udostępniają, a serwery logi generują :‑)
A skoro mowa o funkcjach, to myślę, że przy okazji wymienię je w dużym skrócie:
+ Monitoring w czasie rzeczywistym + Możliwość zdalnego monitorowania przez FTP + Kompatybilność z Pythonem 2 i Pythonem 3, bardzo małe zależności + Rozszerzalne przez wtyczki i filtry + Prosta konfiguracja przez pliki "INI" + Własne poziomy ostrzeżeń