{"id":75585,"date":"2020-03-27T07:42:28","date_gmt":"2020-03-27T05:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko"},"modified":"2020-03-27T07:42:28","modified_gmt":"2020-03-27T05:42:28","slug":"extendedpromql-rasshifrovka-doklada-romana-havronenko","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","title":{"rendered":"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Ich lade Sie ein, sich mit der Pr\u00e4sentation von Roman Khavronenko \"ExtendedPromQL\" vertraut zu machen.<\/strong><\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"lWYaiagvmfw\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/lWYaiagvmfw\/hqdefault.jpg\" alt=\"Video abspielen\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/54a175d9c74c90d9d313f8ff71476638.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kurz zu mir. Mein Name ist Roman. Ich arbeite bei CloudFlare und wohne in London. Aber ich bin auch der Maintainer von VictoriaMetrics.<br \/>\nUnd ich bin der Autor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/clickhouse-grafana\">des ClickHouse-Plugins<\/a><\/noindex> f\u00fcr Grafana und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse-Proxy<\/a><\/noindex> \u2013 das ist ein kleiner Proxy f\u00fcr ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fc1aa56b144def5db9fcee844d5016f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir beginnen mit dem ersten Teil, der \u201e\u00dcbersetzungsprobleme\u201c hei\u00dft, in dem ich dar\u00fcber sprechen werde, dass jede Sprache oder sogar einfach nur die Sprache der Kommunikation sehr wichtig ist. Denn das ist der Weg, wie Sie Ihre Gedanken einem anderen Menschen oder System mitteilen, wie Sie eine Anfrage formulieren. Die Leute im Internet streiten dar\u00fcber, welche Sprache besser ist \u2013 Java oder eine andere. Ich habe f\u00fcr mich entschieden, dass man je nach Aufgabe w\u00e4hlen muss, denn das ist alles spezifisch.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fangen wir von vorne an. Was ist PromQL? PromQL ist die Prometheus Query Language. So formulieren wir Anfragen in Prometheus, um Zeitreihendaten zu erhalten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/56b1ef4cc04defdffeea8b2666fdc354.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was sind Zeitreihendaten? Um es w\u00f6rtlich zu nehmen, sind das drei Parameter. <\/p>\n<p><\/p>\n<p>Das sind:<\/p>\n<p><\/p>\n<ul>\n<li>Worauf wir schauen. <\/li>\n<li>Wann wir darauf schauen.<\/li>\n<li>Und welchen Wert es anzeigt. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/358a193e889204d28debe1b74b93df3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn wir uns dieses Diagramm ansehen (dieses Diagramm stammt von meinem Telefon und zeigt die Statistik meiner Schritte), k\u00f6nnen wir diese Fragen schnell beantworten. <\/p>\n<p><\/p>\n<p>Wir schauen auf die Schritte. Wir sehen den Wert und sehen die Zeit, wann wir darauf schauen. Das bedeutet, dass wir anhand dieses Diagramms leicht sagen k\u00f6nnen, dass ich am Sonntag etwa 15.000 Schritte gemacht habe. Das sind Zeitreihendaten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt lassen Sie uns diese \"in ein anderes Datenmodell umwandeln\", indem wir sie in eine Tabelle umformatieren. Hier haben wir auch das, was wir betrachten. Ich habe hier einige zus\u00e4tzliche Daten hinzugef\u00fcgt, die wir Metadaten nennen werden, d. h. das sind nicht nur meine Daten, sondern zwei Personen, sagen wir, Jay und Silent Bob. Das ist das, was wir betrachten; was es zeigt und wann es diesen Wert anzeigt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNun versuchen wir, all diese Daten in einer Datenbank zu speichern. Als Beispiel habe ich die ClickHouse-Syntax gew\u00e4hlt. Hier erstellen wir eine Tabelle, die \u201eSteps\u201c genannt wird, also das, worauf wir schauen. Es gibt die Zeit, wann wir darauf schauen; was es anzeigt und einige Metadaten, in denen wir speichern, wer das ist: Jay und Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/bd01f9dc0b29d34aacbb8f012710a94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und um all dies zu visualisieren, werden wir Grafana verwenden, weil es erstens sch\u00f6n aussieht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9f573241e9ae32e31d6d0b879115970b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir werden auch dieses Plugin verwenden. Daf\u00fcr gibt es zwei Gr\u00fcnde. Erstens, weil ich es geschrieben habe. Und ich wei\u00df genau, wie schwierig es ist, Zeitreihendaten aus ClickHouse zu extrahieren, um sie in Grafana anzuzeigen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/29f2d72f9995afb54b23bb7b4230b840.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir werden im Graph Panel anzeigen. Das ist das beliebteste Panel in Grafana, das die Abh\u00e4ngigkeit eines Wertes von der Zeit zeigt, weshalb wir nur zwei Parameter ben\u00f6tigen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLass uns die einfachste Abfrage schreiben \u2013 wie wir die Statistik der Schritte in Grafana anzeigen, indem wir diese Daten in ClickHouse speichern, in der Tabelle, die wir erstellt haben. Und wir schreiben so eine einfache Abfrage. Wir w\u00e4hlen aus den Schritten. Wir w\u00e4hlen den Wert und die Zeit dieser Werte, d. h. die gleichen drei Parameter, \u00fcber die wir gesprochen haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ad7895105050178de5bc8a154da7e6e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und als Ergebnis erhalten wir so ein Diagramm. Wer wei\u00df, warum es so seltsam ist?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Richtig, wir m\u00fcssen nach der Zeit sortieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und schlie\u00dflich erhalten wir ein besseres, aber immer noch seltsames Diagramm. Wer wei\u00df, warum? Richtig, es gibt zwei Teilnehmer, und wir geben in Grafana zwei Zeitreihen zur\u00fcck, denn wenn wir uns das Datenmodell noch einmal ansehen, dann ist jede Zeitreihe eine einzigartige Kombination aus Namen und allen Schl\u00fcssel-Wert-Paaren von Labels.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/f19bf1a9f43ae8de22af6bf7b494902f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Deshalb m\u00fcssen wir eine bestimmte Person ausw\u00e4hlen. Wir w\u00e4hlen Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b6a714d5d6ce4d4b27634da9414aa6f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und zeichnen noch einmal. Jetzt \u00e4hnelt das Diagramm der Wahrheit. Jetzt ist es ein normales Diagramm, und alles funktioniert gut.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/2a93b4cd548239c9314c3283c5b9f488.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wahrscheinlich wisst ihr, wie man ungef\u00e4hr dasselbe bei Prometheus mit PromQL macht. Ungef\u00e4hr so. Ein bisschen einfacher. Und wir werden all das aufteilen. Wir haben Steps genommen. Und filtern nach Jay. Wir geben hier nicht an, dass wir den Wert erhalten wollen, und wir w\u00e4hlen keine Zeit aus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/5e080a1b88c156522af21bf00f3cd641.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt versuchen wir, die Geschwindigkeit von Jay oder Silent Bob zu berechnen. In ClickHouse m\u00fcssen wir eine runningDifference durchf\u00fchren, d. h. den Unterschied zwischen den Punktpaaren berechnen und sie durch die Zeit teilen, um die exakte Geschwindigkeit zu erhalten. Die Abfrage w\u00fcrde ungef\u00e4hr so aussehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und sie zeigt ungef\u00e4hr solche Werte an, d. h. Silent Bob oder Jay macht etwa 1,8 Schritte pro Sekunde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/1c328f99da6f160bdca23ab5f461bda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und in Prometheus wisst ihr auch, wie man das macht. Viel einfacher, als es vorher war.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Und um das auch weiterhin so einfach in Grafana zu machen, habe ich eine solche Wrapper hinzugef\u00fcgt, die sehr \u00e4hnlich wie PromQL aussieht. Sie wird Rate Macros genannt oder wie auch immer Sie es nennen m\u00f6chten. In Grafana schreiben Sie einfach \u201erate\u201c, aber irgendwo tief im Hintergrund wird es zu einer solchen gro\u00dfen Abfrage transformiert. Und Sie m\u00fcssen nicht einmal darauf schauen, sie ist irgendwo da, aber Sie sparen eine Menge Zeit, denn solche riesigen SQL-Abfragen zu schreiben, ist immer aufwendig. Man kann leicht einen Fehler machen und danach lange nicht verstehen, was passiert.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und das ist eine Abfrage, die nicht einmal auf eine Folie gepasst hat, und ich musste sie sogar in zwei Spalten aufteilen. Dies ist auch eine Abfrage in ClickHouse, die dasselbe Rate macht, aber auf beide Zeitreihen: sowohl auf Silent Bob als auch auf Jay, damit wir auf unserem Dashboard zwei Zeitreihen haben. Und das ist schon sehr kompliziert, meiner Meinung nach. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und in Prometheus wird das sum (rate) sein. F\u00fcr ClickHouse habe ich ein separates Makro erstellt, das RateColumns hei\u00dft und wie eine Abfrage in Prometheus aussieht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9743c6a4b3de4aab7cfb5bd3fd50fcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben uns das angeschaut, und PromQL sieht zwar gro\u00dfartig aus, hat aber nat\u00fcrlich seine Einschr\u00e4nkungen.<\/p>\n<p><\/p>\n<p>Das sind:<\/p>\n<p><\/p>\n<ul>\n<li>Begrenzte SELECT.<\/li>\n<li>Grenzwert-JOIN.<\/li>\n<li>Keine Unterst\u00fctzung f\u00fcr HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>Und wenn Sie lange damit gearbeitet haben, wissen Sie, dass es manchmal sehr schwierig ist, etwas in PromQL zu machen, w\u00e4hrend man in SQL fast alles tun kann, denn all diese Optionen, die wir jetzt besprochen haben, h\u00e4tten in SQL umgesetzt werden k\u00f6nnen. Aber w\u00e4re es bequem, das zu benutzen? Und das bringt mich auf den Gedanken, dass nicht immer die m\u00e4chtigste Sprache die bequemste sein kann.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ec8786f1d72a1f8652fa631cdffc9c25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Deshalb muss man manchmal die Sprache passend zur Aufgabe w\u00e4hlen. Es ist wie der Kampf zwischen Batman und Superman. Offensichtlich ist Superman st\u00e4rker, aber Batman konnte ihn besiegen, weil er praktischer war und genau wusste, was er tat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und der n\u00e4chste Teil \u2013 das Erweitern von PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b806acf0e6c7c416614d3fd49004b4be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Noch einmal zu VictoriaMetrics. Was ist VictoriaMetrics? Es ist eine Zeitreihen-Datenbank, sie ist Open Source, wir vertreiben sie in Einzel- und Cluster-Versionen. Laut unseren Benchmarks ist sie die schnellste auf dem Markt und bei der Kompression ebenso, d.h. echte Menschen berichten von einer Kompression von etwa 0,4 Byte pro Punkt, w\u00e4hrend es bei Prometheus 1,2-1,4 ist. <\/p>\n<p><\/p>\n<p>Wir unterst\u00fctzen nicht nur Prometheus. Wir unterst\u00fctzen InfluxDB, Graphite, OpenTSDB.<\/p>\n<p><\/p>\n<p>In uns kann man \"schreiben\", das hei\u00dft, man kann alte Daten \u00fcbertragen. <\/p>\n<p><\/p>\n<p>Und au\u00dferdem arbeiten wir ideal mit Prometheus und Grafana, d.h. wir unterst\u00fctzen die PromQL-Engine. Und in Grafana k\u00f6nnen Sie einfach den Prometheus-Endpunkt gegen VictoriaMetrics austauschen und alle Ihre Dashboards funktionieren wie gewohnt. <\/p>\n<p><\/p>\n<p>Aber Sie k\u00f6nnen auch zus\u00e4tzliche Funktionen nutzen, die VictoriaMetrics bietet.<\/p>\n<p><\/p>\n<p>Wir werden schnell die Funktionen durchgehen, die wir hinzugef\u00fcgt haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78e9c0ce91fad48ab859fc2cf06a0689.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Omit interval param \u2013 Sie k\u00f6nnen den Intervallparameter in Grafana weglassen. Wenn Sie keine seltsamen Grafiken beim Zoom-in\/Zoom-out im Panel erhalten m\u00f6chten, wird empfohlen, die Variable <code>$__interval<\/code>zu verwenden. Dies ist eine interne Variable von Grafana und sie w\u00e4hlt selbst den Datenbereich aus. Und VictoriaMetrics kann selbst erkennen, wie dieser Bereich aussehen sollte. Sie m\u00fcssen keine Ihrer Abfragen aktualisieren. Es wird viel einfacher sein.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4094c7b8b5e6eef6134b5aa344ef7409.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die zweite Funktion ist das Intervallreferencing. Sie k\u00f6nnen dieses Intervall in Ihren Ausdr\u00fccken verwenden. Sie k\u00f6nnen damit multiplizieren, dividieren, \u00fcbergeben, darauf Bezug nehmen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/967ca6166e588987bd69c1e1953dca31.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Als n\u00e4chstes die Familie der Rollup-Funktionen. Rollup-Funktionen transformieren jede Ihrer Zeitreihen in drei separate Zeitreihen. Das sind min, max und avg. Ich finde, das ist sehr praktisch, da es manchmal bestimmte Ausrei\u00dfer (Anomalien) und Ungenauigkeiten anzeigen kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d5ff7d6f6ae8f7550434a3dbbca09b20.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wenn Sie einfach irate oder rate durchf\u00fchren, k\u00f6nnen Sie wahrscheinlich F\u00e4lle \u00fcbersehen, in denen sich die Zeitreihe nicht so verh\u00e4lt, wie Sie es vorausgesetzt haben. Mit dieser Funktion ist es viel einfacher zu sehen, dass max beispielsweise sehr stark von avg abweicht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dann die default-Variable. Default \u2013 das bedeutet, welchen Wert wir in Grafana anzeigen m\u00fcssen, wenn wir momentan keine Zeitreihe haben. Wann passiert das? Angenommen, Sie exportieren eine Metrik zu Fehlern. Und Ihre Anwendung ist so gro\u00dfartig, dass Sie bei Start keine Fehler und sogar in den n\u00e4chsten drei Stunden oder sogar einem Tag keine Fehler haben. Und Sie haben Dashboards, die das Verh\u00e4ltnis von Success zu Error anzeigen. Sie zeigen Ihnen nichts an, weil Sie keine Fehler-Metrik haben. Aber im Default k\u00f6nnen Sie anything angeben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/cb4e23199194006186ac6907d2335cf6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Keep_last_Value \u2013 speichert den letzten Wert der Metrik, falls sie verloren geht. Wenn Prometheus nach dem n\u00e4chsten Scrape sie innerhalb von 5 Minuten nicht gefunden hat, werden wir hier ihren letzten Wert speichern und Ihre Grafiken werden nicht wieder kaputtgehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ca202f8a70f071cbd85b33b98cd28bb5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Scrape_interval \u2013 zeigt, wie h\u00e4ufig Prometheus Daten f\u00fcr Ihre Metrik sammelt, mit welcher Frequenz. Hier k\u00f6nnen Sie zum Beispiel eine Unterbrechung sehen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLabel replace \u2013 eine beliebte Funktion. Aber wir finden, dass sie etwas kompliziert ist, da sie mehrere Argumente ben\u00f6tigt. Und Sie m\u00fcssen sich nicht nur an 5 Argumente erinnern, sondern auch an deren Reihenfolge.<br \/>\n<img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWarum also nicht einfacher machen? D.h. in kleine Funktionen mit verst\u00e4ndlichem Syntax aufteilen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/e928549205018e7405cc2a81970a8514.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und jetzt das Interessanteste. Warum halten wir das f\u00fcr erweitertes PromQL? Weil wir Common Table Expressions unterst\u00fctzen. Sie k\u00f6nnen den QR-Code scannen (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL\">https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL<\/a><\/noindex>), um sich Beispiele anzusehen, einschlie\u00dflich eines Playgrounds, in dem Sie Abfragen direkt in VictoriaMetrics ausf\u00fchren k\u00f6nnen, ohne sie installieren zu m\u00fcssen, einfach im Browser.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ist das also? Diese Abfrage oben ist eine ziemlich beliebte Abfrage. Ich denke, in jedem Dashboard in vielen Unternehmen verwenden Sie denselben Filter f\u00fcr alles. Normalerweise ist es so. Aber wenn Sie einen neuen Filter hinzuf\u00fcgen m\u00fcssen, m\u00fcssen Sie jedes Panel aktualisieren oder das Dashboard herunterladen, in JSON \u00f6ffnen und eine Suchen-Ersetzen-Aktion durchf\u00fchren, was ebenfalls Zeit in Anspruch nimmt. Warum also nicht diesen Wert in einer Variablen speichern und ihn wiederverwenden? Das erscheint mir viel einfacher und verst\u00e4ndlicher.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn ich beispielsweise die Filter in Grafana in allen Abfragen aktualisieren muss, und das Dashboard kann riesig sein oder es kann sogar mehrere geben. Und wie w\u00fcrde ich dieses Problem in Grafana l\u00f6sen?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich l\u00f6se dieses Problem so: Ich erstelle einen commonFilter und definiere darin diesen Filter, und dann verwende ich ihn in den Abfragen wieder. Aber wenn Sie es jetzt genauso machen, wird es nicht funktionieren, weil Grafana es Ihnen nicht erlaubt, Variablen innerhalb von Variablenabfragen zu verwenden. Und das ist etwas seltsam.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/0b7a40976cb3eeda370518a242f78708.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Deshalb habe ich eine solche Variante erstellt, die das erlaubt. Und wenn Sie interessiert sind oder eine solche Funktion m\u00f6chten, unterst\u00fctzen Sie sie oder geben Sie einen Daumen nach unten, wenn Ihnen die Idee nicht gef\u00e4llt. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grafana\/grafana\/pull\/16694\">https:\/\/github.com\/grafana\/grafana\/pull\/16694<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Weiter zu PromQL erweitert. Hier definieren wir nicht nur eine Variable, sondern gleich eine gesamte Funktion. Und wir nennen sie ru (resource usage). Diese Funktion nimmt freie Ressourcen, eine Ressourcenbegrenzung und einen Filter entgegen. Der Syntax scheint einfach zu sein. Und es ist sehr leicht, diese Funktion zu verwenden und den Prozentsatz des freien Speichers zu berechnen. D.h. wie viel Speicher wir haben, welches Limit besteht und wie wir filtern. Das w\u00e4re viel bequemer, wenn Sie all dies unter Verwendung der gleichen Filter schreiben w\u00fcrden, da es sonst zu einer sehr gro\u00dfen Abfrage werden w\u00fcrde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4ca66e18ac665fe1038493709530b82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und hier ist ein Beispiel f\u00fcr eine solche gro\u00dfe Anfrage. Sie stammt vom offiziellen NodeExporter-Dashboard f\u00fcr Grafana. Aber ich verstehe nicht ganz, was hier passiert. Das hei\u00dft, nat\u00fcrlich verstehe ich es, wenn ich genau hinschaue, aber die Menge an Klammern kann die Motivation, sich damit auseinanderzusetzen, sofort mindern. Und warum nicht einfacher und verst\u00e4ndlicher machen?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/50e01e7f0c1d03965b028266130413f0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zum Beispiel so, indem wir wichtige Dinge oder Teile in Variablen hervorheben. Und dann unsere grundlegenden Berechnungen durchf\u00fchren. Das sieht schon eher nach Programmierung aus, das ist es, was ich in Zukunft in Grafana sehen m\u00f6chte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/81f957d89f97ebf686abdf969982d3ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist ein zweites Beispiel, wie wir es noch einfacher machen k\u00f6nnten, wenn wir diese Funktion ru bereits h\u00e4tten, und die gibt es direkt in VictoriaMetrics. Und dann \u00fcbergibst du einfach den zwischengespeicherten Wert, den du in CTE deklariert hast.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/415302741e14232228353db6ec57a2e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich habe bereits dar\u00fcber gesprochen, wie wichtig es ist, die richtige Programmiersprache zu verwenden. Und wahrscheinlich gibt es in jeder Firma in Grafana eigene Vorgehensweisen. Und vielleicht gibst du auch deinen Entwicklern Zugang zu Grafana, und die Entwickler machen ihre eigenen Dinge. Und sie tun das alle auf unterschiedliche Weise. Ich h\u00e4tte es gerne, wenn das einheitlicher w\u00e4re, also auf einen gemeinsamen Standard reduziert w\u00fcrde.<\/p>\n<p><\/p>\n<p>Angenommen, du hast nicht nur Systemingenieure, vielleicht hast du sogar Experten, DevOps oder SRE. Vielleicht hast du Experten, die wissen, was Monitoring ist, die wissen, was Grafana ist, das hei\u00dft, sie arbeiten seit Jahren damit und wissen genau, wie man es richtig macht. Und sie haben das schon 100 Mal geschrieben und jedem erkl\u00e4rt, aber irgendwie h\u00f6rt niemand zu.<\/p>\n<p><\/p>\n<p>Was w\u00e4re, wenn sie ihr Wissen direkt in Grafana einbringen k\u00f6nnten, damit andere Benutzer die Funktionen wiederverwenden k\u00f6nnen? Und wenn sie den Prozentsatz des freien Speichers berechnen m\u00fcssten, w\u00fcrden sie einfach die Funktion anwenden. Was w\u00e4re, wenn die Sch\u00f6pfer der Exporteure zusammen mit ihrem Produkt auch eine Sammlung von Funktionen bereitstellen w\u00fcrden, um mit ihren Metriken zu arbeiten, weil sie genau wissen, was das f\u00fcr Metriken sind und wie man sie richtig berechnet?<\/p>\n<p><\/p>\n<p>Das gibt es tats\u00e4chlich nicht. Das habe ich selbst gemacht. Das ist die Unterst\u00fctzung von Bibliotheken in Grafana. Angenommen, die Leute, die den NodeExporter erstellt haben, haben das gemacht, was ich beschrieben habe. Und sie haben auch eine Sammlung von Funktionen bereitgestellt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das hei\u00dft, es sieht ungef\u00e4hr so aus. Sie integrieren diese Bibliothek in Grafana, gehen in die Bearbeitung, und hier ist ganz einfach im JSON geschrieben, wie man mit dieser Metrik arbeitet. Das hei\u00dft, eine Art von Funktionalit\u00e4ten, deren Beschreibung und in was sie sich entfalten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78a85dd219a421757807be895c173a39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich denke, das k\u00f6nnte n\u00fctzlich sein, weil Sie dann in Grafana einfach so schreiben w\u00fcrden. Und Grafana \"sagt\" Ihnen, dass es eine bestimmte Funktion aus einer bestimmten Bibliothek gibt \u2013 lassen Sie uns diese verwenden. Ich glaube, das w\u00e4re wirklich gro\u00dfartig.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein bisschen \u00fcber VictoriaMetrics. Wir machen viele interessante Dinge. Lesen Sie unsere Artikel \u00fcber Compression, \u00fcber unsere Wettbewerbe mit anderen Time Series-Datenanwendungen, unsere Erkl\u00e4rung, wie man mit PromQL arbeitet, weil es viele Neulinge gibt, sowie \u00fcber vertikale Skalierbarkeit und das Aufeinandertreffen mit Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u201eExtendedPromQL\u201c \u2014 Zusammenfassung des Berichts von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/562829a25ee6131c7eaed8c561c6927c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fragen:<\/p>\n<p><\/p>\n<p><em>Ich beginne meine Frage mit einer einfachen Lebensgeschichte. Als ich Grafana zum ersten Mal verwendete, schrieb ich eine sehr \u00fcberzeugende Abfrage, die 5 Zeilen lang war. Am Ende entstand ein sehr \u00fcberzeugendes Diagramm. Dieses Diagramm stand kurz davor, in die Produktion zu gehen. Aber bei genauerer Betrachtung stellte sich heraus, dass dieses Diagramm absoluten Unsinn zeigt, der mit der Realit\u00e4t nichts zu tun hat, obwohl die Zahlen in den Bereich fallen, den wir erwartet haben. Und meine Frage: Wir haben Bibliotheken, wir haben Funktionen, aber wie schreiben wir Tests f\u00fcr Grafana? Sie haben eine komplexe Abfrage geschrieben, von der eine Gesch\u00e4ftsentscheidung abh\u00e4ngt \u2013 ob man einen echten Servercontainer bestellt oder nicht. Und wie wissen wir, ob diese Funktion, die das Diagramm zeichnet, der Wahrheit nahekommt? Vielen Dank.<\/em><\/p>\n<p><\/p>\n<p>Danke f\u00fcr die Frage. Es gibt zwei Teile. Erstens habe ich den Eindruck, basierend auf meiner Erfahrung, dass die meisten Benutzer, wenn sie sich ihre Diagramme ansehen, nicht verstehen, was sie ihnen zeigen. Irgendwie sind die Leute sehr gut darin, Ausreden f\u00fcr jede Anomalie zu finden, die in den Diagrammen auftaucht, selbst wenn es einen Fehler innerhalb der Funktion gibt. Und der zweite Teil \u2013 ich denke, dass die Nutzung solcher Funktionen viel besser zur L\u00f6sung Ihres Problems passen w\u00fcrde, anstatt dass jeder Ihrer Entwickler seine eigene Kapazit\u00e4tsplanung macht und mit einer gewissen Wahrscheinlichkeit Fehler macht.<\/p>\n<p><\/p>\n<p><em>Wie \u00fcberpr\u00fcft man das?<\/em><\/p>\n<p><\/p>\n<p>Wie \u00fcberpr\u00fcft man das? Wahrscheinlich gar nicht. <\/p>\n<p><\/p>\n<p><em>In Form eines Tests in Grafana.<\/em><\/p>\n<p><\/p>\n<p>Was hat Grafana damit zu tun? Grafana \u00fcbertr\u00e4gt diese Abfrage direkt an die DataSource.<\/p>\n<p><\/p>\n<p><em>Indem man ein bisschen bei den Parametern nachjustiert.<\/em><\/p>\n<p><\/p>\n<p>Nein, in Grafana wird nichts hinzugef\u00fcgt. Es k\u00f6nnen GET-Parameter vorhanden sein, wie zum Beispiel step. Dieser wird zwar nicht explizit angegeben, kann aber \u00fcberschrieben werden oder auch nicht \u2013 er wird automatisch hinzugef\u00fcgt. Hier schreiben Sie keine Tests. Ich denke, man sollte Grafana hier nicht als Quelle der Wahrheit betrachten.<\/p>\n<p><\/p>\n<p><em>Danke f\u00fcr den Vortrag! Danke f\u00fcr die Kompression! Sie hatten das Mapping der Variablen im Diagramm erw\u00e4hnt, dass man in Grafana keine Variable in einer Variablen verwenden kann. Verstehen Sie, worauf ich hinaus will?<\/em><\/p>\n<p><\/p>\n<p>Ja.<\/p>\n<p><\/p>\n<p><em>Das war urspr\u00fcnglich ein gro\u00dfes Problem, als ich in Grafana einen Alert erstellen wollte. Man muss den Alert f\u00fcr jeden Host einzeln erstellen. Funktioniert das, was Sie gemacht haben, auch f\u00fcr Alerts in Grafana?<\/em><\/p>\n<p><\/p>\n<p>Wenn Grafana nicht anders auf Variablen zugreift, dann \u2013 ja, wird es funktionieren. Aber mein Rat ist, das Alerting in Grafana ganz zu vermeiden; es ist besser, alertmanager zu verwenden.<\/p>\n<p><\/p>\n<p><em>Ja, ich benutze ihn, aber es schien in Grafana einfacher einzurichten zu sein, trotzdem danke f\u00fcr den Rat!<\/em><\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/494034\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot; \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u043e \u043c\u043d\u0435. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u043e\u043c\u0430\u043d. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 CloudFlare, \u0436\u0438\u0432\u0443 \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u044f \u043c\u0435\u0439\u0442\u0435\u043d\u0435\u0440 VictoriaMetrics. \u0418 \u044f \u0430\u0432\u0442\u043e\u0440 ClickHouse \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Grafana \u0438 ClickHouse-proxy \u2013 \u044d\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f ClickHouse. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u00bb \u0438 \u0432 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":75586,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-75585","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot;\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u00abExtendedPromQL\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot;\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-27T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-27T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u201eExtendedPromQL\u201c \u2013 Zusammenfassung des Vortrags von Roman Khavronenko | ProHoster","description":"Ich lade ein, den Bericht von Roman Khavronenko \"ExtendedPromQL\" zu lesen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u00abExtendedPromQL\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot;","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-27T05:42:28+00:00","article:modified_time":"2020-03-27T05:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"75585","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:54:47","updated":"2022-09-28 07:46:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/75585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=75585"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/75585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/75586"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=75585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=75585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=75585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}