Ü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 STATUSin 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_connectedstandardmäßig> 25, ist aber Threads_runningmeiner 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.
realtimeWerkzeug anstelle dieser Werkzeuge?