HintergrundDa die Anzahl der Anwendungssysteme weiter zunimmt, beginnen aktive Threads, die ursprünglich keine Alarme ausgelöst haben, häufig Alarme auszulösen (etwa zweimal täglich). Obwohl die Anzahl der Alarme gering und der Schwellenwert dieses Überwachungselements nicht hoch ist (nicht mehr als 50), ist die Ausführung der Threads der Datenbank ein Punkt, der für Betrieb und Wartung ernst genommen werden muss. Im Allgemeinen werden Alarme mitten in der Nacht ausgelöst und es ist unmöglich, manuell aufzuzeichnen, welche Verbindungen verarbeitet werden, nachdem die ausgeführten Threads die Leitung passiert haben. Es gibt keine guten Tools auf dem Markt, die diese Daten automatisch aufzeichnen können. Daher wird derzeit die Aktionsfunktion von Zabbix benötigt. Zabbix-Konfiguration1. Überwachungselemente definieren Hier bin ich faul und verwende direkt das Überwachungselement „Threads Running“ in der Percona-Vorlage: 2. Auslöser definieren Dasselbe gilt für die Percona-Triggereinstellungen: 3. Erstellen Sie eine Aktion Erstellen Sie Aktionen in der unten gezeigten Reihenfolge: 4. Aktionsbedingungen Die Aktion wird nur ausgelöst, wenn die Bedingungen A, B, C und D erfüllt sind. Versuchen Sie hier, so detailliert wie möglich zu filtern, um falsche Aufrufe von Zabbix zu vermeiden. 5. Verbessern Sie den Operationsinhalt Hier ist die SSH-Methode anwendbar. Natürlich können Sie auch die benutzerdefinierte Skriptoption in der Typspalte verwenden, um dem Zabbix-Client Sudo-Berechtigungen zu erteilen. Die Befehlsleiste ist mit dem Befehl /bin/sh /opt/connect.sh gefüllt. Dies ist leicht zu verstehen. Es ruft direkt das Skript connect.sh auf. Das spezifische Skript ist im folgenden Text angehängt. 6. Ändern Sie die Zabbix-Agent-Konfiguration Geben Sie den überwachten Server ein: vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1 #Fügen Sie diesen Parameter hinzu, um den Neustart des Zabbix-Server-Remote-Befehlsdienstes Zabbix-Agent zu ermöglichen An diesem Punkt sind alle Konfigurationen im Zusammenhang mit Zabbix abgeschlossen. Als Nächstes müssen Sie nur noch das geschriebene Verarbeitungsskript in das Verzeichnis /opt legen. Funktionales SkriptWas wir dieses Mal erreichen möchten, ist die Ausgabe von Informationen wie etwa welches Konto, welche IP, welches SQL ausgeführt wird usw., wenn mehr als 50 Verbindungen bestehen. Das Skript lautet wie folgt: #!/bin/sh export PATH=$PATH:/usr/bin da=`Datum +%Y%m%d` dc=`Datum +%J-%m-%d" "%H:%M:%S` echo $dc"----------------------------------Ich bin die Trennlinie------------------------------------" >> /tmp/ok_$da.log /usr/local/mysql/bin/mysql -uroot -pXXX -e "Wählen Sie * aus information_schema.PROCESSLIST aus, wobei COMMAND != 'Sleep' sortiert nach TIME DESC;" >> /tmp/ok_$da.log ErweiterungenDa Zabbix beim Auslösen eines Alarms Skripte aufrufen kann, ist es möglich, Zabbix komplexere Aufgaben erledigen zu lassen? Datenbankverbindung, Sperre, Speicher-Engine und andere Informationen #!/bin/sh export PATH=$PATH:/usr/bin da=`Datum +%Y%m%d` dc=`Datum +%J-%m-%d" "%H:%M:%S` echo $dc"----------------------------------Ich bin die Trennlinie------------------------------------" >> /home/zabbix/engine_log/engine_log_$da.log /usr/bin/mysql -hlocalhost -uroot -pXXX -e "InnoDB-Status der Engine anzeigen \G;" >> /home/zabbix/engine_log/engine_log_$da.log echo -e "\n\n\n" >> /home/zabbix/engine_log/engine_log_$da.log echo $dc"----------------------------------Ich bin die Trennlinie------------------------------------" >> /home/zabbix/processlist/processlist_$da.log /usr/bin/mysql -hlocalhost -uroot -pXXX -e "Wählen Sie * aus information_schema.processlist, wobei Zeit>=0 und Befehl !='sleep' nach Zeit desc \G; sortiert ist" >> /home/zabbix/processlist/processlist_$da.log echo -e "\n\n\n" >> /home/zabbix/prozessliste/prozessliste_$da.log echo $dc"----------------------------------Ich bin die Trennlinie------------------------------------" >> /home/zabbix/lock/lock_$da.log /usr/bin/mysql -hlocalhost -uroot -pXXX -e "select 'Blocker' role, p.id, p.user, left(p.host, locate(':', p.host) - 1) host, tx.trx_id, tx.trx_state, tx.trx_started, timestampdiff(second, tx.trx_started, now()) duration, lo.lock_mode, lo.lock_type, lo.lock_table, lo.lock_index, tx.trx_query, tx.trx_tables_in_use, tx.trx_tables_locked, tx.trx_rows_locked from information_schema.innodb_trx tx, information_schema.innodb_lock_waits lw, information_schema.innodb_locks lo, information_schema.processlist p where lw.blocking_trx_id = tx.trx_id and p.id = tx.trx_mysql_thread_id and lo.lock_trx_id = tx.trx_id union all select 'Blockee' role, p.id, p.user, left(p.host, locate(':', p.host) - 1) host, tx.trx_id, tx.trx_state, tx.trx_started, timestampdiff(second, tx.trx_started, now()) duration, lo.lock_mode, lo.lock_type, lo.lock_table, lo.lock_index, tx.trx_query, tx.trx_tables_in_use, tx.trx_tables_locked, tx.trx_rows_locked from information_schema.innodb_trx tx, information_schema.innodb_lock_waits lw, information_schema.innodb_locks lo, information_schema.processlist p where lw.requesting_trx_id = tx.trx_id and p.id = tx.trx_mysql_thread_id and lo.lock_trx_id = tx.trx_id \G;" >> /home/zabbix/lock/lock_$da.log echo -e "\n\n\n" >> /home/zabbix/lock/lock_$da.log val=`/usr/bin/mysql -hlocalhost -uroot -pXXX -N -e "zeige Variablen wie 'general_log'" |awk '{print $2}'` wenn [ $val = 'AUS' ]; Dann /usr/bin/mysql -hlocalhost -uroot -pXXX -e "globales General_Log festlegen=0;" anders Ausgang 0; fi Wenn die Datenbank stark unter Druck steht, können Sie die Sperrinformationen, Verbindungsinformationen und Informationen zur Speicher-Engine aufzeichnen. Als Auslöser des sogenannten Hochdrucks können folgende Faktoren gelten:
All dies kann als Auslösebedingungen dienen. Beenden Sie langes SQL #!/bin/sh export PATH=$PATH:/usr/bin da=`Datum +%Y%m%d` dc=`Datum +%J-%m-%d" "%H:%M:%S` Benutzer="root" Passwort="XXX" val=`mysql -u$user -p$password -N -e "Wählen Sie count(*) aus information_schema.processlist aus, wobei Zeit>=180 und Befehl ='Abfrage' und Benutzer in ('Jobname','Bericht')" | awk '{print $1}'` wenn [ $val -gt 0 ]; Dann echo $dc"----------------------------------Ich bin die Trennlinie------------------------------------" >> /home/zabbix/kill_log/long_query_$da.log mysql -u$user -p$password -e "Wählen Sie * aus information_schema.processlist aus, wobei Zeit>=180 und Befehl = 'Abfrage' und Benutzer in ('Jobname', 'Bericht') nach Zeit sortiert absteigend \G;" >> /home/zabbix/kill_log/long_query_$da.log echo -e "\n\n\n" >> /home/zabbix/kill_log/long_query_$da.log count=`mysql -u$user -p$password -N -e "Wählen Sie die ID aus information_schema.processlist, wobei Zeit>=180 und Befehl ='Abfrage' und Benutzer in ('Jobname','Bericht')"` für ID in $count; Tun mysql -u$Benutzer -p$Passwort -e "kill $id" Erledigt anders Ausgang 0; fi Manchmal werden einige Jobs oder SQL-Berichte dort über einen langen Zeitraum ausgeführt, was sich auf andere Unternehmen auswirkt. Wir können einfach davon ausgehen, dass ein Überlasten der Datenbankverbindung hauptsächlich darauf zurückzuführen ist, dass dort ein großes SQL gerammt wird. Zu diesem Zeitpunkt kann Zabbix dieses Skript aufrufen, um SQL, das von speziellen Konten initiiert wurde, für mehr als 180 Sekunden zu beenden. Die Bedingungen zum Beenden von SQL können im Skript angepasst werden. Natürlich sollten SQL-Anweisungen, deren Verarbeitung bekanntermaßen lange dauert, aus der Datenbank ausgeführt werden. Löschen Sie nutzlose Protokolle#!/bin/sh logdir='/mysql/logs' binlog='/mysql/binlog' var_percent=`df -h |grep var|grep dev/sda|awk '{print $5}'|awk -F% '{print $1}'` wenn [ -z $var_percent ] || [ $var_percent -lt 90 ];dann Echo "egal" Ausfahrt 0 fi Datum >>$binlog/del_list.txt Liste = `ls -l --time-style = '+%Y-%m-%d %H:%M:%S' $binlog/mysql-bin.0?????|awk '{print $6","$7","$8}'` für i in $list Tun Dateizeit=`echo $i|awk -F "," '{print $1,$2}'` Dateizeitstempel=`Datum -d "$Dateizeit" +%s` aktuelle_Zeit = `Datum + %s` wenn [ $(($cur_time - $filetimestamp)) -gt $((3*24*3600)) ];dann Dateiname=`echo $i|awk -F, '{print $3}'` echo "$filename wird gelöscht">>$binlog/del_list.txt /bin/rm $Dateiname fi Erledigt wenn [ -f $logdir/mysql-slow.log ];dann slow_log_size=`stat $logdir/mysql-slow.log|grep 'Größe:'|awk -F ':' '{print $2}'|awk '{print $1}'` wenn [ $slow_log_size -gt $((2*1024*1024*1024)) ];dann echo "$logdir/mysql-slow.log">>$logdir/del_list.txt /bin/rm $logdir/mysql-slow.log fi fi Manchmal sind Binlog und Slowlog nicht auf automatisches Löschen eingestellt und der Speicherplatz wird mit der Zeit voll. Zu diesem Zeitpunkt können wir das Überwachungselement „Freier Speicherplatz auf /mysql“ zuordnen, den Schwellenwert überprüfen und das obige Skript aufrufen, um nutzloses Binlog und Slowlog zu bereinigen. In einigen Situationen, die auf Binlog angewiesen sind, z. B. wenn Master und Slave unterbrochen werden und später wiederhergestellt werden müssen, muss es mit Vorsicht verwendet werden. Referenzlinks:Holen Sie sich Datenbankverbindungsinformationen und einige Erweiterungen über Zabbix: https://www.jb51.net/article/207412.htm Dies ist das Ende dieses Artikels zum Abrufen von Datenbankverbindungsinformationen und einigen Erweiterungen über Zabbix. Weitere relevante Inhalte zur Zabbix-Datenbankverbindung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Vue-Projektoptimierung und -verpackung
>>: So implementieren Sie „insert if none“ und „update if yes“ in MySql
Nginx ist ein leistungsstarker, leistungsstarker ...
Szenario Das Unternehmensprojekt wird in Docker b...
Vorsichtsmaßnahmen 1) Interpreter am Anfang hinzu...
In JavaScript können drei Arten von Meldungsfelde...
Vorwort Wenn wir Abfrageanweisungen verwenden, mü...
1. Suchen Sie zunächst die Datendatei auf dem Mig...
Manchmal ist es schön, ein paar nette Scrollbar-E...
In letzter Zeit verwendet das Projekt Kubernetes ...
Vorstehend: Dieses Dokument basiert auf der Annah...
Diese Datenbankabfrageanweisung ist eine von 50 D...
Meta-Tag-Funktion Der META-Tag ist ein Schlüsselt...
CSS-Viewport-Einheiten gibt es schon seit einigen...
Kürzlich bin ich auf die Anforderung gestoßen, Te...
1. Übersicht über TCP-Wrapper TCP Wrapper „verpac...
Vorwort Vergessene Passwörter sind ein Problem, d...