{"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":"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Ich lade Sie ein, den Bericht von Roman Khavronenko \u00fcber \"ExtendedPromQL\" zu lesen.<\/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=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 lebe in London. Gleichzeitig bin ich Maintenance-Engineer bei 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 ein kleiner Proxy f\u00fcr ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 \u00abHerausforderungen der \u00dcbersetzung\u00bb hei\u00dft, und darin werde ich erz\u00e4hlen, dass jede Sprache oder sogar einfach eine Kommunikationssprache sehr wichtig ist. Denn so \u00fcbermitteln Sie Ihre Gedanken an eine andere Person oder ein System, so formulieren Sie Anfragen. Menschen im Internet streiten dar\u00fcber, welche Sprache besser ist \u2013 Java oder eine andere. F\u00fcr mich ist klar, dass die Wahl auf die Aufgabe abgestimmt sein sollte, denn das alles ist spezifisch.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns von vorne beginnen. Was ist PromQL? PromQL ist die Prometheus Query Language. Damit formulieren wir Abfragen in Prometheus, um Zeitreihendaten zu erhalten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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? Wenn wir es w\u00f6rtlich 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=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 (es stammt von meinem Telefon und zeigt die Statistiken meiner Schritte), k\u00f6nnen wir schnell auf diese Fragen antworten. <\/p>\n<p><\/p>\n<p>Wir betrachten die Schritte. Wir sehen den Wert und die Zeit, wenn wir darauf schauen. Das hei\u00dft, anhand dieses Diagramms k\u00f6nnen wir leicht sagen, dass ich am Sonntag etwa 15.000 Schritte gemacht habe. Es handelt sich um Zeitreihendaten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns nun diese Daten in ein anderes Datenmodell in Form einer Tabelle \"umwandeln\". Auch hier haben wir das, worauf wir schauen. Ich habe einige zus\u00e4tzliche Daten hinzugef\u00fcgt, die wir Metadaten nennen werden, z.B. waren nicht nur ich, sondern auch zwei andere Personen, sagen wir, Jay und Silent Bob. Das ist das, worauf wir schauen; was es zeigt und wann es diesen Wert anzeigt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJetzt wollen wir versuchen, all diese Daten in einer Datenbank zu speichern. Beispielsweise habe ich die Syntax von ClickHouse verwendet. Hier erstellen wir eine Tabelle, die \u201eSteps\u201c genannt wird, das hei\u00dft, das was wir betrachten. Es gibt die Zeit, in der wir darauf schauen; was es zeigt und einige Metadaten, wo wir speichern werden, wer es ist: Jay und Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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, denn erstens sieht es gut aus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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. Es gibt zwei Gr\u00fcnde daf\u00fcr. Erstens \u2013 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=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 dies im Graph Panel anzeigen. Dies ist das beliebteste Panel in Grafana, das die Abh\u00e4ngigkeit des Wertes von der Zeit zeigt, daher ben\u00f6tigen wir nur zwei Parameter.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLassen Sie uns die einfachste Abfrage schreiben \u2013 wie man die Schrittstatistik in Grafana anzeigt, wobei diese Daten in ClickHouse gespeichert sind, in der Tabelle, die wir erstellt haben. Wir schreiben also diese einfache Abfrage. Wir w\u00e4hlen aus den Schritten. Wir w\u00e4hlen den Wert und die Zeit dieser Werte, also die gleichen drei Parameter, \u00fcber die wir gesprochen haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 dieses Diagramm. Wer wei\u00df, warum es so seltsam aussieht?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Richtig, es muss nach der Zeit sortiert werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am Ende bekommen wir ein besseres, aber immer noch seltsames Diagramm. Wer wei\u00df, warum? Richtig, es gibt zwei Teilnehmer, und wir geben in Grafana zwei Zeitreihen aus, denn wenn man sich das Datenmodell nochmal anschaut, dann ist jede Zeitreihe eine einzigartige Kombination aus Namen und allen Schl\u00fcssel-Wert-Paaren der Labels.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 es nochmal. Jetzt sieht das Diagramm der Wahrheit schon n\u00e4her. Es ist jetzt ein normales Diagramm und alles funktioniert gut.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 wissen Sie, wie man dasselbe in Prometheus \u00fcber PromQL macht. Ungef\u00e4hr so. Ein wenig einfacher. Und wir werden das Ganze noch aufschl\u00fcsseln. Wir haben Steps genommen und filtern nach Jay. Wir geben hier nicht an, dass wir einen Wert ben\u00f6tigen, und w\u00e4hlen keine Zeit aus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 runningDifference machen, also den Unterschied zwischen Punktpaaren berechnen und durch die Zeit teilen, um die genaue Geschwindigkeit zu erhalten. Die Abfrage sieht ungef\u00e4hr so aus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und es wird ungef\u00e4hr solche Werte anzeigen, das hei\u00dft, Silent Bob oder Jay machen ungef\u00e4hr 1,8 Schritte pro Sekunde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 wissen Sie auch, wie man das macht. Viel einfacher, als es vorher war.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Um es in Grafana weiterhin einfach zu halten, habe ich eine Art Wrapper hinzugef\u00fcgt, der PromQL sehr \u00e4hnelt. Dieser wird als Rate Macros bezeichnet oder wie auch immer Sie ihn nennen m\u00f6chten. In Grafana schreiben Sie einfach \"rate\", aber tief im Inneren verwandelt sich dies in eine umfangreiche Anfrage. Sie m\u00fcssen sich nicht einmal damit auseinandersetzen; sie existiert im Hintergrund, wodurch Sie viel Zeit sparen, denn das Schreiben solcher gro\u00dfen SQL-Abfragen ist immer aufwendig. Sie k\u00f6nnten leicht einen Fehler machen und dann lange nicht verstehen, was passiert.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist eine Anfrage, die nicht einmal auf eine Folie passte und ich sie auf zwei Spalten aufteilen musste. Das ist ebenfalls eine Anfrage in ClickHouse, die dasselbe rate berechnet, aber f\u00fcr beide Zeitreihen: sowohl f\u00fcr Silent Bob als auch f\u00fcr Jay, damit wir auf unserem Dashboard zwei Zeitreihen haben. Das ist schon sehr komplex, finde ich. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und f\u00fcr Prometheus w\u00e4re das sum(rate). F\u00fcr ClickHouse habe ich ein separates Makro erstellt, das RateColumns hei\u00dft und wie eine Anfrage in Prometheus aussieht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 geschaut und PromQL scheint gro\u00dfartig zu sein, aber es hat nat\u00fcrlich auch seine Einschr\u00e4nkungen.<\/p>\n<p><\/p>\n<p>Das sind:<\/p>\n<p><\/p>\n<ul>\n<li>Limitierte SELECT.<\/li>\n<li>Grenz-JOIN.<\/li>\n<li>Keine Unterst\u00fctzung f\u00fcr HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>Wenn Sie lange mit ihm gearbeitet haben, wissen Sie, dass es manchmal sehr schwierig ist, etwas in PromQL zu erledigen, w\u00e4hrend dies in SQL fast alles m\u00f6glich ist. All die Optionen, die wir gerade besprochen haben, h\u00e4tten in SQL umgesetzt werden k\u00f6nnen. Aber w\u00e4re es praktisch, damit zu arbeiten? Das bringt mich zu dem Gedanken, dass die st\u00e4rkste Sprache nicht immer die benutzerfreundlichste sein muss.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 zu den Aufgaben ausw\u00e4hlen. Es ist wie der Kampf zwischen Batman und Superman. Klar, dass Superman st\u00e4rker ist, aber Batman konnte ihn besiegen, weil er praktischer ist und genau wusste, was er tut.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der n\u00e4chste Teil ist die Erweiterung von PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 Zeitreihendatenbank, sie ist OpenSource, und wir vertreiben sowohl die Single- als auch die Cluster-Versionen. Laut unseren Benchmarks ist sie die schnellste, die derzeit auf dem Markt ist, und auch bei der Kompression \u00e4hnlich \u2013 echte Nutzer berichten von einer Kompression von etwa 0,4 Byte pro Punkt, w\u00e4hrend Prometheus bei 1,2-1,4 liegt. <\/p>\n<p><\/p>\n<p>Wir unterst\u00fctzen nicht nur Prometheus. Wir unterst\u00fctzen auch InfluxDB, Graphite und OpenTSDB.<\/p>\n<p><\/p>\n<p>In uns kann man \"schreiben\", d.h. man kann alte Daten \u00fcbertragen. <\/p>\n<p><\/p>\n<p>Und wir arbeiten perfekt mit Prometheus und Grafana zusammen, d.h. wir unterst\u00fctzen die PromQL-Engine. In Grafana k\u00f6nnen Sie einfach den Prometheus-Endpunkt durch VictoriaMetrics ersetzen, und all 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>Lassen Sie uns schnell die Funktionen durchgehen, die wir hinzugef\u00fcgt haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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-Parameter \u2013 Sie k\u00f6nnen Intervalparameter in Grafana weglassen. Wenn Sie keine seltsamen Grafiken beim Heranzoomen oder Herauszoomen im Panel erhalten m\u00f6chten, wird empfohlen, die Variable <code>$__interval<\/code>zu verwenden. Das ist eine interne Variable von Grafana, die den Datenbereich selbst ausw\u00e4hlt. Und VictoriaMetrics kann selbst verstehen, wie dieser Bereich aussehen sollte, sodass Sie Ihre Abfragen nicht aktualisieren m\u00fcssen. Das wird viel einfacher.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 Intervall-Referencing. Sie k\u00f6nnen dieses Intervall in Ihren Ausdr\u00fccken verwenden. Sie k\u00f6nnen es multiplizieren, dividieren, \u00fcbergeben und darauf referenzieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 das Familien-Set der Rollup-Funktionen. Rollup-Funktionen transformieren Ihre Zeitreihen in drei separate Zeitreihen: min, max und avg. Ich finde das sehr praktisch, weil es manchmal helfen kann, Anomalien und Ungenauigkeiten zu erkennen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 nur die irate oder rate machen, dann k\u00f6nnten Sie wahrscheinlich einige F\u00e4lle \u00fcbersehen, in denen die Zeitreihe sich nicht so verh\u00e4lt, wie Sie angenommen haben. Mit dieser Funktion ist es viel einfacher zu sehen, dass zum Beispiel max stark von avg abweicht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die n\u00e4chste Variable ist default. Default bedeutet, welchen Wert wir in Grafana darstellen m\u00fcssen, falls wir momentan keine Zeitreihe haben. Wann passiert das? Angenommen, Sie exportieren eine Metrik zu Fehlern. Und Ihre Anwendung l\u00e4uft so gut, dass Sie beim Start keine Fehler haben und in den n\u00e4chsten drei Stunden oder sogar einem Tag keine Fehler auftreten. Sie haben Dashboards, die das Verh\u00e4ltnis von Erfolg zu Fehlern anzeigen. Und die werden Ihnen nichts zeigen, weil Sie keine Fehler-Metrik haben. Im Default k\u00f6nnen Sie jedoch alles angeben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 Metrikwert, wenn dieser nicht mehr vorhanden ist. Falls Prometheus bei der n\u00e4chsten Abfrage diesen innerhalb von 5 Minuten nicht findet, werden wir hier den letzten Wert speichern und Ihre Diagramme werden wieder korrekt sein.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 zu Ihrer Metrik sammelt, mit welcher Frequenz. Hier k\u00f6nnte man beispielsweise eine L\u00fccke sehen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBezeichnungsersatz \u2013 eine beliebte Funktion. Wir glauben jedoch, dass sie etwas kompliziert ist, da sie ganze Argumente annimmt. Sie m\u00fcssen sich nicht nur f\u00fcnf Argumente merken, sondern auch deren Reihenfolge.<br \/>\n<img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWarum also nicht einfacher gestalten? Das hei\u00dft, in kleinere Funktionen mit verst\u00e4ndlicher Syntax unterteilen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 Interessante. Warum glauben wir, dass das erweiterte PromQL ist? 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 Links mit Beispielen und einem Playground anzusehen, wo Sie Abfragen direkt in VictoriaMetrics im Browser ausf\u00fchren k\u00f6nnen, ohne es installieren zu m\u00fcssen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was bedeutet das? Die Anfrage oben ist eine ziemlich g\u00e4ngige Abfrage. Ich denke, in jedem Dashboard vieler Unternehmen verwenden Sie denselben Filter f\u00fcr alles. Normalerweise ist das der Fall. 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 Suche und Ersetzung durchf\u00fchren, was auch Zeit in Anspruch nimmt. Warum das Ergebnis nicht in einer Variable speichern und wiederverwenden? Das erscheint mir viel einfacher und verst\u00e4ndlicher.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zum Beispiel, wenn ich die Filter in Grafana f\u00fcr alle Anfragen aktualisieren muss, w\u00e4hrend das Dashboard riesig sein kann oder sogar mehrere davon existieren. Wie k\u00f6nnte ich dieses Problem in Grafana l\u00f6sen?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich gehe so vor: Ich erstelle einen commonFilter und definiere darin den Filter, den ich dann in den Anfragen wiederverwende. Wenn Sie es jetzt genauso machen, wird es jedoch nicht funktionieren, da Grafana nicht erlaubt, Variablen innerhalb von Abfragevariablen zu verwenden. Das ist ein wenig merkw\u00fcrdig.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 L\u00f6sung entwickelt, die dies erm\u00f6glicht. Wenn Sie interessiert sind oder eine solche Funktion m\u00f6chten, unterst\u00fctzen Sie mich bitte oder geben Sie einen Daumen nach unten, falls 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=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt sprechen wir \u00fcber die erweiterte PromQL. Hier definieren wir nicht nur eine Variable, sondern direkt eine ganze Funktion. Wir nennen sie ru (Ressourcenauslastung). Diese Funktion nimmt freie Ressourcen, Ressourcenbeschr\u00e4nkungen und Filter entgegen. Der Syntax ist eigentlich ganz einfach. Es ist sehr leicht, diese Funktion zu nutzen und den Anteil des freien Speichers zu berechnen, den wir haben. Das hei\u00dft, wie viel Speicherplatz uns zur Verf\u00fcgung steht, welche Begrenzung besteht und wie wir filtern. Es w\u00e4re viel praktischer, wenn Sie alles so schreiben k\u00f6nnten, dass Sie dieselben Filter wiederverwenden, denn das w\u00fcrde in eine sehr gro\u00dfe Abfrage m\u00fcnden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 Abfrage. Sie stammt vom offiziellen Dashboard des NodeExporters f\u00fcr Grafana. Aber ich habe Schwierigkeiten, zu verstehen, was hier passiert. Klar, ich kann es erahnen, wenn ich genau hinschaue, aber die Anzahl der Klammern kann die Motivation, den Inhalt zu verstehen, sofort mindern. Warum also nicht alles einfacher und verst\u00e4ndlicher machen?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 man bedeutende Dinge oder Teile in Variablen auslagert. Und dann seine grundlegenden Berechnungen durchf\u00fchrt. Das \u00e4hnelt bereits mehr der Programmierung, das ist es, was ich in Zukunft in Grafana sehen m\u00f6chte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 weiteres Beispiel, wie wir das noch einfacher machen k\u00f6nnten, wenn wir bereits diese Funktion in ru h\u00e4tten, die es direkt in VictoriaMetrics gibt. Sie w\u00fcrden dann einfach den zwischengespeicherten Wert \u00fcbergeben, den Sie im CTE deklariert haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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. Wahrscheinlich gibt es in jeder Firma in Grafana etwas Eigenes. Und wahrscheinlich geben Sie Ihren Entwicklern Zugang zu Grafana, und die Entwickler machen etwas Eigenes. Und sie tun das irgendwie unterschiedlich. Es w\u00e4re w\u00fcnschenswert, das irgendwie einheitlich zu gestalten, d.h. auf einen gemeinsamen Standard zu bringen.<\/p>\n<p><\/p>\n<p>Angenommen, Sie haben nicht nur Systemingenieure, vielleicht haben Sie sogar Experten, DevOps oder SRE. Vielleicht haben Sie Experten, die wissen, was Monitoring ist, die wissen, was Grafana ist, d.h. sie arbeiten seit Jahren damit und wissen genau, wie man es richtig macht. Und sie haben das schon 100 Mal geschrieben und allen erkl\u00e4rt, aber irgendwie h\u00f6rt niemand zu.<\/p>\n<p><\/p>\n<p>Was w\u00e4re, wenn sie dieses Wissen direkt in Grafana einbringen k\u00f6nnten, damit andere Nutzer die Funktionen wiederverwenden k\u00f6nnen? Und wenn man den Prozentsatz des freien Speichers berechnen m\u00fcsste, k\u00f6nnte man einfach die Funktion anwenden. Was w\u00e4re, wenn die Entwickler der Exporter, zusammen mit ihrem Produkt, auch eine Sammlung von Funktionen zur Verf\u00fcgung stellen w\u00fcrden, wie man mit ihren Metriken umgeht, da sie genau wissen, was das f\u00fcr Metriken sind und wie man sie korrekt berechnet?<\/p>\n<p><\/p>\n<p>Das existiert tats\u00e4chlich nicht. Das habe ich selbst gemacht. Das ist die Unterst\u00fctzung von Bibliotheken in Grafana. Angenommen, die Jungs, die NodeExporter entwickelt haben, h\u00e4tten das gemacht, was ich beschrieben habe. Und h\u00e4tten zudem eine Sammlung von Funktionen bereitgestellt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das sieht ungef\u00e4hr so aus. Sie binden diese Bibliothek in Grafana ein, gehen zur Bearbeitung und hier steht ganz einfach in JSON, wie man mit dieser Metrik arbeitet. Das hei\u00dft, eine Art Sammlung von Funktionen, deren Beschreibung und in was sie umgesetzt werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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, denn dann w\u00fcrden Sie in Grafana einfach so schreiben. Und Grafana \"sagt\" Ihnen, dass es eine solche Funktion aus einer bestimmten Bibliothek gibt \u2013 lassen Sie uns diese verwenden. Ich denke, das w\u00e4re gro\u00dfartig.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags von Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein wenig \u00fcber VictoriaMetrics. Wir machen viele interessante Dinge. Lesen Sie unsere Artikel \u00fcber Kompression, \u00fcber unsere Wettbewerbe mit anderen Zeitreihen-Datenanwendungen, unsere Erl\u00e4uterungen zur Arbeit mit PromQL, da es in diesem Bereich noch viele Anf\u00e4nger gibt, sowie \u00fcber vertikale Skalierbarkeit und den Wettbewerb mit Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 Zusammenfassung des Vortrags 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 m\u00f6chte meine Frage mit einer einfachen Lebensgeschichte beginnen. Als ich zum ersten Mal mit Grafana arbeitete, formulierte ich eine sehr \u00fcberzeugende Abfrage von f\u00fcnf Zeilen. Das Ergebnis war ein wirklich beeindruckendes Diagramm. Dieses Diagramm war fast bereit f\u00fcr die Produktion. Bei genauerem Hinsehen stellte sich jedoch heraus, dass dieses Diagramm absoluten Unsinn zeigt, der nichts mit der Realit\u00e4t zu tun hat, obwohl die Zahlen im erwarteten Bereich lagen. Und meine Frage lautet: Wir haben Bibliotheken, wir haben Funktionen, wie schreiben wir Tests f\u00fcr Grafana? Sie haben eine komplexe Abfrage verfasst, von der eine Gesch\u00e4ftsentscheidung abh\u00e4ngt \u2013 ob man einen echten Container von Servern bestellen soll oder nicht. Und wie wissen wir, dass die Funktion, die das Diagramm zeichnet, der Wahrheit entspricht? Vielen Dank.<\/em><\/p>\n<p><\/p>\n<p>Vielen Dank f\u00fcr die Frage. Es gibt zwei Aspekte. Erstens habe ich den Eindruck, basierend auf meinen Erfahrungen, dass die meisten Nutzer beim Blick auf ihre Grafiken oft nicht verstehen, was ihnen diese zeigen. Irgendwie sind die Leute sehr gut darin, f\u00fcr jede Anomalie, die in den Grafiken auftritt, eine Erkl\u00e4rung zu finden, selbst wenn es sich um einen Fehler in der Funktion handelt. Zweitens, ich denke, dass die Verwendung solcher Funktionen viel besser zur L\u00f6sung Ihres Problems passen w\u00fcrde, anstatt dass jeder Ihrer Entwickler seine eigenen Kapazit\u00e4tsplanungen vornimmt und dabei mit einer gewissen Fehlerquote scheitert.<\/p>\n<p><\/p>\n<p><em>Wie kann man das \u00fcberpr\u00fcfen?<\/em><\/p>\n<p><\/p>\n<p>Wie kann man das \u00fcberpr\u00fcfen? 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 leitet diese Anfrage direkt an die Datenquelle weiter.<\/p>\n<p><\/p>\n<p><em>Indem man ein wenig zu den Parametern hinzuf\u00fcgt.<\/em><\/p>\n<p><\/p>\n<p>Nein, in Grafana wird nichts hinzugef\u00fcgt. Es k\u00f6nnen GET-Parameter vorhanden sein, wie z.B. step. Dieser Parameter wird zwar nicht explizit angegeben, kann aber \u00fcberschrieben werden. Man kann ihn \u00fcberschreiben oder auch nicht, aber er wird automatisch hinzugef\u00fcgt. Hier k\u00f6nnen Sie keine Tests schreiben. Ich denke, man sollte in diesem Kontext nicht auf Grafana als die einzige Wahrheit vertrauen.<\/p>\n<p><\/p>\n<p><em>Vielen Dank f\u00fcr den Bericht! Vielen Dank f\u00fcr die Kompression! Sie haben das Mapping von Variablen im Diagramm erw\u00e4hnt, dass man in Grafana eine Variable nicht in einer anderen Variable verwenden kann. Verstehen Sie, wor\u00fcber ich spreche?<\/em><\/p>\n<p><\/p>\n<p>Ja.<\/p>\n<p><\/p>\n<p><em>Das war anfangs ein Kopfzerbrechen, als ich einen Alert in Grafana erstellen wollte. Dort muss man f\u00fcr jeden Host separat einen Alert einrichten. Funktioniert diese L\u00f6sung, die Sie gemacht haben, f\u00fcr Alerts in Grafana?<\/em><\/p>\n<p><\/p>\n<p>Wenn Grafana nicht irgendwie anders auf Variablen zugreift, dann ja, wird es funktionieren. Aber mein Rat ist, Alerts in Grafana \u00fcberhaupt nicht zu verwenden, es ist besser, den Alertmanager zu nutzen.<\/p>\n<p><\/p>\n<p><em>Ja, ich benutze ihn, aber in Grafana schien es einfacher in der Einrichtung. Vielen Dank 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 4.9.10 - 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; \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\" \/>\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) 4.9.10\" \/>\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; \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\" \/>\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\u00abExtendedPromQL\u00bb \u2014 Analyse des Vortrags von Roman Khavronenko | ProHoster","description":"Ich lade Sie ein, sich die Zusammenfassung des Berichts von Roman Khavronenko \"ExtendedPromQL\" anzusehen. Kurz zu mir: Mein Name ist Roman. Ich arbeite bei CloudFlare und wohne in London. Au\u00dferdem bin ich Maintainer von VictoriaMetrics. Und ich bin der Autor des ClickHouse-Plugins f\u00fcr Grafana und ClickHouse-Proxy \u2013 einem kleinen Proxy f\u00fcr ClickHouse. Wir beginnen mit dem ersten Teil, der \"\u00dcbersetzungsschwierigkeiten\" hei\u00dft, und darin werde ich.","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; \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","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"},"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}]}}