Как автоматизировать мониторинг системы с помощью Python

Большинство организаций в своей деятельности в значительной степени полагаются на свою ИТ-инфраструктуру. Незапланированные сбои в работе системы или снижение ее производительности могут привести к сбоям в работе, финансовым потерям и подрыву репутации.

Автоматизированные проверки работоспособности системы имеют решающее значение для обеспечения стабильности и надежности ИТ-инфраструктуры. Отслеживая критические показатели и своевременно выявляя аномалии, можно свести к минимуму время простоя.

Определение проверок работоспособности

Очень важно определить, какие проверки работоспособности необходимо выполнять в системе. Необходимо установить четкие критерии того, что и зачем будет контролироваться. Начните с определения основных целей вашей системы. Какие функции или услуги она предоставляет?

Затем установите контрольные показатели производительности на основе исторических данных и обеспечьте проверку эффективности использования системных ресурсов. Наконец, определите пороговые значения, которые указывают на наличие проблемы. Какой процент использования ресурсов считать высоким или низким? В какой момент система должна выдать сигнал тревоги?

Выбор библиотек и настройка среды

Для автоматизации процесса мониторинга системы на языке Python вам понадобятся следующие библиотеки, которые помогут вам собрать системные метрики, а затем запланировать проверки.

  • psutil: Это кроссплатформенная библиотека, предоставляющая интерфейс для получения информации об использовании системы (процессор, память, диски, сеть, датчики).
  • schedule: Эта библиотека предоставляет простой способ планирования задач для выполнения через определенные интервалы времени.
  • time: Встроенная библиотека Python которую вы будете использовать для операций, связанных со временем.
  • logging: Еще одна встроенная библиотека, которую вы будете использовать для создания журналов проверок работоспособности системы.

Начните настройку с создания новой виртуальной среды Python Это позволит избежать возможных конфликтов библиотек версий. Затем выполните следующую команду терминала для установки необходимых библиотек с помощью Pip:

pip install psutil schedule

После установки библиотек на вашу систему среда будет готова.

Полный исходный код доступен в репозитории GitHub.

Импорт необходимых библиотек

Создайте новый скрипт monitoring.py и начните его с импорта необходимых библиотек:

import psutil
import schedule
import time
import logging

Импорт библиотек позволит вам использовать предлагаемую ими функциональность в вашем коде.

Протоколирование и отчетность

Вам необходим способ протоколирования результатов проверок работоспособности. Протоколирование служит важнейшим инструментом для фиксации и сохранения исторической записи событий и отладки проблем в коде. Оно также играет важную роль в анализе производительности.

Используйте встроенную библиотеку протоколирования для создания журналов для этого проекта. Сообщения журнала можно сохранять в файл с именем system_monitor.log.

 # Function to log messages
def log_message(message):
    # Configure logging
    logging.basicConfig(filename='system_monitor.log', level=logging.INFO,
                       format='%(asctime)s - %(message)s')
    logging.info(message)

Для создания отчетов выведите на консоль сообщение о возникновении проблем, требующих внимания.

# Function to print alerts to the console
def print_alert(message):
    print(f"ALERT: {message}")

Функции проверки работоспособности будут использовать эти функции для регистрации и сообщения о соответствующих результатах.

Создание функций проверки работоспособности

Для каждой проверки работоспособности определите функцию, которая будет содержать конкретный тест, оценивающий критический аспект вашей инфраструктуры.

Мониторинг использования процессора

Начните с определения функции, которая будет отслеживать использование процессора. Она будет служить критическим показателем общей производительности системы и использования ресурсов. Чрезмерное использование процессора приводит к замедлению работы системы, ее невосприимчивости и даже сбоям, что серьезно нарушает работу основных служб.

Регулярно проверяя использование процессора и устанавливая соответствующие пороговые значения, системные администраторы могут выявить узкие места в производительности, ресурсоемкие процессы или потенциальные проблемы с оборудованием.

# Health check functions
def check_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)

Функция проверяет текущее использование процессора в системе. Если использование процессора превышает пороговое значение в процентах, она регистрирует сообщение о высоком использовании процессора и печатает предупреждающее сообщение.

Мониторинг использования памяти

Определите еще одну функцию, которая будет отслеживать использование памяти. Регулярное отслеживание использования памяти позволяет обнаружить утечки памяти, процессы, требовательные к ресурсам, и потенциальные узкие места. Этот метод позволяет предотвратить замедление работы системы, сбои и перебои в работе.

def check_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)

По аналогии с проверкой использования процессора, задается порог высокого использования памяти. При превышении порога использования памяти создается журнал и печатается предупреждение.

Мониторинг дискового пространства

Определите функцию, которая будет контролировать дисковое пространство. Постоянный контроль доступности дискового пространства позволяет устранить возможные проблемы, связанные с истощением ресурсов. Нехватка дискового пространства может привести к сбоям в работе системы, повреждению данных и прерыванию обслуживания. Проверка дискового пространства позволяет обеспечить достаточный объем памяти.

def check_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)

Эта функция проверяет использование дискового пространства по заданному пути. По умолчанию используется корневой каталог /. Если объем дискового пространства опускается ниже порогового значения, функция записывает в журнал и выводит предупреждение.

Мониторинг сетевого трафика

Определите последнюю функцию, которая будет отслеживать поток данных в системе. Она поможет своевременно обнаружить неожиданные скачки сетевого трафика, которые могут свидетельствовать о нарушениях безопасности или проблемах с инфраструктурой.

def check_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)

Функция отслеживает сетевой трафик, суммируя отправленные и полученные байты. Пороговое значение выражается в байтах. Если сетевой трафик превышает пороговое значение, функция регистрирует его и выводит предупреждение.

Реализация логики мониторинга

Теперь, когда у вас есть функции проверки работоспособности, просто вызывайте каждую из них по очереди из функции контроллера. При каждом запуске этой общей проверки можно выводить вывод и записывать в журнал сообщение:

 # Function to run health checks
def run_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.")

Эта функция запускает все проверки работоспособности, обеспечивая единое представление состояния работоспособности системы.

Планирование автоматических проверок и запуск программы

Для автоматизации мониторинга через определенные промежутки времени используется библиотека schedule. Интервал можно изменять по мере необходимости.

# Schedule health checks to run every minute 
schedule.every(1).minutes.do(run_health_checks)

Теперь запустите процесс мониторинга системы в непрерывном цикле.

# Main loop to run scheduled tasks
while True:
    schedule.run_pending()
    time.sleep(1)

Этот цикл постоянно проверяет наличие запланированных задач и выполняет их, когда приходит время. После запуска программы на экран будет выведено следующее:

Программа записывает журналы мониторинга в файл system_monitor.log и выводит предупреждение на терминал

Развитие программы мониторинга системы

Эти проверки не являются единственными, которые поддерживает psutil. Вы можете добавить другие функции мониторинга, используя аналогичный подход, в соответствии с вашими требованиями.

Вы также можете усовершенствовать функцию создания отчетов, чтобы использовать электронную почту, а не выводить простое сообщение на консоль.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.makeuseof.com

Похожие статьи

Комментарии (0)