Wie funktioniert das Prometheus-Histogramm?

Vor Beginn des Kurses „Überwachung und Protokollierung: Zabbix, Prometheus, ELK“ wurde eine Übersetzung des Artikels erstellt .




Früher haben wir uns einen Zähler , ein Messgerät und eine Zusammenfassung angesehen . Lassen Sie uns nun darüber sprechen, wie das Histogramm in Prometheus funktioniert.
Das Histogramm weist einige Ähnlichkeiten mit der Zusammenfassung auf. Ein Histogramm ist eine Kombination verschiedener Zähler. Wie zusammenfassende Metriken werden Histogrammmetriken verwendet, um dimensionale Maße von Ereignissen, häufig deren Dauer, mithilfe der Methode zu verfolgen observe. Zeitnehmungswerkzeuge sind normalerweise dieselben wie Bulletins. Sie unterscheiden sich in der Verarbeitung von Quantilen.

Das folgende Beispiel zeigt ein Prometheus-Etikettenformat für die Belichtunghandler :

# HELP prometheus_http_request_duration_seconds Histogram of latencies for HTTP requests.
# TYPE prometheus_http_request_duration_seconds histogram
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.1"} 25547
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.2"} 26688
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.4"} 27760
prometheus_http_request_duration_seconds_bucket{handler="/",le="1"} 28641
prometheus_http_request_duration_seconds_bucket{handler="/",le="3"} 28782
prometheus_http_request_duration_seconds_bucket{handler="/",le="8"} 28844
prometheus_http_request_duration_seconds_bucket{handler="/",le="20"} 28855
prometheus_http_request_duration_seconds_bucket{handler="/",le="60"} 28860
prometheus_http_request_duration_seconds_bucket{handler="/",le="120"} 28860
prometheus_http_request_duration_seconds_bucket{handler="/",le="+Inf"} 28860
prometheus_http_request_duration_seconds_sum{handler="/"} 1863.80491025699
prometheus_http_request_duration_seconds_count{handler="/"} 28860

_sumund sie _countfunktionieren genauso wie für die Zusammenfassung und können verwendet werden, um die durchschnittliche Ausführungszeit in den letzten fünf Minuten zu ermitteln:

 rate(prometheus_http_request_duration_seconds_sum[5m]
/
  rate(prometheus_http_request_duration_seconds_count[5m])

Es gibt jedoch sehr seltene Fälle, in denen es _sumbeispielsweise in einigen Metriken des MySQLd-Exporters fehlt.

Ein bemerkenswerter Teil des Histogramms sind die Zeitreihen _bucket, die eigentlich der Histogrammteil der Metrik sind. Insbesondere sind dies Zähler, die ein kumulatives Histogramm bilden. lebezeichnen weniger als oder gleich. Somit dauerten 26688 Anfragen weniger als oder gleich 200 ms, 27760 Anfragen dauerten weniger als oder gleich 400 ms und es gab insgesamt 28860 Anfragen. Die Werte im Bucket werden monoton nicht abnehmen, und der +InfBucket hat den größten Wert. +InfDer Eimer muss immer vorhanden sein und mit dem Wert übereinstimmen _count.

Um beispielsweise ein Quantil von 0,9 (das 90. Perzentil) zu berechnen, sollten Sie Folgendes verwenden:

histogram_quantile(0.9, 
  rate(prometheus_http_request_duration_seconds_bucket[5m])
)

Ein großer Vorteil von Histogrammen gegenüber Zusammenfassungen besteht darin, dass Sie Buckets aggregieren können, bevor Sie ein Quantil berechnen. Achten Sie dabei darauf, dass Sie das Etikett nicht verlieren le:

histogram_quantile(0.9, 
  sum without (handler)(
    rate(prometheus_http_request_duration_seconds_bucket[5m])
  )
)

Zusätzlich zur Aggregation sind Histogramme auf dem Client billiger, da die Zähler schnell inkrementiert werden. Warum also nicht immer Histogramme verwenden? Es gibt eine lange AntwortDie Kurzversion ist jedoch, dass Sie mit den Histogrammen zuerst Ihren Bucket auswählen müssen und die Kosten aufgrund der Anzahl der Bucket-Elemente vom Client auf Prometheus selbst übertragen werden. Standardmäßig decken zehn Buckets einen typischen Webdienst mit einer Verzögerung von Millisekunden bis zu einer Sekunde ab. In einigen Fällen müssen Sie dies möglicherweise ändern. Hier wurden sie beispielsweise neu definiert, um PromQL-Abfragen besser zu verfolgen, die standardmäßig eine Zeitüberschreitung von zwei Minuten haben. Wenn Sie mehr als ein Dutzend Eimer haben, erhalten Sie genauere Ergebnisse, können aber auch viele Zeitreihen erstellen. Besonders in Kombination mit anderen Tags.

Bei Verwendung eines Echtzeitüberwachungssystems wie Prometheus sollte das Ziel darin bestehen, einen analytischen Wert bereitzustellen, der ausreicht, um darauf basierende technische Entscheidungen zu treffen. Zum Beispiel ist es wichtiger zu wissen, dass die Verzögerung des 90. Perzentils um 50 ms zugenommen hat, als zu wissen, ob sie jetzt 562 ms oder 563 ms beträgt, und normalerweise reichen zehn Bucket-s dafür aus. Wenn Sie eine genaue Antwort benötigen, können Sie diese später jederzeit aus Ihren Protokollen berechnen. Wenn zu viele Buckets vorhanden sind, können diese während der Datenverarbeitung verworfen werden, wie bereits gezeigt wurde . In extremeren Fällen können Sie die Reihe von _buckets vollständig ignorieren und sich auf den Durchschnitt von _sumund verlassen _count.

Zusammenfassend lässt sich sagen, dass Histogramme die aggregierte Berechnung von Quantilen ermöglichen, obwohl die Anzahl der Elemente berücksichtigt werden muss. Denken Sie daran, dass eine Zusammenfassung ohne Quantile eine billigere Option ist, wenn Sie kein Histogramm benötigen.



Mehr zum Kurs



All Articles