Heim >Backend-Entwicklung >Python-Tutorial >Automatisieren Sie die Überwachung der Festplattenressourcennutzung und Serverzustandsaktualisierungen mit Python

Automatisieren Sie die Überwachung der Festplattenressourcennutzung und Serverzustandsaktualisierungen mit Python

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 10:23:03959Durchsuche

Automating Disk Resource Usage Monitoring and Server Health Updates with Python

Automatisieren Sie die Überwachung der Festplattenressourcennutzung und Serverzustandsaktualisierungen mit Python

Die Überwachung der Festplattennutzung des Servers ist entscheidend für die Aufrechterhaltung einer optimalen Leistung und die Vermeidung von Ausfallzeiten. In diesem Blogbeitrag erfahren Sie, wie Sie die Überwachung von Festplattenressourcen mithilfe eines Python-Skripts automatisieren und den Serverzustand über eine API aktualisieren können. Wir besprechen auch, wie man einen Cron-Job einrichtet, um das Skript in regelmäßigen Abständen auszuführen.

Voraussetzungen

  • Grundkenntnisse der Python-Programmierung
  • Vertrautheit mit Linux-Befehlszeilenoperationen
  • Zugriff auf einen Server, auf dem Sie Python-Skripte ausführen und Cron-Jobs einrichten können
  • Ein API-Endpunkt zum Aktualisieren des Serverzustands (ersetzen Sie ihn durch Ihre tatsächliche API-URL und Ihr Token)

Das Python-Skript erklärt

Unten finden Sie das Python-Skript, das die Überwachung der Festplattenressourcen durchführt und den Serverzustand über eine API aktualisiert.

Die Erstellung von Gesundheits-APIs wird in diesem Blogbeitrag nicht behandelt. Kommentieren Sie, wenn Sie dies auch benötigen, damit ich diese Schritte zur API-Erstellung ebenfalls veröffentlichen werde.

import subprocess
import requests
import argparse


class Resource:
    file_system = ''
    disk_size = 0.0
    used = 0.0
    avail = 0.0
    use_percent = 0.0
    mounted_on = 0.0
    disk_free_threshold = 1
    mount_partition = "/"


class ResourcesMonitor(Resource):
    def __init__(self):
        self.__file_system = Resource.file_system
        self.__disk_size = Resource.disk_size
        self.__used = Resource.used
        self.__avail = Resource.avail
        self.__use_percent = Resource.use_percent
        self.__mounted_on = Resource.mounted_on
        self.__disk_free_threshold = Resource.disk_free_threshold
        self.__mount_partition = Resource.mount_partition

    def show_resource_usage(self):
        """
        Print the resource usage of disk.
        """
        print("file_system", "disk_size", "used", "avail", "use_percent", "mounted_on")
        print(self.__file_system, self.__disk_size, self.__used, self.__avail, self.__use_percent, self.__mounted_on)

    def check_resource_usage(self):
        """
        Check the disk usage by running the Unix 'df -h' command.
        """
        response_df = subprocess.Popen(["df", "-h"], stdout=subprocess.PIPE)
        for line in response_df.stdout:
            split_line = line.decode().split()
            if split_line[5] == self.__mount_partition:
                if int(split_line[4][:-1]) > self.__disk_free_threshold:
                    self.__file_system, self.__disk_size, self.__used = split_line[0], split_line[1], split_line[2]
                    self.__avail, self.__use_percent, self.__mounted_on = split_line[3], split_line[4], split_line[5]
                    self.show_resource_usage()
                    self.update_resource_usage_api(self)

    def update_resource_usage_api(self, resource):
        """
        Call the update API using all resource details.
        """
        update_resource_url = url.format(
            resource.__file_system,
            resource.__disk_size,
            resource.__used,
            resource.__avail,
            resource.__use_percent,
            resource_id
        )

        print(update_resource_url)
        payload = {}
        files = {}
        headers = {
            'token': 'Bearer APITOKEN'
        }
        try:
            response = requests.request("GET", update_resource_url, headers=headers, data=payload, files=files)
            if response.ok:
                print(response.json())
        except Exception as ex:
            print("Error while calling update API")
            print(ex)


if __name__ == '__main__':
    url = "http://yourapi.com/update_server_health_by_server_id?path={}&size={}" \
          "&used={}&avail={}&use_percent={}&id={}"
    parser = argparse.ArgumentParser(description='Disk Resource Monitor')
    parser.add_argument('-id', metavar='id', help='ID record of server', default=7, type=int)
    args = parser.parse_args()
    resource_id = args.id
    print(resource_id)
    resource_monitor = ResourcesMonitor()
    resource_monitor.check_resource_usage()

Die Klassen Resource und ResourcesMonitor

Die Ressourcenklasse definiert die Attribute im Zusammenhang mit der Festplattennutzung, wie z. B. Dateisystem, Festplattengröße, belegter Speicherplatz und mehr. Die ResourcesMonitor-Klasse erbt von Resource und initialisiert diese Attribute.

Überprüfen der Festplattennutzung

Die Methode check_resource_usage führt den Unix-Befehl df -h aus, um Statistiken zur Festplattennutzung abzurufen. Es analysiert die Ausgabe, um die Festplattennutzung der angegebenen Mount-Partition zu ermitteln (Standard ist /). Wenn die Festplattennutzung den Schwellenwert überschreitet, werden die Ressourcendetails aktualisiert und die API-Aktualisierungsmethode aufgerufen.

Aktualisieren des Serverzustands über die API

Die Methode update_resource_usage_api erstellt die API-Anfrage-URL mit den Ressourcendetails und sendet eine GET-Anfrage, um den Serverzustand zu aktualisieren. Stellen Sie sicher, dass Sie http://yourapi.com/update_server_health_by_server_id durch Ihren tatsächlichen API-Endpunkt ersetzen und das richtige API-Token bereitstellen.

Verwendung des Skripts

Speichern Sie das Skript als resources_monitor.py und führen Sie es mit Python 3 aus.

Befehlszeilenargumente

  • -id: Die Server-ID, für die die Gesundheitsdaten aktualisiert werden sollen (Standard ist 7). Dies hilft dabei, dasselbe Skript auf mehreren Servern auszuführen, indem nur die ID geändert wird.

Beispielverwendung und -ausgabe

$ python3 resource_monitor.py -id=7

Output:
file_system disk_size used avail use_percent mounted_on
/dev/root 39G 31G 8.1G 80% /

API GET Request:
http://yourapi.com/update_server_health_by_server_id?path=/dev/root&size=39G&used=31G&avail=8.1G&use_percent=80%&id=7

Response
{'success': 'Servers_health data Updated.', 'data': {'id': 7, 'server_id': 1, 'server_name': 'web-server', 'server_ip': '11.11.11.11', 'size': '39G', 'path': '/dev/root', 'used': '31G', 'avail': '8.1G', 'use_percent': '80%', 'created_at': '2021-08-28T13:45:28.000000Z', 'updated_at': '2024-10-27T08:02:43.000000Z'}}

Automatisierung mit Cron

Um die Skriptausführung alle 30 Minuten zu automatisieren, fügen Sie wie folgt einen Cron-Job hinzu:

*/30 * * * * python3 /home/ubuntu/resource_monitor.py -id=7 &

Sie können die Cron-Jobs bearbeiten, indem Sie crontab -e ausführen und die obige Zeile hinzufügen. Dadurch wird sichergestellt, dass das Skript alle 30 Minuten ausgeführt wird und Ihre Serverzustandsdaten auf dem neuesten Stand bleiben.

Abschluss

Durch die Automatisierung der Festplattenressourcenüberwachung und Serverzustandsaktualisierungen können Sie die Leistung Ihres Servers proaktiv verwalten und potenzielle Probleme aufgrund von Speicherplatzmangel vermeiden. Dieses Python-Skript dient als Ausgangspunkt und kann an Ihre spezifischen Bedürfnisse angepasst werden.

Das obige ist der detaillierte Inhalt vonAutomatisieren Sie die Überwachung der Festplattenressourcennutzung und Serverzustandsaktualisierungen mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn