Abgesehen von den üblichen Systemstatistiken (E / A, RAM-Nutzung, CPU, Last usw.) sammle ich derzeit Fragen, QPS, laufende Abfragen und Pufferpool-Treffer.
Ich finde es qps
ziemlich nutzlos, da die Verfügbarkeit unserer Produktionsserver sehr hoch ist und der Durchschnittswert.
Ich habe mich über Best Practices für die Statistiksammlung für den MySQL-Produktionsserver gewundert. Welche anderen Statistiken sollte ich sammeln / überwachen, um die Belastung meines Servers zu verstehen und schnell zu handeln, ohne ihn stärker zu belasten?
Bearbeiten:
Ich bin nicht auf der Suche nach einer Lösung von Drittanbietern. Ich verwende bereits zabbix (und die Möglichkeit, handgeschriebene Skripte zu erstellen), um Statistiken zu sammeln / unseren MySQL-Cluster zu überwachen. Unter diesem Link finden Sie eine Liste möglicher Statistiken zur Sammlung . Und natürlich gibt es Statistiken, die hier nicht aufgeführt sind und über Shell-Skripte gesammelt werden können. Die eigentliche Frage ist , was Statistiken müssen unsere Cluster gesammelt werden effizient zu überwachen , ohne eine unnötige Junk volle Statistiken zu erstellen.
Beispiel: Qcache_hit / Qcache_hit + queries
Sollten wir ein Verhältnis erhalten, um zu sehen, ob unsere Tische heiß genug sind?
realtime
Werkzeug anstelle dieser Werkzeuge?Antworten:
Überwachen Sie alles, was Sie können, so oft Sie können. Ich empfehle Graphite w / statsd als zentralen Ort, um alle Ihre Metriken zu sammeln. Es bietet ein sehr einfaches Klartextprotokoll, das es einfach macht, nahezu alle Metrikdaten zu protokollieren, und eine Benutzeroberfläche, die es unglaublich einfach macht, eine Metrik mit einer anderen zu vergleichen. Auf meinen Systemen sammle ich eine Menge Informationen und die meisten davon haben sich irgendwann als von unschätzbarem Wert erwiesen. Hier sind einige davon:
Ich habe einen Daemon namens mysampler geschrieben , der die Ausgabe von
SHOW GLOBAL STATUS
in regelmäßigen Abständen an Graphit (oder CSV, wenn Sie möchten) sendet . Wir protokollieren dies in Intervallen von 5 Sekunden, aber es gibt Zeiten, in denen ich wünschte, wir hätten es auf Intervalle von 1 Sekunden eingestellt. Auf dieser Granularitätsebene sehen Sie einige sehr interessante Muster. Es ist bekannt, welche Statistiken Zähler und welche absolute Werte sind (Fragen sind ein Zähler, Threads_running ist ein absoluter Wert) und gibt die Deltas für die Zähler aus.ab-tblstats2g wird jede Nacht von cron ausgeführt und sendet Statistiken zur Tabellengröße an Graphit, damit wir das Tabellenwachstum verfolgen können. Ich plane, es in naher Zukunft um den maximalen Primärschlüsselwert und die Anzahl der Zeilen (aus Tabellenstatistiken) zu erweitern. Es funktioniert auch mit MSSQL Server.
mysql_logger protokolliert die Ausgabe von SHOW FULL PROCESSLIST alle X Zeitintervalle in syslog. Es ist trivial, genau herauszufinden, was gleichzeitig lief, wenn etwas komisch wird (Tabellensperren, lange laufende Abfragen usw.). Wir speichern diese Daten zur einfachen Suche in Splunk , aber manchmal verwende ich immer noch grep in den Syslog-Protokollen.
pt-stalk aus dem Percona Toolkit eignet sich hervorragend für "Was ist gerade passiert?" Szenarien. Es überwacht Serverstatusvariablen, um einen bestimmten Wert zu überschreiten (
Threads_connected
standardmäßig> 25, ist aberThreads_running
meiner Erfahrung nach normalerweise eine wertvollere Metrik) und sammelt beim Auslösen eine Reihe von Daten über MySQL und das System, die mit pt-sift überprüft werden können oder indem Sie einfach die generierten Dateien überprüfen. Es werden sogar tcpdumps-, gdb-, oprofile- und strace-Spuren generiert.Das ist im Grunde das, was wir überwachen , was sich von der Alarmierung unterscheidet. Für die Alarmierung empfehle ich Ihnen, auf eine sehr kleine Anzahl von Metriken aufmerksam zu machen. Sie können 90% der Fälle abdecken, indem Sie einfach eine Workload-repräsentative Abfrage auswählen und einen Schwellenwert für die Rückgabezeit festlegen. Wenn dieser Schwellenwert überschritten wird, ist ein Problem aufgetreten. Ansonsten geht es dir gut. Sie müssen nicht überprüfen, ob der Prozess ausgeführt wird oder ähnliches. Andere Dinge, nach denen gesucht werden muss, sind Einträge im MySQL-Fehlerprotokoll, die sich zu vielen Verbindungen nähern, und die Funktionsweise der Replikation (Slave-Verzögerung, Slave-Ausführung, synchronisierte Tabellen). Trefferquoten sind für Alarmierungszwecke völlig nutzlos - alles, was zählt, ist, dass Anfragen innerhalb eines bestimmten Zeitraums zurückkehren.
Für die weitere Lektüre ist das Whitepaper zur Verhinderung von MySQL-Notfällen durch die Percona-Leute eine gute Lektüre, die ausführlich beschreibt, worauf zu überwachen und zu warnen ist. Percona hat auch eine Reihe von Nagios-Plugins veröffentlicht (die meiner Meinung nach mit Zabbix funktionieren sollten), die Sie verwenden können.
quelle
Ich würde die Verwendung von MONyog sehr empfehlen .
Unser DevOps-Team nutzt dies ausgiebig für Produktion und Entwicklung. Diese Leute haben die meisten "Best Practices" in die Anwendung integriert, sodass wir uns im DBA-Bereich nicht zu sehr die Hände schmutzig machen müssen.
quelle
Langsame Abfragen müssen auf jeden Fall überwacht werden.
Sie finden alles nützlich über Slow Query Log finden hier .
Und Sie können froh sein zu wissen, dass wir auf unserem Produktionsserver nicht mehr überwachen als das, was Sie bereits tun.
quelle
Slow queries
inmysqladmin status
meiner Monitorliste. Ich werde die Frage auch bearbeiten, um sie klarer zu machen.Bei meinen Recherchen habe ich festgestellt, dass das Ganglien-Plugin ( gmetric-mysql.sh ) nur die folgenden Statistiken sammelt:
quelle