Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Zabbix ist ein Monitoring-System. Wie jedes andere System sieht es sich drei Hauptproblemen gegenĂŒber, die alle Monitoring-Systeme betreffen: Datenerfassung und -verarbeitung, Historienverwaltung und deren Bereinigung.

Die Phasen der Datenerfassung, -verarbeitung und -speicherung benötigen Zeit. Etwas, aber bei einem großen System kann dies zu erheblichen Verzögerungen fĂŒhren. Das Speicherproblem betrifft den Datenzugriff. Diese Daten werden fĂŒr Berichte, PrĂŒfungen und Trigger verwendet. Verzögerungen beim Datenzugriff wirken sich ebenfalls auf die Leistung aus. Wenn Datenbanken wachsen, mĂŒssen veraltete Daten gelöscht werden. Das Löschen ist ein ressourcenintensiver Vorgang.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Die Probleme bei Verzögerungen in der Datensammlung und -speicherung in Zabbix werden durch Caching gelöst: verschiedene Cache-Arten, Caching in der Datenbank. FĂŒr das dritte Problem eignet sich Caching jedoch nicht, daher wird in Zabbix TimescaleDB eingesetzt. Dazu wird unser Experten- Andrei Gushchin — technischer Support-Ingenieur Zabbix SIA. Andrei arbeitet seit ĂŒber 6 Jahren im Zabbix-Support und ist direkt mit der Leistungsoptimierung konfrontiert.

Wie funktioniert TimescaleDB und welche Leistung kann es im Vergleich zu herkömmlichem PostgreSQL bieten? Welche Rolle spielt Zabbix fĂŒr die TimescaleDB? Wie startet man von Grund auf und wie migriert man von PostgreSQL, und welche Konfiguration bietet die beste Leistung? All das erfahren Sie im Folgenden.

Video abspielen

Leistungsherausforderungen

Jedes Überwachungssystem steht vor bestimmten Leistungsherausforderungen. Ich werde ĂŒber drei davon sprechen: Datenerfassung und -verarbeitung, Speicherung und die Bereinigung von Verlauf.

Schnelle Datenerfassung und -verarbeitung. Ein gutes Überwachungssystem muss schnell alle Daten erfassen und sie gemĂ€ĂŸ den Trigger-AusdrĂŒcken — nach eigenen Kriterien — verarbeiten. Nach der Verarbeitung sollte das System die Daten auch zĂŒgig in der Datenbank speichern, um sie spĂ€ter nutzen zu können.

Speicherung der Historie. Ein gutes Überwachungssystem sollte die Historie in der Datenbank speichern und einfachen Zugriff auf die Metriken bieten. Die Historie ist erforderlich, um sie in Berichten, Grafiken, Triggern, Schwellenwerten und berechneten Datenpunkten fĂŒr Benachrichtigungen zu verwenden.

Bereinigung der Historie. Manchmal kommt der Tag, an dem Sie keine Metriken mehr speichern mĂŒssen. Wozu benötigen Sie Daten, die vor 5 Jahren gesammelt wurden, oder solche aus einem Monat oder zwei? Einige Knoten wurden entfernt, einige Hosts oder Metriken sind nicht mehr erforderlich, da sie veraltet sind und nicht mehr erfasst werden. Ein gutes Monitoringsystem sollte historische Daten speichern und diese von Zeit zu Zeit löschen, um das Datenbankwachstum zu kontrollieren.

Die Bereinigung veralteter Daten ist ein drÀngendes Thema, das die Datenbankleistung erheblich beeinflusst.

Caching in Zabbix

In Zabbix werden die erste und zweite Abfrage durch Caching gelöst. Zur Sammlung und Verarbeitung von Daten wird der Arbeitsspeicher genutzt. FĂŒr die Speicherung gibt es Historien in Triggern, Grafiken und berechneten Datenelementen. Auf der Datenbankseite gibt es ein bestimmtes Caching fĂŒr grundlegende Abfragen, wie beispielsweise Grafiken.

Caching auf der Seite des Zabbix-Servers umfasst:

  • ConfigurationCache;
  • ValueCache;
  • HistoryCache;
  • TrendsCache.

Betrachten wir sie im Detail.

ConfigurationCache

Dies ist der Hauptcache, in dem wir Metriken, Hosts, Datenelemente und Trigger speichern – alles, was fĂŒr die Vorverarbeitung und das Sammeln von Daten benötigt wird.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

All dies wird im ConfigurationCache gespeichert, um ĂŒberflĂŒssige Datenbankanfragen zu vermeiden. Nach dem Start des Servers aktualisieren wir diesen Cache, erstellen und aktualisieren die Konfigurationen regelmĂ€ĂŸig.

Daten sammeln

Das Schema ist recht umfangreich, aber das Wichtigste daran ist Sammler. Dies sind verschiedene "Poller" — Sammelprozesse. Sie sind fĂŒr verschiedene Arten der Datensammlung verantwortlich: sie sammeln Daten ĂŒber SNMP, IPMI und leiten alles an PreProcessing weiter.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDBDie Sammler sind durch eine orange Linie umrandet.

In Zabbix gibt es berechnete aggregierte Datenelemente, die benötigt werden, um PrĂŒfungen zu aggregieren. Wenn wir diese haben, holen wir die Daten direkt aus ValueCache.

PreProcessing HistoryCache

Alle Sammler verwenden ConfigurationCache, um Aufgaben zu erhalten. Dann leiten sie diese an PreProcessing weiter.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

PreProcessing nutzt ConfigurationCache, um Schritte des PreProcessings zu erhalten. Es verarbeitet diese Daten auf verschiedene Weise.

Nach der Datenverarbeitung mit PreProcessing speichern wir sie im HistoryCache, um sie zu verarbeiten. Damit endet die Datensammlung und wir gehen zum Hauptprozess in Zabbix ĂŒber — history syncer, da es sich um eine monolithische Architektur handelt.

Hinweis: PreProcessing ist eine rechenintensive Operation. Ab Version 4.2 wurde sie auf den Proxy ausgelagert. Wenn Sie ein sehr großes Zabbix mit vielen Datenelementen und hoher Erfassungsfrequenz haben, erleichtert dies die Arbeit erheblich.

ValueCache, Verlauf & Trends Cache

Der History Syncer ist der Hauptprozess, der jedes Datenelement atomar verarbeitet, d.h. jeden Wert.

Der History Syncer entnimmt Werte aus dem HistoryCache und prĂŒft in der Konfiguration, ob Trigger fĂŒr Berechnungen vorhanden sind. Wenn ja, fĂŒhrt er die Berechnungen durch.

Der History Syncer erstellt ein Ereignis, eine Eskalation, um Benachrichtigungen zu generieren, wenn dies in der Konfiguration erforderlich ist, und zeichnet es auf. Wenn Trigger fĂŒr weitere Verarbeitung vorhanden sind, speichert er diesen Wert im ValueCache, um nicht auf die Verlaufstabelle zugreifen zu mĂŒssen. So wird der ValueCache mit den benötigten Daten fĂŒr die Triggerberechnungen gefĂŒllt.

Der History Syncer zeichnet alle Daten in der Datenbank auf, die wiederum auf die Festplatte geschrieben wird. Der Verarbeitungsprozess endet hier.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Caching in der Datenbank

Auf der Seite der Datenbank gibt es verschiedene Caches, wenn Sie Grafiken oder Berichte zu Ereignissen betrachten möchten:

  • Innodb_buffer_pool auf der MySQL-Seite;
  • shared_buffers auf der PostgreSQL-Seite;
  • effective_cache_size auf der Oracle-Seite;
  • shared_pool auf der DB2-Seite.

Es gibt viele andere Caches, aber dies sind die wichtigsten fĂŒr alle Datenbanken. Sie ermöglichen es, Daten, die hĂ€ufig fĂŒr Abfragen benötigt werden, im Arbeitsspeicher zu halten. DafĂŒr gibt es spezielle Technologien.

Die Leistung der Datenbank ist entscheidend.

Der Zabbix-Server sammelt stĂ€ndig Daten und speichert sie. Beim Neustart liest er ebenfalls aus der Historie, um den ValueCache zu fĂŒllen. Skripte und Berichte werden verwendet. Zabbix API, das auf dem Web-Interface basiert. Die Zabbix API greift auf die Datenbank zu und erhĂ€lt die benötigten Daten fĂŒr Diagramme, Berichte, Ereignisliste und aktuelle Probleme.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

FĂŒr die Visualisierung — Grafana. Unter unseren Nutzern ist dies eine beliebte Lösung. Sie kann direkt ĂŒber die Zabbix API Abfragen sowohl an die Datenbank senden und schafft eine gewisse Konkurrenz um die Datenabfrage. Daher ist eine feinere und bessere Datenbankkonfiguration erforderlich, um eine schnelle Ergebnislieferung und Tests zu gewĂ€hrleisten.

Housekeeper

Der dritte Leistungsaspekt in Zabbix ist die Datenhistorienbereinigung durch Housekeeper. Er beachtet alle Einstellungen – in den Datenelementen ist angegeben, wie viele Tage die Änderungsdynamik (Trends) aufbewahrt werden soll.

TrendsCache wird in Echtzeit berechnet. Wenn Daten eintreffen, aggregieren wir sie ĂŒber einen Zeitraum von einer Stunde und speichern sie in Tabellen, um die Dynamik der TrendverĂ€nderungen zu verfolgen.

Housekeeper wird gestartet und entfernt Informationen aus der Datenbank mit herkömmlichen „Selects“. Dies ist nicht immer effizient, wie man an den Diagrammen zur Leistung der internen Prozesse erkennen kann.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Das rote Diagramm zeigt, dass der History Syncer stÀndig beschÀftigt ist. Das orange Diagramm oben zeigt den Housekeeper, der immer wieder gestartet wird. Er wartet darauf, dass die Datenbank alle Zeilen löscht, die er festgelegt hat.

Wann sollte man den Housekeeper deaktivieren? Zum Beispiel, wenn es eine „Item ID“ gibt und die letzten 5.000 Zeilen ĂŒber einen bestimmten Zeitraum gelöscht werden mĂŒssen. NatĂŒrlich erfolgt dies ĂŒber Indizes. Aber in der Regel ist das Dataset sehr groß, und die Datenbank liest dennoch von der Festplatte und lĂ€dt in den Cache. Das ist immer eine sehr kostspielige Operation fĂŒr die Datenbank und kann, je nach GrĂ¶ĂŸe der DB, zu Leistungsproblemen fĂŒhren.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Der Housekeeper kann einfach deaktiviert werden. Im Web-Interface gibt es eine Einstellung unter „Allgemeine Verwaltung“ fĂŒr den Housekeeper. Wir deaktivieren die interne HaushaltsfĂŒhrung fĂŒr die interne History der Trends, wodurch er nicht mehr dafĂŒr zustĂ€ndig ist.

Housekeeper wurde deaktiviert, die ZeitplĂ€ne haben sich angeglichen – welche Probleme können in diesem Fall auftreten und wie kann man bei der dritten Leistungsanfrage helfen?

Partitionierung – Sektionierung oder Partionierung

In der Regel wird Partitionierung unterschiedlich in jeder relationalen Datenbank eingerichtet, die ich aufgelistet habe. Jede hat ihre eigene Technologie, aber grundsĂ€tzlich sind sie Ă€hnlich. Das Erstellen einer neuen Partition fĂŒhrt oft zu bestimmten Problemen.

In der Regel wird die Partitionierung je nach 'Setup' – der Menge an Daten, die an einem Tag erstellt werden – konfiguriert. Normalerweise wird Partitionierung fĂŒr einen Tag eingestellt, das ist das Minimum. FĂŒr die Trends einer neuen Partition – fĂŒr 1 Monat.

Die Werte können sich bei einem sehr großen 'Setup' Ă€ndern. Wenn ein kleines 'Setup' bis zu 5.000 nvps (neue Werte pro Sekunde) betrĂ€gt, ist das mittlere von 5.000 bis 25.000, und das große ĂŒber 25.000 nvps. Dies sind große und sehr große Installationen, die eine sorgfĂ€ltige Datenbankkonfiguration erfordern.

Bei sehr großen Installationen kann ein Tagesabschnitt suboptimal sein. Ich habe in MySQL Partitionen gesehen, die ĂŒber 40 GB und mehr pro Tag umfassen. Das ist ein enormer Datenumfang, der zu Problemen fĂŒhren kann und muss reduziert werden.

Was bringt Partitionierung?

Tabellenpartitionierung. Oft handelt es sich um separate Dateien auf der Festplatte. Der Abfrageplan wĂ€hlt optimierter eine Partition aus. In der Regel wird Partitionierung basierend auf einem Bereich verwendet — das gilt auch fĂŒr Zabbix. Wir verwenden dort den „timestamp“ — die Zeit seit der Epoche. In unserem Fall sind das gĂ€ngige Zahlen. Sie geben den Beginn und das Ende des Tages an — das ist die Partition.

Schnelles Löschen — DELETE. Es wird eine Datei/Subtabelle ausgewĂ€hlt, nicht eine Zeilenabfrage zum Löschen.

Beschleunigt die Datenauswahl deutlich SELECT — es werden eine oder mehrere Partitionen verwendet, nicht die gesamte Tabelle. Wenn Sie auf Daten von vor zwei Tagen zugreifen, werden diese schneller aus der DB abgerufen, da nur eine Datei geladen und im Cache bereitgestellt wird, anstatt eine große Tabelle.

Oft beschleunigt das auch viele DBs INSERT — EinfĂŒgungen in die Child-Tabelle.

TimescaleDB

FĂŒr v 4.2 haben wir uns mit TimescaleDB beschĂ€ftigt. Dies ist ein PostgreSQL-Erweiterung mit einer nativen Schnittstelle. Die Erweiterung arbeitet effizient mit Zeitreihendaten, ohne die Vorteile von relationalen Datenbanken zu verlieren. TimescaleDB partitioniert auch automatisch.

In TimescaleDB gibt es das Konzept der Hypertabelle (hypertable), die Sie erstellen. In ihr befinden sich Chunks — Partitionen. Chunks sind automatisch verwaltete Fragmente der Hypertabelle, die nicht die anderen Fragmente beeinflussen. Jeder Chunk hat seinen eigenen Zeitbereich.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

TimescaleDB vs PostgreSQL

TimescaleDB funktioniert wirklich effizient. Die Entwickler der Erweiterung behaupten, dass sie einen besseren Algorithmus zur Abwicklung von Anfragen verwenden, insbesondere fĂŒr <code>Inserts</code>. Wenn die GrĂ¶ĂŸen der Dataset-EinfĂŒgungen wachsen, unterstĂŒtzt der Algorithmus konstante Leistung.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Nach 200 Millionen Zeilen beginnt PostgreSQL normalerweise erheblich nachzulassen und verliert die Leistung auf 0. TimescaleDB ermöglicht es, Inserts bei jedem Datenvolumen effektiv einzufĂŒgen.

Installation von

Die Installation von TimescaleDB ist fĂŒr alle Pakete recht einfach. In Dokumentation. wird alles ausfĂŒhrlich beschrieben — es hĂ€ngt von den offiziellen PostgreSQL-Paketen ab. TimescaleDB kann auch manuell gebaut und kompiliert werden.

FĂŒr die Zabbix-Datenbank aktivieren wir einfach die Erweiterung:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

Sie aktivieren die Erweiterung und erstellen sie fĂŒr die Zabbix-Datenbank. Der letzte Schritt ist die Erstellung einer Hypertabelle.

Migration der Verlaufstabellen auf TimescaleDB

Es gibt dafĂŒr eine spezielle Funktion create_hypertable:

SELECT create_hypertable(‘history’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_unit’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_log’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_text’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_str’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘trends’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘trends_unit’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
UPDATE config SET db_extension=’timescaledb’, hk_history_global=1, hk_trends_global=1

Die Funktion hat drei Parameter. Der erste ist die Tabelle in der Datenbank, fĂŒr die eine Hypertabelle erstellt werden soll. Der zweite ist das Feld, nach dem die Hypertabelle erstellt werden muss. chunk_time_interval ist das Intervall der Partitionierungs-Chunks, das verwendet werden soll. In meinem Fall betrĂ€gt das Intervall einen Tag — 86.400.

Der dritte Parameter ist daten_migrieren. Wenn Sie einstellen true, werden alle aktuellen Daten in vordefinierte Chunks ĂŒbertragen. Ich habe es selbst verwendet daten_migrieren. Ich hatte etwa 1 TB, das hat mehr als eine Stunde gedauert. In einigen FĂ€llen habe ich beim Testen sogar optionale historische Daten vom Zeichentyp gelöscht, um sie nicht zu ĂŒbertragen.

Der letzte Schritt — UPDATE: In db_extension stellen wir timescaledb, damit die DB dieses Erweiterung versteht. Zabbix aktiviert es und nutzt die Syntax und Abfragen korrekt — die Funktionen, die fĂŒr TimescaleDB erforderlich sind.

Konfiguration der Hardware

Ich habe zwei Server verwendet. Der erste — VMware-Maschine. Sie ist ziemlich klein: 20 Intel¼ Xeon¼ CPU E5-2630 v 4 @ 2,20 GHz, 16 GB RAM und eine 200 GB SSD.

Ich habe darauf PostgreSQL 10.8 mit Debian 10.8-1.pgdg90+1 und dem Dateisystem xfs installiert. Ich habe es minimal konfiguriert, um genau diese Datenbank zu verwenden, abgesehen davon, was Zabbix selbst verwenden wird.

Auf dieser Maschine liefen der Zabbix-Server, PostgreSQL und Lastagenten. Ich hatte 50 aktive Agenten, die LoadableModule, um sehr schnell verschiedene Ergebnisse zu generieren: Zahlen, Zeichenfolgen. Ich habe die Datenbank mit einer großen Menge Daten gefĂŒllt.

Die ursprĂŒngliche Konfiguration enthielt 5.000 Elemente Daten fĂŒr jeden Host. Fast jedes Element hatte einen Trigger, um es realen Installationen Ă€hnlich zu machen. In einigen FĂ€llen gab es mehr als einen Trigger. Auf einen Knoten im Netzwerk entfielen 3.000-7.000 Trigger.

Aktualisierungsintervall der Datenelemente — 4-7 Sekunden. Ich regulierte die Last, indem ich nicht nur 50 Agenten verwendete, sondern noch weitere hinzufĂŒgte. Außerdem passte ich mit Hilfe der Datenelemente die Last dynamisch an und senkte das Aktualisierungsintervall auf 4 s.

PostgreSQL. 35.000 nvps

Der erste Start auf dieser Hardware war mit reinem PostgreSQL — 35.000 Werte pro Sekunde. Wie man sieht, dauert das EinfĂŒgen von Daten Bruchteile von Sekunden — alles funktioniert gut und schnell. Einziges Manko ist, dass die SSD mit 200 GB schnell voll wird.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Das ist das Standard-Performance-Dashboard von Zabbix — Server.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Der erste blaue Graph zeigt die Anzahl der Werte pro Sekunde. Der zweite Graph rechts zeigt die Auslastung der Sammelprozesse. Der dritte zeigt die Auslastung interner Sammelprozesse: History Syncers und Housekeeper, die hier ĂŒber lĂ€ngere ZeitrĂ€ume aktiv waren.

Das vierte Diagramm zeigt die Nutzung des HistoryCache. Dies ist ein Puffer vor der Einspeisung in die Datenbank. Das grĂŒne fĂŒnfte Diagramm zeigt die Nutzung des ValueCache, das heißt, wie viele Zugriffe der ValueCache fĂŒr die Trigger hat — das sind mehrere Tausend Werte pro Sekunde.

PostgreSQL. 50.000 nvps

Ich habe die Last auf 50.000 Werte pro Sekunde auf derselben Hardware erhöht.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Beim Laden mit dem Housekeeper wurden 10.000 Werte in 2-3 Sekunden geschrieben.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB
Der Housekeeper beginnt bereits, die Arbeit zu stören.

Im dritten Diagramm sieht man, dass die Auslastung der Trapper und History Syncers insgesamt noch bei 60% liegt. Im vierten Diagramm beginnt der HistoryCache wĂ€hrend der Arbeit des Housekeepers bereits aktiv gefĂŒllt zu werden. Er wurde zu 20% gefĂŒllt — das sind etwa 0,5 GB.

PostgreSQL. 80.000 nvps

Ich habe die Last auf 80.000 Werte pro Sekunde erhöht. Das sind etwa 400.000 Datenelemente und 280.000 Trigger.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB
Die Einspeisung mit der Last von dreißig History Syncers ist bereits recht hoch.

Ich habe auch verschiedene Parameter angepasst: History Syncers, Caches.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Auf meiner Hardware stieg die Auslastung der History Syncers bis zum Maximum. Der HistoryCache fĂŒllte sich schnell mit Daten — im Puffer sammelten sich die Daten zur Verarbeitung.

WĂ€hrend dieser gesamten Zeit habe ich beobachtet, wie die CPU, der Arbeitsspeicher und andere Systemparameter genutzt werden, und festgestellt, dass die Auslastung der Festplatten maximal war.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Ich habe erreicht, dass die maximalen Möglichkeiten der Festplatte genutzt werden auf dieser Hardware und dieser virtuellen Maschine. Bei einer solchen IntensitÀt begann PostgreSQL recht aktiv Daten zu verwalten, und die Festplatte konnte nicht mehr ausreichend lesen und schreiben.

Zweiter Server

Ich habe einen anderen Server genommen, der bereits 48 Prozessoren und 128 GB Arbeitsspeicher hatte. Ich habe ihn optimiert — 60 history syncer installiert und akzeptable Leistung erzielt.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

TatsÀchlich ist dies bereits das Leistungsmaximum, wo etwas unternommen werden muss.

TimescaleDB. 80.000 nvps

Meine Hauptaufgabe ist es, die Möglichkeiten von TimescaleDB unter der Last von Zabbix zu testen. 80.000 Werte pro Sekunde sind viel, die Frequenz der Metrik-Sammlung (außer bei Yandex, natĂŒrlich) und ein ziemlich großes „Setup“.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

In jedem Diagramm gibt es einen Einbruch — das ist die Datenmigration. Nach den EinbrĂŒchen im Zabbix-Server hat sich das Profil der Belastung des history syncer erheblich verĂ€ndert — es ist um das Dreifache gefallen.

TimescaleDB ermöglicht es, Daten nahezu dreimal schneller einzufĂŒgen und weniger HistoryCache zu verwenden.

Somit werden Ihnen die Daten rechtzeitig zur VerfĂŒgung gestellt.

TimescaleDB. 120.000 nvps

Anschließend habe ich die Anzahl der Datenelemente auf 500.000 erhöht. Die Hauptaufgabe bestand darin, die Möglichkeiten von TimescaleDB zu ĂŒberprĂŒfen — ich erhielt eine berechnete Rate von 125.000 Werten pro Sekunde.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Das ist ein funktionierendes Setup, das lange betrieben werden kann. Da meine Festplatte jedoch nur 1,5 TB hatte, habe ich sie innerhalb von ein paar Tagen gefĂŒllt.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Das Wichtigste ist, dass gleichzeitig neue Partitionen in TimescaleDB erstellt wurden.

FĂŒr die Leistung ist das völlig unauffĂ€llig. Wenn zum Beispiel in MySQL Partitionen erstellt werden, sieht das ganz anders aus. Das geschieht normalerweise nachts, da es die gesamte EinfĂŒgung blockiert, die Arbeit mit Tabellen beeintrĂ€chtigen kann und möglicherweise eine Dienstverschlechterung verursacht. Bei TimescaleDB tritt das nicht auf.

Zum Beispiel zeige ich ein Diagramm von vielen in der Community. Auf dem Bild ist TimescaleDB aktiviert, wodurch die I/O-Nutzung auf dem Prozessor gesenkt wurde. Auch die Nutzung interner Prozesselemente nahm ab. Dabei handelt es sich um eine gewöhnliche virtuelle Maschine auf normalen Festplatten, nicht SSDs.

Hohe Leistung und natives Partitionieren: Zabbix mit UnterstĂŒtzung fĂŒr TimescaleDB

Fazit

TimescaleDB ist eine gute Lösung fĂŒr kleine Setups., die die Leistung der Festplatte betreffen. Es ermöglicht ein reibungsloses Arbeiten bis zur Migration der Datenbank auf schnellere Hardware.

TimescaleDB ist einfach einzurichten, bietet Leistungssteigerungen und arbeitet gut mit Zabbix sowie hat Vorteile gegenĂŒber PostgreSQL..

Wenn Sie PostgreSQL verwenden und nicht planen, es zu wechseln, empfehle ich, PostgreSQL mit der TimescaleDB-Erweiterung zusammen mit Zabbix zu nutzen.Diese Lösung funktioniert effizient bis zu mittleren Setups.

Wenn wir von „hoher Leistung“ sprechen, meinen wir HighLoad++. Es ist nicht mehr lange hin, um Technologien und Praktiken kennenzulernen, die es Diensten ermöglichen, Millionen von Benutzern zu bedienen. Die Liste der VortrĂ€ge fĂŒr den 7. und 8. November haben wir bereits erstellt, aber Meetups kann man immer noch vorschlagen.

Abonnieren Sie unsere Newsletter und telegram, in denen wir die Highlights der bevorstehenden Konferenz vorstellen und erlĂ€utern, wie man den grĂ¶ĂŸtmöglichen Nutzen daraus zieht.

Quelle: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster