
Bericht von Daria Wilkowa für das Zabbix Meetup Online
Ich möchte Sie mit einem Überwachungswerkzeug für PostgreSQL und das Betriebssystem bekannt machen, das von unserem Unternehmen unter Verwendung von Zabbix entwickelt wird.
Wir haben uns schon lange für Zabbix als Überwachungswerkzeug entschieden, weil es sich um eine Open-Source-Plattform handelt, die von einer aktiven Community unterstützt wird und in Russland sehr beliebt ist.
Wir haben einen aktiven Agenten – Mamonsu – geschaffen, der eine flexiblere Überwachung ermöglichte als die damals verfügbaren Standardwerkzeuge und die Erfassung von Metriken sowie deren Übermittlung an den Zabbix-Server ermöglichte. In unserem Unternehmen wird Mamonsu bei der Durchführung von Audits eingesetzt.
Mamonsu
Mamonsu ist ein aktiver Agent (Zabbix Trapper) zur Überwachung von PostgreSQL und dem Betriebssystem. Mamonsu (in Python geschrieben) ermöglicht es, die Überwachungsparameter für PostgreSQL und das Betriebssystem in fünf Minuten einzurichten.
Mamonsu verfügt über zusätzliche Werkzeuge:
- mamonsu tune – ein Befehl, der die Einstellungsparameter in der Konfigurationsdatei von PostgreSQL für den Rechner, auf dem der Mamonsu-Agent installiert ist, bearbeitet.
- mamonsu report – ein Befehl, der Antworten über das Betriebssystem und PostgreSQL erstellt.
Mamonsu wird auf dem DB-Server installiert, sammelt Informationen, formatierte sie in JSON und sendet sie zur Visualisierung an den Zabbix-Server, wo ein Template für seine Metriken vorhanden sein muss.

Funktionsschema von Mamonsu
Möglichkeiten von Mamonsu
- Effektive Arbeit mit PostgreSQL. Eine ständige Verbindung zu PostgreSQL ist das Hauptvorteil von Mamonsu. Dabei ist die maximale Anzahl an Verbindungen gleich der maximalen Anzahl an Datenbanken, zu denen es sich verbindet.
- Erweiterbarkeit. Mamonsu ist ein vollständig „plugin-basierter“ Agent, und dank der festen Struktur jedes Plugins und der relativen Einfachheit von Python lernen Benutzer leicht, neue Plugins zu schreiben oder Standard-Plugins zu bearbeiten, d.h. die Parameter zur Metrik-Erfassung.
- Breite Abdeckung der Metriken zur Überwachung für PostgreSQL, einschließlich spezifischer Erweiterungsmetriken.
- Schneller Start, Verfügbarkeit „out of the box“.
- Download von Vorlagen und Konfigurationsdateien, sowie Upload auf den Zabbix-Server.
- Plattformunabhängigkeit, was für unsere Kunden wichtig ist, die verschiedene Linux-Distributionen, einschließlich einheimischer, verwenden.
- BSD-Clause-Lizenz.
Derzeit bieten wir zahlreiche Plugins an und versuchen, in jeder neuen Version etwas Neues hinzuzufügen.
- 14 Plugins für PostgreSQL,
- 8 Plugins für OS Linux,
- 4 Plugins für OS Windows.
Mamonsu erfasst über 110 Metriken von PostgreSQL und Betriebssystemen:
- 70 Metriken von PostgreSQL,
- 40 Metriken von OS Linux,
- 8 Metriken von OS Windows.
Zu den wichtigsten Metriken gehören die Verfügbarkeit der DBMS, die Anzahl der Verbindungen, die Größe der Datenbank, Checkpoints, die Lese-/Schreibgeschwindigkeit, Sperren, die Anzahl der Autovacuum-Prozesse und die Geschwindigkeit der WAL-Generierung. Eine vollständige Liste der verfügbaren Metriken sowie eine detaillierte Beschreibung aller Werkzeuge sind verfügbar auf der GitHub-Website.

Liste der verfügbaren Metriken auf der GitHub-Website
Mamonsu in 5 Minuten starten
Die Überwachung von PostgreSQL und des Betriebssystems mit Mamonsu kann in 5 Minuten eingerichtet werden, indem 5 einfache Schritte ausgeführt werden.
- Installation von Mamonsu. Mamonsu kann aus dem Quellcode erstellt oder mit den verfügbaren Paketen verwendet werden.
$ git clone ... && cd mamonsu && python setup.py
build && python setup.py install
- Einrichtungsparameter für Verbindungen. Die Parameter für die Verbindung zu PostgreSQL und dem Zabbix-Server müssen in der Datei agent.conf eingetragen werden.
/etc/mamonsu/agent.conf
- Export des Templates in Zabbix Server.
$ mamonsu zabbix template export
/usr/share/mamonsu/example.xml
- Hinzufügen eines Netzwerkhosts zu Zabbix Server. Das exportierte Template wird automatisch mit dem neuen Netzwerkhost im Zabbix Server verbunden.
$ mamonsu zabbix host create mamonsu-demo
- Starten.
$ service mamonsu start
Entwicklungsrichtung von Mamonsu
Im Zuge der Weiterentwicklung von Mamonsu planen wir, die Metriken zu verfeinern und neue Plugins zu erstellen, beispielsweise ein Plugin zur Überwachung der Größe einzelner Tabellen. Wir planen auch, zusätzliche Werkzeuge zu verbessern und zu erstellen sowie die Möglichkeiten zur automatischen Konfiguration über den Befehl mamonsu tune.
Das Monitoring-Modul von PostgreSQL als Teil des Zabbix-Agenten 2
Für die Verbindung zu PostgreSQL wird ein schneller und beliebter Treiber verwendet (PG-Treiber und Toolkit für Go).
Derzeit verwenden wir zwei Schnittstellen: Exporter, der anhand des Schlüssels den Handler aufruft, und Configurator Zabbix Agent 2, der die Verbindungsparameter mit dem Server aus der Konfigurationsdatei ausliest und überprüft.
Wir haben versucht, die Leistung der DBMS zu optimieren, indem wir Metriken gruppiert und einen Handler für Metriken und Gruppen von Metriken sowie Gruppen von Metriken in JSON als abhängige Elemente (dependency items) und Low-Level-Discovery (discovery rules) verwendet haben.
Hauptmerkmale
- Beibehaltung einer festen Verbindung zu PostgreSQL zwischen den Überprüfungen;
- Unterstützung flexibler Abfrageintervalle;
- Kompatibilität mit PostgreSQL-Versionen ab 10 und Zabbix Server ab Version 4.4;
- die Möglichkeit, mehrere PostgreSQL-Instanzen gleichzeitig zu verbinden und zu überwachen, da Zabbix Agent 2 mehrere Sitzungen ermöglicht.
Verbindungsebenen zu PostgreSQL
Es stehen insgesamt drei Verbindungsebenen zu PostgreSQL zur Verfügung, d. h. Aufgaben und Einstellungen:
- Global,
- Sitzungen,
- Makros.
Globale Parameter werden auf der Agentenebene festgelegt, Sitzungs- und Makroparameter definieren die Verbindungsparameter zur Datenbank.
Die Verbindungsparameter zu PostgreSQL - Sitzungen werden in der Datei zabbix_agent2.conf.

Verbindungsparameter zu PostgreSQL - Sitzungen
- Nach dem Schlüsselwort Sitzungen wird ein eindeutiger Sitzungsname angegeben, der im Schlüssel (Template) angegeben werden muss.
- Parameter URI und Benutzername sind für jede Sitzung erforderlich.
- Wenn der Datenbankname nicht angegeben ist, wird der allgemeine Standarddatenbankname für alle Sitzungen zu PostgreSQL verwendet, der ebenfalls in der Konfigurationsdatei festgelegt wird.
- Die Verbindungsparameter zu PostgreSQL - Makros werden im Metrikschlüssel im Template festgelegt (ähnlich wie bei Zabbix Agent 1), d. h. sie werden im Template erstellt und dann als Parameter im Schlüssel angegeben. Dabei ist die Reihenfolge der Makros festgelegt, d. h., zum Beispiel URI wird immer an erster Stelle angegeben.

Die Verbindungsparameter zu PostgreSQL - Makros
Das PostgreSQL-Überwachungsmodul umfasst bereits über 95 Metriken, die es ermöglichen, ein recht breites Spektrum an PostgreSQL-Parametern abzudecken, einschließlich:
- Anzahl der Verbindungen,
- Datenbankgrößen,
- Wal-Dateiarchivierung,
- Kontrollpunkte,
- Anzahl der „aufgeblähten“ Tabellen,
- Replikationsstatus,
- Replikationsverzögerung.
PostgreSQL-Metriken sind ohne Betriebssystemparameter nicht informativ. Aber Zabbix Agent 2 kann bereits Betriebssystemparameter sammeln, daher schließen wir einfach die erforderlichen Templates an den Netzwerk-Knoten an.
Handler
Handler – die zentrale Einheit des Moduls, in der die Anfrage selbst ausgeführt wird und die ermöglicht, Metriken zu erhalten.
Um eine einfache Metrik zu erhalten:
- Erstellen Sie eine Datei zur Erfassung einer neuen Metrik:
zabbix/src/go/plugins/postgres/handler_uptime.go
- Binden Sie das Paket ein und geben Sie den eindeutigen Schlüssel (Schlüssel) der Metriken an:

- Erstellen Sie einen Handler mit der Anfrage, d. h. initialisieren Sie die Variable, in der das Ergebnis gespeichert wird:

- Führen Sie die Anfrage aus:

Es ist notwendig, die Anfrage auf Fehler zu überprüfen, nachdem deren Ergebnis vom Zabbix Agent 2 aufgegriffen wird.
- Wir registrieren den Schlüssel für eine neue Kennzahl:

Nach der Registrierung der Kennzahl kann der Agent mit der neuen Kennzahl neu kompiliert werden.
Das Modul ist ab Zabbix 5.0 auf der Website verfügbar . In dieser Version von Zabbix werden die Parameter separat über Host und Port festgelegt. In der bald erscheinenden Version Zabbix 5.0.2 werden die Verbindungsparameter in eine URI zusammengefasst.
Vielen Dank für Ihre Aufmerksamkeit!
Nützliche Links
Quelle: habr.com
