Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So überwachen Sie MySQL-Bereitstellungen mit Prometheus &Grafana bei ScaleGrid

Durch die Überwachung der Leistung Ihrer MySQL-Datenbank in Echtzeit können Sie Probleme und andere Faktoren, die jetzt oder in Zukunft Probleme verursachen könnten, sofort erkennen. Es ist auch eine gute Möglichkeit festzustellen, welche Komponenten der Datenbank verbessert oder optimiert werden können, um Ihre Effizienz und Leistung zu steigern. Dies erfolgt normalerweise durch Überwachungssoftware und -tools, die entweder in die Datenbankverwaltungssoftware integriert oder von Drittanbietern installiert wurden.

Prometheus ist eine Open-Source-Softwareanwendung, die für die Ereignisüberwachung und -benachrichtigung verwendet wird. Es kann zusammen mit einem Visualisierungstool wie Grafana verwendet werden, um Dashboards einfach zu erstellen und zu bearbeiten, Ihre Metriken abzufragen, zu visualisieren, zu warnen und zu verstehen. ScaleGrid bietet vollen Administratorzugriff auf Ihre MySQL-Bereitstellungen – dies erleichtert die Integration des bestehenden MySQL-Ökosystems von Tools mit Ihren ScaleGrid-MySQL-Bereitstellungen auf AWS oder Azure. Prometheus eignet sich gut für die Aufzeichnung beliebiger rein numerischer Zeitreihen und bietet auch Unterstützung für die mehrdimensionale Datenerfassung und -abfrage. Grafana kann damit verwendet werden, um Dashboards zu erstellen, die dabei helfen, diese Daten auf eine Weise zu visualisieren, die einfach zu interpretieren und zu verwenden ist. Diese Tools bieten zusätzliche Einblicke in Ihre Messwerte, Nutzungsmuster und Datensätze zusammen mit Ihrer ScaleGrid-MySQL-Überwachung, Abfrageanalyse und Warnungen. In diesem Blogbeitrag erörtern wir, wie Sie Prometheus und Grafana mit Ihren ScaleGrid-MySQL-Bereitstellungen für eine erweiterte Datenbanküberwachung und Warnungen einrichten und verwenden können.

So richten Sie Ihre MySQL-Überwachung ein

Lassen Sie uns die Schritte zur Installation und Konfiguration des Prometheus-Servers zum Speichern und Anzeigen der Metriken und eines Exportprogramms (in diesem Fall MySQL Exporter) zum Sammeln der Metriken und zum Weiterleiten an sie durchgehen der Prometheus-Server und Grafana zum Erstellen von Dashboards. Das Tool MySQL Exporter kann lokal auf einem MySQL-Server oder zentral auf dem Prometheus-Server installiert werden. Im folgenden Anwendungsfall erklären wir, wie Prometheus, MySQL Exporter und Grafana von einem zentralen Host, der auf Ubuntu läuft, eingerichtet und verwendet werden, um mehrere MySQL-Server zu überwachen. Eine Schritt-für-Schritt-Anleitung finden Sie auch in unserem Hilfedokument zu Prometheus und Grafana für MySQL.

Das folgende Blockdiagramm zeigt die Einrichtung einer Master-Slave-Quorum-MySQL-Bereitstellung, die zwei datentragende Knoten (Master und Slave) und ein stimmberechtigtes Mitglied (Quorum) umfasst, das die MySQL Exporter, Prometheus-Host und Grafana:

Installieren und Konfigurieren des Prometheus-Servers

Prometheus ist das Tool, mit dem wir Ihre MySQL-Metriken zentralisieren und speichern werden. Es kratzt die Metriken in regelmäßigen Abständen von einem oder mehreren Exporteuren ab und zeigt sie auf seiner Benutzeroberfläche an. Im Folgenden finden Sie die Schritte zum Installieren und Konfigurieren von Prometheus auf einem zentralen Ubuntu-Host. Weitere Einzelheiten finden Sie in diesem Artikel.

1. Erstellen Sie eine Prometheus-Systemgruppe und einen Benutzer

$sudo groupadd --system prometheus
$sudo useradd -s /sbin/nologin --system -g prometheus prometheus

2. Erstellen Sie ein Datenverzeichnis für Prometheus

$sudo mkdir /var/lib/prometheus

3. Konfigurationsverzeichnisse für Prometheus erstellen

$for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done

4. Laden Sie das Prometheus-Archiv herunter und extrahieren Sie die Datei

So laden Sie das neueste Binärarchiv für Prometheus herunter:

$mkdir -p /tmp/prometheus && cd /tmp/prometheus
$curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
| grep browser_download_url \
| grep linux-amd64 \
| cut -d '"' -f 4 \
| wget -qi -

Um die Datei zu extrahieren:

$tar xvf prometheus*.tar.gz
$cd prometheus*/

5. Verschieben Sie die Prometheus-Dateien an Standardspeicherorte

Verschieben Sie Prometheus-Binärdateien nach /usr/local/bin:

$sudo mv prometheus promtool /usr/local/bin/

Prometheus-Konfigurationsvorlage in das /etc-Verzeichnis verschieben:

$sudo mv prometheus.yml  /etc/prometheus/prometheus.yml

Verschieben Sie auch Konsolen und Konsolenbibliotheken in das Verzeichnis /etc/prometheus:

$sudo mv consoles/ console_libraries/ /etc/prometheus/

6. Prometheus-Konfigurationsdatei erstellen/bearbeiten

Die Vorlagenkonfigurationen sollten ähnlich wie unten aussehen:

$cat /etc/prometheus/prometheus.yml

 #my global config
 global:
 scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
 #scrape_timeout is set to the global default (10s).

 #Alertmanager configuration
 alerting:
 alertmanagers:
 - static_configs:
 - targets:
 #- alertmanager:9093

 #Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
 rule_files:
 #- "first_rules.yml"
 #- "second_rules.yml"

 #A scrape configuration containing exactly one endpoint to scrape:
 #Here it's Prometheus itself.
 scrape_configs:
 #The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
 - job_name: 'prometheus'

 #metrics_path defaults to '/metrics'
 #scheme defaults to 'http'.

 static_configs:
 - targets: ['localhost:9090']

7. Erstellen Sie eine Prometheus-Systemd-Service-Unit-Datei

$sudo vim /etc/systemd/system/prometheus.service

Füge folgenden Inhalt hinzu:

 [Unit]
 Description=Prometheus
 Documentation=https://prometheus.io/docs/introduction/overview/
 Wants=network-online.target
 After=network-online.target

 [Service]
 Type=simple
 Environment="GOMAXPROCS=1"
 User=prometheus
 Group=prometheus
 ExecReload=/bin/kill -HUP $MAINPID
 ExecStart=/usr/local/bin/prometheus \
 --config.file=/etc/prometheus/prometheus.yml \
 --storage.tsdb.path=/var/lib/prometheus \
 --web.console.templates=/etc/prometheus/consoles \
 --web.console.libraries=/etc/prometheus/console_libraries \
 --web.listen-address=0.0.0.0:9090 \
 --web.external-url=

 SyslogIdentifier=prometheus
 Restart=always

 [Install]
 WantedBy=multi-user.target

Denken Sie daran, die Zeile zu bearbeiten:Environment=”GOMAXPROCS=1 indem Sie 1 durch die Anzahl der vcpus auf Ihrem Server ersetzen.

8. Verzeichnisberechtigungen ändern

Ändern Sie den Besitz dieser Verzeichnisse zu Prometheus-Benutzer und -Gruppe:

$for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done
$for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done
$sudo chown -R prometheus:prometheus /var/lib/prometheus/

9. Laden Sie systemd Daemon neu und starten Sie den Dienst

$sudo systemctl daemon-reload
$sudo systemctl start prometheus
$sudo systemctl enable prometheus

Überprüfen Sie den Status mit systemctl status prometheus Befehl:

10. Konfigurieren Sie eine Firewall zum Öffnen von Port 9090

$sudo firewall-cmd --add-port=9090/tcp --permanent
$sudo firewall-cmd --reload

Sobald die Einrichtung abgeschlossen ist, können Sie auf die Prometheus-Benutzeroberfläche zugreifen, indem Sie sich bei http://:9090

anmelden

So überwachen Sie #MySQL-Bereitstellungen mit Prometheus und Grafana bei ScaleGridClick To Tweet

Installieren und Konfigurieren von MySQL Prometheus Exporter

Prometheus benötigt einen Exporter zum Sammeln von MySQL-Servermetriken. Dieser Exporter kann zentral auf dem Prometheus-Server oder auf dem Datenbankserver ausgeführt werden. Weitere Informationen finden Sie in der Prometheus-Dokumentation.

Befolgen Sie die nachstehenden Schritte, um MySQL Prometheus Exporter auf dem zentralen Prometheus-Host zu installieren und einzurichten. Weitere Einzelheiten finden Sie in diesem Artikel.

1. Laden Sie den Prometheus MySQL Exporter herunter und installieren Sie ihn

$curl -s https://api.github.com/repos/prometheus/mysqld_exporter/releases/latest   | grep browser_download_url   | grep linux-amd64 | cut -d '"' -f 4   | wget -qi -
$tar xvf mysqld_exporter*.tar.gz
$sudo mv  mysqld_exporter-*.linux-amd64/mysqld_exporter /usr/local/bin/
$sudo chmod +x /usr/local/bin/mysqld_exporter

2. Erstellen Sie Prometheus Exporter-Datenbankbenutzer, um auf die Datenbank zuzugreifen, Metriken zu durchsuchen und Zuschüsse bereitzustellen

CREATE USER 'mysqld_exporter'@'<PrometheusHostIP>' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 2;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'<PrometheusHostIP>';
FLUSH PRIVILEGES;
EXIT

MIT MAX_USER_CONNECTIONS 2 wird verwendet, um ein maximales Verbindungslimit für den Benutzer festzulegen, um eine Überlastung des Servers mit Überwachungskratzern unter hoher Last zu vermeiden.

3. Konfigurieren Sie die Datenbankanmeldeinformationen

Bearbeiten Sie die Konfigurationsdatei des Exporters auf dem zentralen Host:

$sudo vim /etc/.mysqld_exporter.cnf

Fügen Sie den Benutzernamen und das Passwort des erstellten Benutzers und den zu überwachenden ScaleGrid-MySQL-Server hinzu:

$sudo vim /etc/.mysqld_exporter.cnf

[client]
user=mysqld_exporter
password=StrongPassword
host=SG-mysqltestcluster-123456.servers.mongodirector.com

Inhaberschaftsberechtigungen festlegen:

$sudo chown root:prometheus /etc/.mysqld_exporter.cnf

4. Systemd-Unit-Datei erstellen

Erstellen Sie eine neue Servicedatei auf dem zentralen Host:

$sudo vim /etc/systemd/system/mysql_exporter.service

Füge folgenden Inhalt hinzu:

 [Unit]
 Description=Prometheus MySQL Exporter
 After=network.target
 User=prometheus
 Group=prometheus

 [Service]
 Type=simple
 Restart=always
 ExecStart=/usr/local/bin/mysqld_exporter \
 --config.my-cnf /etc/.mysqld_exporter.cnf \
 --collect.global_status \
 --collect.info_schema.innodb_metrics \
 --collect.auto_increment.columns \
 --collect.info_schema.processlist \
 --collect.binlog_size \
 --collect.info_schema.tablestats \
 --collect.global_variables \
 --collect.info_schema.query_response_time \
 --collect.info_schema.userstats \
 --collect.info_schema.tables \
 --collect.perf_schema.tablelocks \
 --collect.perf_schema.file_events \
 --collect.perf_schema.eventswaits \
 --collect.perf_schema.indexiowaits \
 --collect.perf_schema.tableiowaits \
 --collect.slave_status \
 --web.listen-address=0.0.0.0:9104
 
 [Install]
 WantedBy=multi-user.target

web.listen-address=0.0.0.0:9104 gibt an, dass der Server Port 9104 überwacht. Wenn Ihr Server über ein öffentliches und ein privates Netzwerk verfügt, müssen Sie möglicherweise 0.0.0.0:9104 durch die private IP ersetzen, z. B. – 192.168.4.5:9104.

Wenn Sie fertig sind, laden Sie systemd neu und starten Sie den Dienst mysql_exporter:

$sudo systemctl daemon-reload
$sudo systemctl enable mysql_exporter
$sudo systemctl start mysql_exporter

5. Konfigurieren Sie den MySQL-Endpunkt so, dass er von Prometheus verschrottet wird

Nehmen Sie Änderungen wie unten an der Datei prometheus.yml vor:

scrape_configs:
- job_name: mysql_server1
static_configs:
- targets: ['localhost:9104']
labels:
alias: db1

Hinweis:Wenn der Exporter nicht auf demselben Host wie Prometheus ausgeführt wird, geben Sie die IP-Adresse des Servers anstelle von localhost an. 9104 bezieht sich auf den Port, den Prometheus abhört, wie im vorherigen Schritt angegeben.

Überwachung mehrerer MySQL-Hosts von einem zentralen Prometheus-Host

Mehrere MySQL-Server können von einem zentralen Server aus überwacht werden. Dies kann durch einen separaten Exportdienst für jeden Server erreicht werden. Stellen Sie sicher, dass Sie .mysqld_exporter.cnf- und mysql_exporter.service-Dateien (mit eindeutigen Portnummern, die dem Flag –web.listen-address zugewiesen sind) für jeden Dienst erstellen, wie in den Schritten 3 und 4 oben erwähnt. Fügen Sie der Datei prometheus.yml Ziele hinzu, wie in Schritt 5 oben erwähnt. Jobnamen sollten eindeutig sein für jedes Ziel. Zum Beispiel:

scrape_configs:
- job_name: mysql_server1
static_configs:
- targets: ['localhost:9104']
labels:
alias: db1
- job_name: mysql_server2
static_configs:
- targets: ['localhost:9105']
labels:
alias: db2
- job_name: mysql_server3
static_configs:
- targets: ['localhost:9106']
labels:
alias: db3

Hinweis:Prometheus-Server sollte in der Lage sein, die Ziele über das Netzwerk zu erreichen. Stellen Sie sicher, dass Ihre Netzwerk-/Firewall-Konfigurationen entsprechend geändert wurden.

Grafana installieren und Dashboards erstellen

Grafana verwendet Prometheus als Datenquelle, sodass Sie Dashboards erstellen können, um Ihre Metriken besser zu visualisieren und zu verstehen. Es bietet eine großartige Möglichkeit, Einblick in Ihre Zeitreihendaten zu gewinnen.

Befolgen Sie die nachstehenden Schritte, um Grafana auf Ihrem zentralen Prometheus-Host zu installieren.

1. Laden Sie die neueste Grafana-Version herunter

Gehen Sie zur Grafana-Download-Seite, um die neueste Version herunterzuladen.

$wget <debian package url>
$sudo apt-get install -y adduser libfontconfig1
$sudo dpkg -i grafana_<version>_amd64.deb

2. Laden Sie das APT-Repository herunter und installieren Sie Grafana

Der Befehl add-apt-repository ist keine Standard-App auf Debian 9 und erfordert:

$apt-get install -y software-properties-common

Installieren Sie das Repository für stabile Versionen:

$sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

Es gibt ein separates Repository, falls Sie Betaversionen wünschen:

$sudo add-apt-repository "deb https://packages.grafana.com/oss/deb beta main"

Verwenden Sie die obige Zeile, auch wenn Sie Ubuntu oder eine andere Debian-Version verwenden. Fügen Sie dann unseren gpg-Schlüssel hinzu. Damit können Sie signierte Pakete installieren:

$wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

Aktualisieren Sie Ihre Apt-Repositories und installieren Sie Grafana:

$sudo apt-get update
$sudo apt-get install grafana

3. Starten Sie den Dienst

$systemctl daemon-reload
$systemctl start grafana-server
$systemctl status grafana-server

Aktivieren Sie den systemd-Dienst, damit Grafana beim Booten startet:

$sudo systemctl enable grafana-server.service

Um Grafana auszuführen, öffnen Sie Ihren Browser und gehen Sie zu http://:3000/ . 3000 ist der HTTP-Port, auf den Grafana standardmäßig lauscht.

4. Hinzufügen einer Datenquelle

Nach der Installation melden Sie sich beim Admin-Dashboard an und navigieren Sie zu Konfiguration> Datenquellen. Klicken Sie auf Datenquelle hinzufügen, wählen Sie Prometheus unter Zeitreihendatenbanken aus und füllen Sie die Felder Name und URL aus.

Name:Prometheus-1 URL:http://localhost:9090

Hinweis:Wenn der Prometheus-Server nicht auf demselben Host wie Grafana ausgeführt wird, geben Sie die IP-Adresse des Servers anstelle von localhost an.

Sie können jetzt Dashboards für Ihre MySQL-Überwachung erstellen und anpassen. Sie können ein neues Dashboard erstellen, indem Sie auf den Link auf der rechten Seite der Dashboard-Auswahl klicken. Sobald das Dashboard erstellt ist, können Sie Panels hinzufügen, um die anzuzeigenden Metriken auszuwählen, das Dashboard zu markieren, zu speichern und zu teilen. Ausführliche Anweisungen finden Sie in der Erste-Schritte-Dokumentation von Grafana.

Hier ist ein Beispiel für ein Grafana-Dashboard, das für eine MySQL-Bereitstellung bei ScaleGrid erstellt wurde:

Das obige Grafana-Dashboard zeigt MySQL-Auswahltypen, MySQL-Client-Thread-Aktivität, stündliche MySQL-Netzwerknutzung und MySQL-Tabellensperren-Metriken, die in den Diagrammen visualisiert werden, und das untere Grafana-Dashboard zeigt MySQL Top an Befehlszähler und MySQL Top-Befehlszähler stündlich.

Wir sind stets bemüht, das Leben unserer Benutzer einfacher zu machen, also teilen Sie uns alle anderen Tools mit, die Sie über unsere mit Ihren ScaleGrid-Bereitstellungen verbinden möchten Kommentare oder über Twitter unter @scalegridio.