Wie unten dargestellt: #!/usr/bin/env python3.5 psutil importieren mysql.connector importieren Argparse importieren JSON importieren Datum/Uhrzeit importieren def get_cpu_info(ausführlich): cpu_info={} wenn ausführlich >0: drucken("[cpu] Beginnen Sie mit dem Sammeln der CPU-Informationen ...") Daten = psutil.cpu_times_percent(3) cpu_info['Benutzer'] = Daten[0] cpu_info['system']=Daten[2] cpu_info['Leerlauf']=Daten[3] cpu_info['iowait']=Daten[4] cpu_info['hardirq']=Daten[5] cpu_info['softirq']=Daten[6] cpu_info['cpu_cores'] = psutil.cpu_count() wenn ausführlich >0: drucken("{0}".format(json.dumps(cpu_info,ensure_ascii=False,indent=4))) drucken("[cpu] Sammlung abgeschlossen ...") CPU-Informationen zurückgeben def get_mem_info(ausführlich): mem_info={} wenn ausführlich >0: drucken("[mem] Beginne mit dem Sammeln der Speicherinformationen ...") Daten = psutil.virtual_memory() mem_info['gesamt'] = Daten[0]/1024/1024/1024 mem_info['avariable']=Daten[1]/1024/1024/1024 wenn ausführlich>0: drucken("{0}".format(json.dumps(mem_info,ensure_ascii=False,indent=4))) drucken("[mem] Sammlung abgeschlossen ...") Speicherinformationen zurückgeben def get_disk_info(ausführlich): disk_info={} wenn ausführlich >0: drucken("[disk] starte das Sammeln von Disk-Informationen ...") partitionen = psutil.disk_partitions() partitions=[(partition[1],partition[2])für Partition in Partitionen, wenn Partition[2]!='iso9660'] disk_info={} für die Aufteilung in Partitionen: disk_info[partition[0]]={} disk_info[partition[0]]['fstype']=partition[1] für mount_point in disk_info.keys(): Daten = psutil.disk_usage(Einhängepunkt) disk_info[mount_point]['total']=Daten[0]/1024/1024/1024 disk_info[mount_point]['used_percent']=Daten[3] wenn ausführlich >0: drucken("{0}".format(json.dumps(disk_info,ensure_ascii=False,indent=4))) drucken("[disk] Sammlung abgeschlossen ....") Disk_Info zurückgeben def get_mysql_info(cnx_args, status_list): Konfiguration={ 'Benutzer':cnx_args.user, 'Passwort':cnx_args.password, 'Gastgeber':cnx_args.host, 'Port':cnx_args.port} cnx=Keine Cursor=Keine mysql_info={} versuchen: cnx = mysql.connector.connect(**Konfiguration) Cursor = cnx.cursor(vorbereitet=True) für Index im Bereich (Länge (Statusliste)): status_list[index].get_status(cursor) status=Statusliste[Index] mysql_info[status.name]=status.wert mysql_info['Port'] = Konfiguration['Port'] außer mysql.connector.Error als err: drucken(fehler) Endlich: wenn Cursor != Keine: cursor.schließen() wenn cnx != Keine: cnx.schließen() mysql_info zurückgeben Klasse Status (Objekt): def __init__(selbst, Name): selbst.name = Name self._value=Keine def get_status(selbst, Cursor): stmt="globalen Status wie '{0}' anzeigen;".format(self.name) cursor.execute(stmt) Wert = Cursor.fetchone()[1].decode('utf8') self._Wert = int(Wert) @Eigentum def-Wert (selbst): wenn self._value==Keine: Ausnahme auslösen("Wert kann nicht abgerufen werden, bevor die Funktion get_status ausgeführt wird") anders: returniere self._value IntStatus=Status Klasse DiskResource (Objekt): def __init__(selbst, Einhängepunkt, Status): self.mount_point=Einhängepunkt selbst.status = Status def __str__(selbst): Ergebnis=''' <div class="stage-list"> <div class="stage-title"><span>{0}</span></div> <div Klasse="Detail"> <p Klasse="Detailliste"> <span class="detail-title">Formate unterscheiden</span> <span class="detail-describe">{1}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">Gesamtgröße des Speicherplatzes</span> {2:8.2f}G </p> <p Klasse="Detailliste"> <span class="detail-title">Freier Speicherplatz (%)</span> {3:8.2f} </p> <p Klasse="Detailliste"> </p> </div> </div>\n'''.format(self.mount_point,self.status['fstype'],self.status['total'],self.status['used_percent']) Ergebnis zurückgeben Klasse diskResources(Objekt): def __init__(selbst, status): selbst.disketten = [] für mount_point in status.keys(): self.disks.append(diskResource(Einhängepunkt,status[Einhängepunkt])) def __str__(selbst): Ergebnis=''' <div class="list-item"> <div Klasse="Kategorie"> <span>Datenträger</span> </div> <div Klasse="zweite Stufe">\n''' für Index im Bereich (Länge (self.disks)): Ergebnis = Ergebnis + self.disks[index].__str__() Ergebnis=Ergebnis+''' </div> </div>\n''' Ergebnis zurückgeben Klasse cpuResources (Objekt): def __init__(selbst, status): selbst.status = Status def __str__(selbst): Ergebnis=''' <div class="list-item"> <div Klasse="Kategorie"> <span>Zentrale Prozessoreinheit</span> </div> <div Klasse="zweite Stufe"> <div Klasse="Bühnenliste"> <div class="stage-title"><span>global</span></div> <div Klasse="Detail"> <p Klasse="Detailliste"> <span class="detail-title">Benutzerspeicherplatznutzung (%)</span> <span class="detail-describe">{0}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">Kernel-Speicherplatznutzung (%)</span> <span class="detail-describe">{1}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">Leerlauf (%)</span> <span class="detail-describe">{2}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">Harte Unterbrechung (%)</span> <span class="detail-describe">{3}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">Weiche Unterbrechung (%)</span> <span class="detail-describe">{4}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">io-Wartezeit (%)</span> {5} </p> <p Klasse="Detailliste"> </p> </div> </div> </div> </div>\n'''.format(self.status['Benutzer'],self.status['System'],self.status['Leerlauf'],self.status['hardirq'],self.status['softirq'],self.status['iowait']) Ergebnis zurückgeben Klasse memResources (Objekt): def __init__(selbst, status): selbst.status = Status def __str__(selbst): Ergebnis=''' <div class="list-item"> <div Klasse="Kategorie"> <span>Speicher</span> </div> <div Klasse="zweite Stufe"> <div Klasse="Bühnenliste"> <div class="stage-title"><span>global</span></div> <div Klasse="Detail"> <p Klasse="Detailliste"> <span class="detail-title">Gesamtgröße</span> {0:8.2f}G </p> <p Klasse="Detailliste"> <span class="detail-title">Freie Größe</span> {1:8.2f}G </p> <p Klasse="Detailliste"> </p> </div> </div> </div> </div>'''.format(self.status['gesamt'],self.status['avariable']) Ergebnis zurückgeben Klasse mysqlResources(Objekt): def __init__(selbst, status): selbst.status = Status def __str__(selbst): Ergebnis=''' <div class="list-item"> <div Klasse="Kategorie"> <span>MYSQL</span> </div> <div Klasse="zweite Stufe"> <div Klasse="Bühnenliste"> <div class="stage-title"><span>{0}</span></div> <div Klasse="Detail"> <p Klasse="Detailliste"> innodb_log_wait <span class="detail-describe">{1}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">binlog_cache_use</span> <span class="detail-describe">{2}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">temp_disk_table erstellen</span> <span class="detail-describe">{3}</span> </p> <p Klasse="Detailliste"> <span class="detail-title">Langsame Abfragen</span> <span class="detail-describe">{4}</span> </p> <p Klasse="Detailliste"> </p> </div> </div> </div> </div>'''.format(self.status['Port'],self.status['Innodb_log_waits'],self.status['Binlog_cache_use'], self.status['Erstellte temporäre Festplattentabellen'], self.status['Langsame Abfragen']) Ergebnis zurückgeben Klasse hostResources (Objekt): def __init__(self,cpu_info,mem_info,disk_info,mysql_info,report_title='MySQL-Prüfbericht'): self.cpu = CPU-Ressourcen(CPU-Info) self.mem = memResources(mem_info) self.disk = Datenträgerressourcen(Datenträgerinfo) self.mysql = mysqlResources(mysql_info) self.report_title = Berichtstitel def __str__(selbst): Ergebnis='''<!DOCTYPE html> <html lang="de"> <Kopf> <meta charset="UTF-8"> <title>Inspektionsbericht</title> <Stil> *{ Rand: 0; Polsterung: 0; } .Inhalt{ Breite: 1000px; Höhe: automatisch; Rand: 30px automatisch; Rahmen unten: 1px durchgezogen #b2b2b2; } .Listenelement{ Rand: 1px durchgezogen #b2b2b2; Rahmen unten: keiner; Übergang: alle .35er; Überlauf: versteckt; Anzeige: Flex; } .list-item:empty{ Anzeige: keine; } .top-Titel{ Zeilenhöhe: 32px; Schriftgröße: 16px; Farbe: #333; Texteinzug: 10px; Schriftstärke: 600; } .Kategorie{ Breite: 97px; Höhe: automatisch; Rahmen rechts: 1px durchgezogen #b2b2b2; schweben: links; Textausrichtung: zentriert; Position: relativ; } .stage-title>span, .Kategorie>Spanne{ Anzeige: Block; Höhe: 20px; Breite: 100 %; Textausrichtung: zentriert; Zeilenhöhe: 20px; Position: absolut; oben: 50 %; Rand oben: -10px; links: 0; } .zweite Stufe{ Breite: 900px; schweben: links; } .Bühnenliste{ Rahmen unten: 1px durchgezogen #b2b2b2; Anzeige: Flex; } .stage-list:letztes-Kind{ Rahmen unten: 0; } .Bühnentitel{ Breite: 99px; Rahmen rechts: 1px durchgezogen #b2b2b2; Position: relativ; } .Detail{ biegen: 1; } .detail-Liste{ Rahmen unten: 1px durchgezogen #b2b2b2; Höhe: 40px; Anzeige: Flex; Übergang: alle .35er; } .detail-titel{ Polsterung: 10px; Höhe: 20px; Zeilenhöhe: 20px; Rahmen rechts: 1px durchgezogen #b2b2b2; Breite: 200px; } .detail-beschreiben{ biegen: 1; Polsterung: 10px; Zeilenhöhe: 20px; } .detail-list:letztes-Kind{ Rahmen unten: 0; } .list-item:hover{ Hintergrundfarbe: #eee; } .detail-list:hover{ Hintergrundfarbe: #d1d1d1; } </Stil> </Kopf> <Text> <div Klasse="Inhalt"> <div Klasse="Listenelement"> <p class="top-title">Berichtstitel</p> </div>\n''' Ergebnis = Ergebnis.Ersetzen('Berichtstitel', selbst.Berichtstitel) Ergebnis = Ergebnis + self.cpu.__str__() Ergebnis = Ergebnis + self.mem.__str__() Ergebnis = Ergebnis + self.disk.__str__() Ergebnis = Ergebnis + self.mysql.__str__() Ergebnis=Ergebnis+''' </div> </body> </html>''' Ergebnis zurückgeben wenn __name__=="__main__": Parser = argparse.ArgumentParser() parser.add_argument('--verbose',Typ=int,Standard=1,Hilfe='ausführlich für Ausgabe') parser.add_argument('--user',default='chkuser',help='Benutzername für Verbindung mit MySQL') parser.add_argument('--password',default='123456',help='Benutzerkennwort für Verbindung mit MySQL') parser.add_argument('--host',Standard='127.0.0.1',Hilfe='MySQL-Host-IP') parser.add_argument('--port',Standard=3306,Typ=int,Hilfe='MySQL-Port') parser.add_argument('--int-status',Standard=('Com_select,Com_insert,Com_update,Com_delete,Innodb_log_waits,' „Binlog_cache_disk_use,Binlog_cache_use,Erstellte temporäre Festplattentabellen,“ „Langsame Abfragen“) ,help='mysql status, sein Wert ist wie int') parser.add_argument('--report-title',default='MySQL-Prüfbericht',help='Berichtstitel') parser.add_argument('--output-dir',default='/tmp/',help='Standardausgabepfad für Berichtsdateien') args = parser.parse_args() cpu_info = get_cpu_info(args.verbose) mem_info = get_mem_info(args.verbose) disk_info = get_disk_info(args.verbose) status_list=[ IntStatus(name=item) für Element in args.int_status.split(',')] mysql_info = get_mysql_info(Argumente, Statusliste) #dr=diskResources(Datenträgerinfo) #cr=cpuResources(cpu_info) #mr=memResources(Speicherinfo) #msr=mysqlResources(mysql_info) hr = Hostressourcen(CPU-Info, Mem-Info, Festplatteninfo, MySQL-Info, Argumente.Berichtstitel) jetzt = str(datetime.datetime.now()).replace(' ','^') wenn args.output_dir.endswith('/') != True: args.output_dir = args.output_dir + '/' Dateiname=args.output_dir+'mysql_inspection_{0}.html'.format(jetzt) mit open(filename,'w') als Ausgabe: Ausgabe.Schreiben(hr.__str__()) drucken('[Bericht] der Bericht wurde in {0} gespeichert, ok... ....'.format(Dateiname)) Das obige MySQL-Inspektionsskript (unbedingt lesen) ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. |
<<: Ausführliche Erklärung der Umgebungsvariablen und Konfigurationsdateien in CentOS
>>: JavaScript, um den Effekt des Klickens auf das Untermenü zu erzielen
Befehl „touch“ Es hat zwei Funktionen: Eine beste...
@vue+echarts realisiert den Flusseffekt der China...
1. Verwenden Sie zunächst Springboot, um ein einf...
1. Verwenden Sie zur Ausführung weiterhin ein PHP...
In diesem Artikel wird der spezifische JavaScript...
Die Attribute des <TR>-Tags werden verwende...
1. In Windows-Systemen erfordern viele Softwarein...
1 Ziehen Sie das Bild von hup Docker-Pull Nginx 2...
In diesem Artikelbeispiel wird der spezifische Co...
Lassen Sie mich zunächst einen Blick auf den Beis...
Das Folgende ist mein Urteil basierend auf der Da...
Inhaltsverzeichnis 1. Projektumgebung: 2: DNS-Ser...
Inhaltsverzeichnis 1. Beschreibung 2. Installatio...
Inhaltsverzeichnis 1. Ersetzen Sie die Apply-Meth...
Konfigurieren des Alibaba Cloud Docker Container ...