Es gibt viele Tools, Komponenten und Programme zur Überwachung von Linux-Servern im Internet, aber auf einem Server laufen viele Prozesse gleichzeitig. Insbesondere bei Leistungstests können mehrere Dienste auf einem Server bereitgestellt werden. Wenn Sie nur die CPU und den Speicher des gesamten Servers überwachen, können Sie Leistungsprobleme eines Dienstes nicht effektiv und genau lokalisieren (dies kann natürlich auch mit anderen Tools erreicht werden). Daher ist es notwendig, nur bestimmte Prozesse zu überwachen. Die Anforderungen waren klar, also begann ich, ein Skript zur Leistungsüberwachung zu schreiben. 1. Allgemeines Denken 1. Um die Überwachung bequem zu starten und zu stoppen und die Überwachungsergebnisse jederzeit anzuzeigen, wenn Sie die Überwachungsergebnisse anzeigen möchten, wird ein Dienst mit Flask gestartet. Durch Senden einer Get-Anforderung können Sie die Überwachung jederzeit starten und stoppen und die Überwachungsergebnisse anzeigen. 2. Konfigurationsdateiconfig.py IP = '127.0.0.1' PORT = '5555' LEVEL = 'INFO' # Protokollebene BACKUP_COUNT = 9 # Protokollsicherungszähler LOG_PATH = 'logs' # Protokollpfad INTERVALL = 1 # Intervall, Befehlsintervall ausführen. SLEEPTIME = 3 # Intervall, wenn der Monitor gestoppt wird, Abfrage zum Starten des Monitors, wenn die Bedingung erfüllt ist. ERROR_TIMES = 5 # Mal, Anzahl der ausgeführten Befehle. Wenn gleich, wird der Monitor automatisch gestoppt. IS_JVM_ALERT = True # Gibt an, ob eine Warnung ausgegeben werden soll, wenn die Häufigkeit der vollständigen GC zu hoch ist. IS_MONITOR_SYSTEM = True # Gibt an, ob die CPU und der Speicher des Systems überwacht werden sollen. IS_MEM_ALERT = True # Gibt an, ob eine Warnung ausgegeben werden soll, wenn der Arbeitsspeicher zu niedrig ist. Die Warnung erfolgt per E-Mail. MIN_MEM = 2 # Minxium-Speicher, uint: G # 0: Cache nicht leeren, 1: Seiten-Cache löschen, 2: Dentries- und Inodes-Cache löschen, 3: 1 und 2 einschließen; # echo 1 >/proc/sys/vm/drop_caches ECHO = 0 SMTP_SERVER = 'smtp.sina.com' # SMTP-Server SENDER_NAME = 'Absendername' # Name des Absenders SENDER_EMAIL = '[email protected]' # E-Mail des Absenders PASSWORT = 'UjBWYVJFZE9RbFpIV1QwOVBUMDlQUT09' # E-Mail-Passwort, Base64-kodiert. RECEIVER_NAME = 'baidu_all' # Empfängername RECEIVER_EMAIL = ['[email protected]', '[email protected]'] # E-Mail des Empfängers DISK = 'device1' # Auf welcher Festplatte Ihre Anwendung läuft START_TIME = 'startTime.txt' # Speichert die Startzeit der Überwachung. FGC_TIMES = 'FullGC.txt' # Speichert die Zeit jedes FullGC-Zeitpunkts. #html HTML = '<html><body>{}</body><html>' FEHLER = '<p style="color:red">{}</p>' HEADER = '<div id="header"><h2 align="center">Leistungsmonitor (pid={})</h2></div>' ANALYSE = '<div id="container" style="width:730px; margin:0 auto">{}</div>' IP und PORT: Die Server-IP und der Port, auf denen der Dienst aktiviert ist. Sie müssen sich auf demselben Server befinden wie der überwachte Dienst. 3. Schnittstellen und Diensteserver.py Server = Flask(__name__) permon = PerMon() # Multithreading aktivieren t = [threading.Thread(target=permon.write_cpu_mem, args=()), threading.Thread(Ziel=permon.write_io, Argumente=())] für i im Bereich (Länge (t)): t[i].start() # Überwachung starten# http://127.0.0.1:5555/runMonitor?isRun=1&type=pid&num=23121&totalTime=3600 @server.route('/runMonitor', Methoden=['get']) def runMonitor():...... # Zeichnen Sie das Diagramm mit den Überwachungsergebnissen# http://127.0.0.1:5555/plotMonitor?type=pid&num=23121 @server.route('/plotMonitor', Methoden=['get']) def plotMonitor():....... server.run(port=cfg.PORT, debug=True, host=cfg.IP) # Starten Sie den Dienst Durch Eingabe der entsprechenden URL in die Adressleiste des Browsers können Sie die Überwachung starten und stoppen sowie die Überwachungsergebnisse anzeigen. URL-Parameterübergabe: 1. Beginnen Sie mit der Überwachung http://127.0.0.1:5555/runMonitor?isRun=1&type=pid&num=23121&totalTime=3600 2. Überwachungsergebnisse anzeigen http://127.0.0.1: 4. Überwachungperformance_monitor.py Verwenden Sie den Befehl top, um CPU und Speicher zu überwachen, verwenden Sie den Befehl jstat, um den JVM-Speicher zu überwachen (nur Java-Anwendungen), verwenden Sie den Befehl iotop, um den Prozess beim Lesen und Schreiben von Datenträgern zu überwachen, verwenden Sie den Befehl iostat, um die Datenträger-E/A zu überwachen, verwenden Sie den Befehl netstat, um den Prozess basierend auf dem Port zu überprüfen, und verwenden Sie den Befehl ps, um die Startzeit des Dienstes anzuzeigen. Daher muss der Server die oben genannten Befehle unterstützen. Wenn nicht, installieren Sie sie bitte. Hinweis: Da ein Prozess mehrere Threads starten kann, können Sie beim Anzeigen der IO des Prozesses keine IO sehen. Sie können zwar die IO eines vom Prozess gestarteten Threads sehen, die IO ist jedoch sichtbar, der Thread ändert sich jedoch ständig. Daher wird die Überwachung der IO eines angegebenen Prozesses derzeit nicht unterstützt. 5. Überwachungsergebnisse anzeigendraw_performance.py 1. Zeichnen Sie jeweils das CPU-Diagramm, das Speicher- und JVM-Diagramm, das IO-Diagramm und das Handle-Anzahl-Diagramm. Die Ergebnisse des Monitorings lauten wie folgt: 6. Erweiterungsfunktionenextern.py hat zwei Funktionen 1. Hafentransferprozess versuchen: Ergebnis = os.popen(f'netstat -nlp|grep {port} |tr -s " "').readlines() res = [line.strip() für Zeile im Ergebnis, wenn str(Port) in Zeile] p = res[0].split(' ') pp = p[3].split(':')[-1] wenn str(port) == pp: pid = p[-1].split('/')[0] außer Ausnahme als Fehler: logger.logger.error(err) 2. Suchen Sie das Protokoll mit den Überwachungsergebnissen Allgemeine Idee: (1) Suchen Sie anhand der eingegebenen Start- und Endzeit alle Protokolldateien, die diesen Zeitraum umfassen. Auffüllen 1. Um die Anzeige der aktuellsten Überwachungsstartzeit zu erleichtern, wird jede Überwachungsstartzeit in die Datei startTime.txt geschrieben. 2. Um die Fehlerbehebung bei möglichen Problemen in Java-Anwendungen zu erleichtern, schreiben Sie die Zeit jedes Full GC in die Datei FullGC.txt. Projektadresse: https://github.com/leeyoshinari/performance_monitor Zusammenfassen Oben ist die vom Herausgeber eingeführte, auf Python basierende Überwachung der Leistung von Linux-Systemen angegebener Prozesse. Ich hoffe, dass sie für alle hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
>>: Das Prinzip und die Anwendung der ES6-Dekonstruktionszuweisung
Inhaltsverzeichnis Grundlegende Übersicht GTID on...
1. Nginx-Installationsschritte 1.1 Offizielle Web...
1. Nachfrage Die Basis verfügt über 300 neue Serv...
Kopieren Sie den folgenden Code in den Codebereich...
Standardmäßig unterstützt Nginx nur ein SSL-Zerti...
Inhaltsverzeichnis 1. Komponentenregistrierung 2....
Ein gemeinsamer Index wird auch als zusammengeset...
Inhaltsverzeichnis 1. Wirkungsdiagramm (mehrere S...
So führen Sie SVG-Symbole in Vue ein Methode 1 zu...
Logpoint-basierte Replikation 1. Erstellen Sie ei...
1. JDK installieren Überprüfen Sie die Betriebsda...
Legen Sie Ihr eigenes Webprojekt im Verzeichnis w...
Vor Kurzem habe ich Vue verwendet, um das Entwick...
Zugriff verweigert: Der Grund hierfür ist: Es lie...
Inhaltsverzeichnis Grundlegende Verwendung von Pr...