Dzięki jednej bibliotece możesz monitorować wiele wskaźników systemowych i mieć pewność, że wszystko działa płynnie.
Większość organizacji w dużym stopniu opiera swoją działalność na infrastrukturze IT. Nieplanowane awarie systemu lub pogorszenie jego wydajności mogą prowadzić do zakłóceń, strat finansowych i uszczerbku na reputacji.
Zautomatyzowane kontrole stanu systemu mają kluczowe znaczenie dla zapewnienia stabilności i niezawodności infrastruktury IT. Monitorując krytyczne wskaźniki i szybko wykrywając anomalie, możesz zminimalizować przestoje.
Definiowanie kontroli stanu
Istotne jest zdefiniowanie, jakie kontrole stanu systemu chcesz przeprowadzić. Powinieneś ustalić jasne kryteria dotyczące tego, co będziesz monitorować i dlaczego. Rozpocznij od określenia głównych celów systemu. Jakie funkcje lub usługi zapewnia?
Następnie ustaw testy porównawcze wydajności w oparciu o dane historyczne i upewnij się, że kontrole kondycji oceniają efektywne wykorzystanie zasobów systemowych. Na koniec zdefiniuj progi wskazujące na problem. Jaki procent wykorzystania zasobów uważasz za wysoki czy niski? W którym momencie system powinien wywołać alert?
Wybieranie bibliotek i konfigurowanie środowiska
Aby zautomatyzować proces monitorowania systemu w Pythonie, będziesz potrzebować następujących bibliotek, które pomogą Ci zebrać metryki systemowe, a następnie zaplanować kontrole.
- psutil: Jest to wieloplatformowa biblioteka zapewniająca interfejs do pobierania informacji o wykorzystaniu systemu (procesor, pamięć, dyski, sieć, czujniki).
- harmonogram: Ta biblioteka zapewnia prosty sposób planowania uruchamiania zadań w określonych odstępach czasu.
- czas: Wbudowana biblioteka języka Python, której będziesz używać do operacji związanych z czasem.
- Logowanie: Kolejna wbudowana biblioteka, której będziesz używać do tworzenia dzienników kontroli stanu systemu.
Zacznij konfigurować wszystko od utworzenie nowego środowiska wirtualnego Python. Zapobiegnie to potencjalnym konfliktom bibliotek wersji. Następnie uruchom następujące polecenie terminala zainstaluj wymagane biblioteki za pomocą Pip:
pip install psutil schedule
Po zainstalowaniu bibliotek w systemie środowisko jest gotowe.
Pełny kod źródłowy jest dostępny w formacie a Repozytorium GitHuba.
Importowanie wymaganych bibliotek
Utwórz nowy skrypt, monitorowanie.pyi rozpocznij od zaimportowania wymaganych bibliotek:
import psutil
import schedule
import time
import logging
Importowanie bibliotek umożliwi wykorzystanie oferowanych przez nie funkcjonalności w kodzie.
Rejestrowanie i raportowanie
Potrzebujesz sposobu na rejestrowanie wyników kontroli stanu zdrowia. Rejestrowanie służy jako istotne narzędzie do rejestrowania i zachowywania historycznego zapisu wydarzeń i debugowanie problemów w kodzie. Odgrywa również kluczową rolę w analizie wydajności.
Użyj wbudowanej biblioteki rejestrowania, aby utworzyć logi dla tego projektu. Komunikaty dziennika można zapisać w pliku o nazwie system_monitor.log.
# Function to log messages
deflog_message(message):
# Configure logging
logging.basicConfig(filename='system_monitor.log', level=logging.INFO,
format='%(asctime)s - %(message)s')
logging.info(message)
W przypadku raportowania wydrukuj komunikat ostrzegawczy na konsoli, który będzie natychmiastowym powiadomieniem o wszelkich problemach wymagających uwagi.
# Function to print alerts to the console
defprint_alert(message):
print(f"ALERT: {message}")
Funkcje kontroli stanu będą korzystać z tych funkcji w celu rejestrowania i raportowania odpowiednich ustaleń.
Tworzenie funkcji kontroli stanu
Dla każdej kontroli stanu zdefiniuj funkcję, która będzie zawierać konkretny test oceniający krytyczny aspekt infrastruktury.
Monitorowanie wykorzystania procesora
Zacznij od zdefiniowania funkcji, która będzie monitorować użycie procesora. Będzie to służyć jako krytyczny wskaźnik ogólnej wydajności systemu i wykorzystania zasobów. Nadmierne użycie procesora prowadzi do spowolnienia systemu, braku reakcji, a nawet awarii, poważnie zakłócając działanie podstawowych usług.
Regularnie sprawdzając wykorzystanie procesora i ustawiając odpowiednie progi, administratorzy systemu mogą zidentyfikować wąskie gardła wydajności, procesy wymagające dużej ilości zasobów lub potencjalne problemy ze sprzętem.
# Health check functions
defcheck_cpu_usage(threshold=50):
cpu_usage = psutil.cpu_percent(interval=1)
if cpu_usage > threshold:
message = f"High CPU usage detected: {cpu_usage}%"
log_message(message)
print_alert(message)
Funkcja sprawdza aktualne wykorzystanie procesora systemu. Jeśli użycie procesora przekracza próg procentowo, rejestruje komunikat wskazujący wysokie użycie procesora i drukuje komunikat ostrzegawczy.
Monitorowanie wykorzystania pamięci
Zdefiniuj inną funkcję, która będzie monitorować użycie pamięci. Możesz to zrobić, regularnie śledząc wykorzystanie pamięci wykryć wycieki pamięci, procesy wymagające dużych zasobów i potencjalne wąskie gardła. Ta metoda zapobiega spowolnieniom, awariom i przestojom systemu.
defcheck_memory_usage(threshold=80):
memory_usage = psutil.virtual_memory().percent
if memory_usage > threshold:
message = f"High memory usage detected: {memory_usage}%"
log_message(message)
print_alert(message)
Podobnie jak w przypadku sprawdzania użycia procesora, ustawiasz próg wysokiego zużycia pamięci. Jeśli użycie pamięci przekroczy próg, rejestruje i drukuje alert.
Monitorowanie miejsca na dysku
Zdefiniuj funkcję, która będzie monitorować miejsce na dysku. Ciągłe monitorowanie dostępności miejsca na dysku umożliwia rozwiązywanie potencjalnych problemów wynikających z wyczerpywania się zasobów. Brak miejsca na dysku może skutkować awarią systemu, uszkodzeniem danych i przerwami w świadczeniu usług. Sprawdzanie miejsca na dysku pomaga upewnić się, że jest wystarczająca pojemność.
defcheck_disk_space(path='/', threshold=75):
disk_usage = psutil.disk_usage(path).percent
if disk_usage > threshold:
message = f"Low disk space detected: {disk_usage}%"
log_message(message)
print_alert(message)
Ta funkcja sprawdza wykorzystanie miejsca na dysku w określonej ścieżce. Domyślną ścieżką jest katalog główny /. Jeśli miejsce na dysku spadnie poniżej progu, rejestruje i drukuje alert.
Monitorowanie ruchu sieciowego
Zdefiniuj końcową funkcję, która będzie monitorować przepływ danych w systemie. Pomoże to we wczesnym wykrywaniu nieoczekiwanych skoków ruchu sieciowego, które mogą wskazywać na naruszenia bezpieczeństwa lub problemy z infrastrukturą.
defcheck_network_traffic(threshold=100 * 1024 * 1024):
network_traffic = psutil.net_io_counters().bytes_recv +\
psutil.net_io_counters().bytes_sent
if network_traffic > threshold:
message = f"High network traffic detected: {network_traffic:.2f} MB"
log_message(message)
print_alert(message)
Funkcja monitoruje ruch sieciowy poprzez sumowanie wysłanych i odebranych bajtów. Próg jest w bajtach. Jeśli ruch sieciowy przekracza próg, rejestruje i drukuje alert.
Wdrażanie logiki monitorowania
Teraz, gdy masz już funkcje sprawdzania stanu, po prostu wywołaj każdą z nich po kolei z poziomu funkcji kontrolera. Możesz wydrukować dane wyjściowe i zarejestrować komunikat za każdym razem, gdy uruchamiane jest to ogólne sprawdzenie:
# Function to run health checks
defrun_health_checks():
print("Monitoring the system...")
log_message("Running system health checks...")check_cpu_usage()
check_memory_usage()
check_disk_space()
check_network_traffic()
log_message("Health checks completed.")
Ta funkcja uruchamia wszystkie kontrole stanu systemu, zapewniając ujednolicony widok stanu systemu.
Planowanie automatycznych kontroli i uruchamianie programu
Aby zautomatyzować monitorowanie w określonych odstępach czasu, skorzystasz z biblioteki harmonogramów. W razie potrzeby możesz dostosować interwał.
# Schedule health checks to run every minute
schedule.every(1).minutes.do(run_health_checks)
Teraz uruchom proces monitorowania systemu w ciągłej pętli.
# Main loop to run scheduled tasks
whileTrue:
schedule.run_pending()
time.sleep(1)
Ta pętla stale sprawdza zaplanowane zadania i wykonuje je, gdy nadejdzie ich czas. Po uruchomieniu programu wynik jest następujący:
Program zapisuje logi monitoringu na dysku system_monitor.log plik i wyświetla alert na terminalu.
Udoskonalanie programu monitorowania systemu
Te kontrole monitorowania nie są jedynymi, które obsługuje psutil. Możesz dodać więcej funkcji monitorowania, stosując podobne podejście, aby dostosować je do swoich wymagań.
Możesz także ulepszyć funkcję raportowania, aby korzystała z poczty e-mail zamiast wysyłać prostą wiadomość na konsoli.