Erhalten Sie schnell Datenbankverbindungsinformationen und einige Erweiterungen über Zabbix

Erhalten Sie schnell Datenbankverbindungsinformationen und einige Erweiterungen über Zabbix

Hintergrund

Da 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-Konfiguration

1. Überwachungselemente definieren

Hier bin ich faul und verwende direkt das Überwachungselement „Threads Running“ in der Percona-Vorlage:

Bildbeschreibung hier einfügen

2. Auslöser definieren

Dasselbe gilt für die Percona-Triggereinstellungen:

Bildbeschreibung hier einfügen

3. Erstellen Sie eine Aktion

Erstellen Sie Aktionen in der unten gezeigten Reihenfolge:

Bildbeschreibung hier einfügen

4. Aktionsbedingungen

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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 Skript

Was 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

Erweiterungen

Da 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:

  • threads-running: Zu viele Verbindungen laufen
  • Innodb Row Lock Waits: Die Wartezeit für die Sperre ist zu lang
  • Com Select\Update\Insert\Delete: Zu viele Änderungen in der Produktion
  • Eingehender/ausgehender Netzwerkverkehr: Wenn der ein- und ausgehende Datenverkehr anormal ist

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:
  • So überwachen Sie Oracle-Datenbanken mit Zabbix Agent2
  • Detaillierte Erklärung zur Verwendung von Zabbix zur Überwachung der Oracle-Datenbank
  • Zabbix3.4-Methode zum Überwachen des MongoDB-Datenbankstatus
  • So sichern Sie die Datenbank und partitionieren die Tabelle in Zabbix
  • Verwenden Sie den benutzerdefinierten Zabbix-Schlüssel des Python-Skripts, um den Oracle-Verbindungsstatus zu überwachen

<<:  Detaillierte Erläuterung der Vue-Projektoptimierung und -verpackung

>>:  So implementieren Sie „insert if none“ und „update if yes“ in MySql

Artikel empfehlen

Konfigurationsmethode für das Nginx-Anforderungslimit

Nginx ist ein leistungsstarker, leistungsstarker ...

So überwachen Sie den Ausführungsstatus eines Docker-Container-Shell-Skripts

Szenario Das Unternehmensprojekt wird in Docker b...

Teilen Sie 9 Linux Shell Scripting Tipps für die Praxis und Interviews

Vorsichtsmaßnahmen 1) Interpreter am Anfang hinzu...

Beispiel für ein JavaScript-Meldungsfeld

In JavaScript können drei Arten von Meldungsfelde...

Praktische Optimierung des MySQL-Paging-Limits

Vorwort Wenn wir Abfrageanweisungen verwenden, mü...

CSS-Implementierungscode für horizontale und vertikale Fortschrittsbalken

Manchmal ist es schön, ein paar nette Scrollbar-E...

Eine kurze Beschreibung der Beziehung zwischen k8s und Docker

In letzter Zeit verwendet das Projekt Kubernetes ...

Die umfassendsten 50 Mysql-Datenbankabfrageübungen

Diese Datenbankabfrageanweisung ist eine von 50 D...

Zusammenfassung zur Verwendung von HTML-Meta-Tags (empfohlen)

Meta-Tag-Funktion Der META-Tag ist ein Schlüsselt...

CSS-Ansichtsfenstereinheiten für schnelles Layout

CSS-Viewport-Einheiten gibt es schon seit einigen...

Implementierung der TCPWrappers-Zugriffskontrolle in Centos

1. Übersicht über TCP-Wrapper TCP Wrapper „verpac...

Anleitung zum Zurücksetzen des MySQL/MariaDB-Root-Passworts

Vorwort Vergessene Passwörter sind ein Problem, d...