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
Physisch gesehen besteht eine InnoDB-Tabelle aus ...
Inhaltsverzeichnis Vorwort: 1. Einführung in Navi...
Jede Website stößt normalerweise auf viele Crawle...
Während der Django-Webentwicklung wird beim Schre...
Ich weiß nicht warum, aber UI gestaltet gerne Wab...
Inhaltsverzeichnis 1. Browserunterstützung 2. Exp...
Installieren Sie zuerst die abhängigen Pakete, um...
Vorwort Der vom Blogger verwendete Server wurde v...
Inhaltsverzeichnis Regelmäßig beschneiden Spiegel...
Frage Da einige unserer Seiten Daten im Onload-Mo...
Inhaltsverzeichnis 1. Analyse des wichtigsten Que...
Das Seitenlayout war mir schon immer ein Anliegen...
Beim Verwenden der MySql-Fensterfunktion zum Samm...
Inhaltsverzeichnis 1. Warum brauchen wir vue3? 2....
SQL-Paging-Abfrage:Hintergrund Im System des Unte...