Ausführliche Erklärung und Praxis der gemeinsamen Überwachungsindikatoren von Node Exporter

Gemeinsame Überwachungsindikatoren


In diesem Abschnitt lernen wir einige gängige Indikatoren der Knotenüberwachung kennen, wie z. B. CPU-, Speicher-, IO-Überwachung usw.

 

 

 

CPU-Überwachung


Bei Knoten können wir uns zunächst vorstellen, zuerst die CPU zu überwachen, da die CPU der Kern der Verarbeitungsaufgaben ist und der Gesundheitszustand des aktuellen Systems anhand des Status der CPU analysiert werden kann. Um die CPU des Knotens zu überwachen, müssen Sie  node_cpu_seconds_total diesen Überwachungsindikator verwenden.Der Inhalt des Indikators in der Metrikschnittstelle ist wie folgt:

Zeit, die von der CPU in jedem Modus verbracht wird

# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 13172.76
node_cpu_seconds_total{cpu="0",mode="iowait"} 0.25
node_cpu_seconds_total{cpu="0",mode="irq"} 0
node_cpu_seconds_total{cpu="0",mode="nice"} 0.01
node_cpu_seconds_total{cpu="0",mode="softirq"} 87.99
node_cpu_seconds_total{cpu="0",mode="steal"} 0
node_cpu_seconds_total{cpu="0",mode="system"} 309.38
node_cpu_seconds_total{cpu="0",mode="user"} 79.93
node_cpu_seconds_total{cpu="1",mode="idle"} 13168.98
..............................................................

 Aus der Beschreibung der Schnittstelle ist ersichtlich, dass dieser Indikator verwendet wird, um die in jedem Modus der CPU verbrachte Zeit zu zählen. Es ist ein Indikator vom Typ Zähler, das heißt, er wird immer steigen. Dieser Wert ist eigentlich ein kumulativer Wert von die CPU-Zeitscheibe, d.h. wenn die CPU vom Start des Betriebssystems an zu arbeiten beginnt, beginnt sie, die von ihr selbst verbrauchte Gesamtzeit aufzuzeichnen und speichert sie dann . Außerdem wird hier auch die kumulierte CPU-Nutzungszeit geteilt in verschiedene Modi, wie Benutzermodus-Nutzungszeit, Leerlaufzeit und Unterbrechungszeit. , Kernelmodus-Nutzungszeit usw., d. h. die CPU-bezogenen Informationen, die wir normalerweise mit dem Befehl top anzeigen, und diesen Indikator hier zeichnet diese Modi separat auf.

Lassen Sie uns als Nächstes die CPU des Knotens überwachen. Wir wissen auch, dass eine zunehmende CPU-Zeit für uns nicht aussagekräftig ist. Im Allgemeinen möchten wir die CPU-Auslastung des Knotens überwachen, das ist der Prozentsatz, den wir mit dem Befehl top sehen .

Um die CPU-Nutzung zu berechnen, müssen Sie die Bedeutung dieser Nutzung herausfinden. Die CPU-Nutzung ist das Ergebnis der Division der Zeitsumme aller CPU-Zustände außer dem Ruhezustand durch die Gesamt-CPU-Zeit . Verstehen Nachdem Sie dieses Konzept verstanden haben, können Sie Schreiben Sie die richtige Promql-Abfrageanweisung.

Um die Summe der CPU-Zeit außer dem Leerlaufzustand zu berechnen, ist es besser, die CPU-Zeitnutzung im Leerlaufzustand direkt zu berechnen und sie dann von 1 zu subtrahieren, um das gewünschte Ergebnis zu erhalten, also filtern wir zuerst  idle die Indikatoren der Modus, Eingabe und Filter in der WebUI von Prometheus  node_cpu_seconds_total{mode="idle"} : (Erhöhung ist eigentlich die Differenz zwischen dem ersten Sample und dem letzten Sample)

Um die Nutzungsrate zu berechnen, müssen wir wissen,  idle wie lange die CPU des Modus verwendet wurde, und sie dann mit der Gesamtzahl vergleichen. Da dies der Zählerindikator ist, können wir die  increase Funktion verwenden, um die Änderungen abzurufen, und die Abfrageanweisung verwenden  increase(node_cpu_seconds_total{mode="idle"}[1m]). weil die  increase Funktion die Eingabe eines Intervallvektors erfordert . , also nehmen wir hier die Daten innerhalb von 1 Minute:

Wir können sehen, dass es viele Daten mit unterschiedlichen CPU-Seriennummern in den Abfrageergebnissen gibt. Natürlich müssen wir die Zeit aller CPUs berechnen, also aggregieren wir sie. Was wir abfragen wollen, ist die CPU-Auslastung verschiedener Knoten, also Wir müssen  instance nach Tags aggregieren. Verwenden Sie die Abfrageanweisung  sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance): (die Dauer der Leerlauf-CPU-Nutzung in einer Minute)

Auf diese Weise können wir die Leerlauf-CPU-Nutzungszeit verschiedener Knoten innerhalb von 1 Minute abrufen und sie dann mit der gesamten CPU-Zeit vergleichen (zu diesem Zeitpunkt muss der Statusmodus nicht gefiltert werden) und die Abfrageanweisung verwenden  sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance):

Dann ist die Berechnung der CPU-Auslastung so einfach wie 1 minus multipliziert mit 100: (1 - sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance) ) * 100. Dies ist die denkbar direkteste Art, die CPU-Auslastung abzufragen. Natürlich werden wir, wie in der Promql-Syntax erwähnt, die wir zuvor gelernt haben,  rate Funktionen anstelle von  increase Funktionen für die Berechnung verwenden, sodass die endgültige CPU-Auslastung lautet. (1 - sum(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total[1m])) by (instance) ) * 100.

Es kann mit den Ergebnissen des Befehls top (die Abbildung unten zeigt den Knoten node2) verglichen werden, was im Grunde dasselbe ist.Auf diese Weise kann die CPU-Auslastung des Knotens überwacht werden.

 

 

 

Speicherüberwachung


Neben der CPU-Überwachung ist uns vielleicht die Überwachung des Node-Speichers am wichtigsten.Normalerweise verwenden wir im Wesentlichen den  free Befehl, um die Speichernutzung des Nodes zu überprüfen:

free Die Ausgabe des Befehls zeigt die Nutzung des Systemspeichers an, einschließlich des physischen Speichers, des Auslagerungsspeichers (swap) und des Kernel-Pufferspeichers usw. Um den Speicher zu überwachen, müssen wir also zuerst diese Konzepte verstehen.Lassen Sie uns zuerst  free die Ausgabe des Folgenden verstehen Befehl:

  • Mem 行(die zweite Zeile) ist die Speichernutzung
  • Swap 行(dritte Zeile) ist die Nutzung des Auslagerungsbereichs
  • total Die Spalten zeigen die Gesamtmenge des verfügbaren physischen Speichers und Auslagerungsspeichers im System
  • used Spalten zeigen den verwendeten physischen Speicher und Auslagerungsspeicher
  • free Spalten zeigen, wie viel physischer Speicher und Auslagerungsspeicher zur Verwendung verfügbar sind
  • shared Die Spalte zeigt die Menge an physischem Speicher, die von der gemeinsamen Nutzung verwendet wird
  • buff/cache Spalten zeigen die Menge an physischem Speicher, die von Puffern und Caches verwendet wird
  • available Die Spalte zeigt die Menge an physischem Speicher, die noch von der Anwendung verwendet werden kann

Unter ihnen müssen wir uns auf  free und  available zwei Spalten konzentrieren. free ist die Menge an physischem Speicher, die nicht verwendet wurde, und available stellt den verfügbaren Speicher aus Sicht der Anwendung dar. Um die Leistung von Festplattenoperationen zu verbessern, verbraucht der Linux-Kernel einen Teil des Speichers, um Festplattendaten zwischenzuspeichern , das heißt, Puffer und Cache, also für Für den Kernel gehören sowohl Puffer als auch Cache zum verwendeten Speicher, aber wenn die Anwendung Speicher benötigt und nicht genügend freier Speicher verfügbar ist, fordert der Kernel Speicher von zurück Puffer und Cache, um die Anforderung der Anwendung zu erfüllen. Aus Sicht der Anwendung  available = free + buffer + cacheist also zu beachten, dass dies nur eine ideale Berechnungsmethode ist und die tatsächlichen Daten einen großen Fehler aufweisen.

Wenn Sie die Speichernutzung in Prometheus abfragen möchten, können Sie  node_memory_* verwandte Indikatoren verwenden.Um die Nutzung zu berechnen, können wir den verfügbaren Speicher berechnen und die Promql-Abfrageanweisung verwenden  node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes.

Berechnen Sie dann die Nutzung des verfügbaren Speichers, dividieren Sie ihn durch den Gesamtspeicher und subtrahieren Sie ihn dann von 1. Die Aussage lautet  (1- (node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes) * 100, also die berechnete Speichernutzung des Knotens.

Wenn Sie die Speichernutzung jedes Elements anzeigen möchten, können Sie natürlich direkt die entsprechenden Überwachungsindikatoren verwenden.Um beispielsweise den Gesamtspeicher des Knotens anzuzeigen, können Sie die  node_memory_MemTotal_bytes Indikatoren direkt verwenden, um ihn zu erhalten. 

 

 

 

Festplattenüberwachung


Als nächstes kommt das Disk-Monitoring in den Vergleich: Beim Disk-Monitoring interessiert uns nicht nur die Disk-Nutzung, sondern generell ist auch Disk-IO-Monitoring sehr notwendig.

Überwachung der Festplattenkapazität

Um die Festplattenkapazität zu überwachen, müssen Sie  node_filesystem_* verwandte Indikatoren verwenden.Um beispielsweise die Festplattenspeichernutzung eines Knotens abzufragen, können Sie auch die Summe abzüglich des verfügbaren Speicherplatzes zur Berechnung verwenden.Die Festplattennutzungsanzeige für freien Speicherplatz  node_filesystem_avail_bytes , aber da wird es Seien Sie einige, die uns nicht um Festplatteninformationen kümmern, sodass wir  fstype Tags verwenden können, um die Festplatteninformationen zu filtern, die uns wichtig sind, z. B.  ext4 oder  xfs formatierte Festplatten (filtern Sie sie, um das gewünschte Dateisystem zu erhalten):

Um die Speicherplatznutzung abzufragen, verwenden Sie die Abfrageanweisung  (1 - node_filesystem_avail_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"}) * 100 :

Auf diese Weise können wir die Speicherplatznutzung ermitteln, die uns wichtig ist.

Festplatten-IO-Überwachung

Um Festplatten-IO zu überwachen, muss unterschieden werden, ob es sich um Lese-IO oder Schreib-IO, Lese-IO-Nutzungsindikatoren node_disk_reads_completed und Schreib-IO-Nutzungsindikatoren handelt node_disk_writes_completed_total .

Disk read IO  sum by (instance) (rate(node_disk_reads_completed_total[5m])) kann die Abfrageanweisung verwenden:

device Wenn Sie darauf basierend aggregieren möchten, ist dies natürlich  auch möglich, wir sind hier alle aggregiert.

Disk Write IO  sum by (instance) (rate(node_disk_writes_completed_total[5m])) kann die Abfrageanweisung verwenden:

Wenn Sie die gesamten Lese- und Schreib-IO berechnen möchten, können Sie `rate(node_disk_reads_completed_total[5m]) + rate(node_disk_writes_completed_total[5m]) addieren.

 

 

 

Netzwerk-IO-Überwachung


Der Indikator dafür, dass die Uplink-Bandbreite verwendet werden muss, ist  , dass wir, da wir uns mehr um die sofortige Änderungnode_network_receive_bytes der Netzwerkbandbreite sorgen, im Allgemeinen   Funktionen verwenden, um die Netzwerk-IO zu berechnen.Beispielsweise kann die Abfrageanweisung   verwendet werden, um die Uplink-Bandbreite zu berechnen : (Dies kann die Spitzenänderung des Netzwerks widerspiegeln.)iratesum by(instance) (irate(node_network_receive_bytes_total{device!~"bond.*?|lo"}[5m]))

Der für die Downlink-Bandbreite verwendete Indikator ist  node_network_transmit_bytes, und die Abfrageanweisung lautet auf die gleiche Weise  sum by(instance) (irate(node_network_transmit_bytes{device!~"bond.*?|lo"}[5m])):

Natürlich können wir auch nach Netzwerkkartengerät separat aggregieren und rechnen und schließlich die Ergebnisse nach eigenen Bedürfnissen in Einheiten umrechnen.

Ich denke du magst

Origin blog.csdn.net/qq_34556414/article/details/123443187
Empfohlen
Rangfolge