{"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\/ro\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","title":{"rendered":"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>V\u0103 propun s\u0103 lua\u021bi cuno\u0219tin\u021b\u0103 de transcrierea prezent\u0103rii lui Roman Havronenko \u201eExtendedPromQL\u201d<\/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=\"Reda\u021bi video\" 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 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/54a175d9c74c90d9d313f8ff71476638.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pe scurt despre mine. M\u0103 numesc Roman. Lucrez la CloudFlare \u0219i locuiesc \u00een Londra. Dar de asemenea, sunt \u00eentre\u021bin\u0103tor pentru VictoriaMetrics.<br \/>\n\u0218i sunt autorul <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/clickhouse-grafana\">pluginului ClickHouse<\/a><\/noindex> pentru Grafana \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse-proxy<\/a><\/noindex> \u2013 este un mic proxy pentru ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fc1aa56b144def5db9fcee844d5016f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vom \u00eencepe cu prima parte, care se nume\u0219te \u201eDificult\u0103\u021bi de traducere\u201d \u0219i \u00een care voi vorbi despre faptul c\u0103 orice limb\u0103 sau chiar simpla comunicare este foarte important\u0103. Pentru c\u0103 aceasta este modalitatea prin care transmi\u021bi cuiva sau unui sistem g\u00e2ndurile tale, cum formulezi o \u00eentrebare. Oamenii pe internet dezbat despre care limb\u0103 este mai bun\u0103 \u2013 Java sau alta. Eu am decis c\u0103 trebuie s\u0103 alegi \u00een func\u021bie de sarcin\u0103, pentru c\u0103 totul este specific.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 \u00eencepem de la \u00eenceput. Ce este PromQL? PromQL este Limbajul de Interogare Prometheus. Asta este cum form\u0103m interog\u0103ri \u00een Prometheus pentru a ob\u021bine date time series.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/56b1ef4cc04defdffeea8b2666fdc354.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce sunt datele time series? Dac\u0103 ar fi s\u0103 le explic\u0103m literal, acestea sunt trei parametrii. <\/p>\n<p><\/p>\n<p>Acestea sunt:<\/p>\n<p><\/p>\n<ul>\n<li>La ce ne uit\u0103m. <\/li>\n<li>C\u00e2nd ne uit\u0103m la asta.<\/li>\n<li>\u0218i ce valoare arat\u0103. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/358a193e889204d28debe1b74b93df3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dac\u0103 ne uit\u0103m la acest grafic (acest grafic de pe telefonul meu, care arat\u0103 statisticile pa\u0219ilor mei), atunci aici putem r\u0103spunde rapid la aceste \u00eentreb\u0103ri. <\/p>\n<p><\/p>\n<p>Ne uit\u0103m la pa\u0219i. Vedem valoarea \u0219i vedem timpul c\u00e2nd ne uit\u0103m la asta. Adic\u0103, privind acest grafic, este u\u0219or de spus c\u0103 duminica am f\u0103cut aproximativ 15.000 de pa\u0219i. Acestea sunt date time series. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum s\u0103 \u201edescompunem\u201d (transform\u0103m) aceste date \u00eentr-un alt model de date sub form\u0103 de tabel. Aici avem \u0219i noi ceea ce analiz\u0103m. Am ad\u0103ugat pu\u021bin date suplimentare, pe care le vom numi meta-date, adic\u0103 nu eu am parcurs acest proces, ci dou\u0103 persoane, s\u0103 spunem, Jay \u0219i Silent Bob. Acesta este aspectul pe care \u00eel analiz\u0103m; ce indic\u0103 \u0219i c\u00e2nd arat\u0103 aceast\u0103 valoare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAcum s\u0103 \u00eencerc\u0103m s\u0103 p\u0103str\u0103m toate aceste date \u00eentr-o baz\u0103 de date. Ca exemplu, am luat sintaxa ClickHouse. \u0218i aici cre\u0103m un tabel, care se nume\u0219te \u201eSteps\u201d, adic\u0103, la ce ne uit\u0103m. Aici este timpul c\u00e2nd ne uit\u0103m la asta; ce arat\u0103 \u0219i unele metadate, unde vom p\u0103stra cine sunt: Jay \u0219i Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/bd01f9dc0b29d34aacbb8f012710a94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i pentru a \u00eencerca s\u0103 vizualiz\u0103m totul, vom folosi Grafana, pentru c\u0103, \u00een primul r\u00e2nd, este frumos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9f573241e9ae32e31d6d0b879115970b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De asemenea, vom folosi acest plugin. Exist\u0103 dou\u0103 motive pentru aceasta. Primul \u2013 pentru c\u0103 eu l-am scris. \u0218i \u0219tiu exact c\u00e2t de greu este s\u0103 extragi datele de tip time series din ClickHouse pentru a le afi\u0219a \u00een Grafana. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/29f2d72f9995afb54b23bb7b4230b840.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vom afi\u0219a \u00een Graph Panel. Aceasta este cea mai popular\u0103 panou \u00een Grafana, care arat\u0103 dependen\u021ba valorii de timp, a\u0219a c\u0103 avem nevoie doar de dou\u0103 parametre.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHaide\u021bi s\u0103 scriem cea mai simpl\u0103 interogare \u2013 cum s\u0103 ar\u0103t\u0103m statisticile pa\u0219ilor \u00een Grafana, stoc\u00e2nd aceste date \u00een ClickHouse, \u00een acea tabel\u0103 pe care am creat-o. \u0218i scriem aceast\u0103 interogare simpl\u0103. Select\u0103m din pa\u0219i. Select\u0103m valoarea \u0219i select\u0103m timpul acestor valori, adic\u0103 acelea\u0219i trei parametre despre care am vorbit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ad7895105050178de5bc8a154da7e6e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i \u00een rezultat vom ob\u021bine un astfel de grafic. Cine \u0219tie de ce arat\u0103 at\u00e2t de ciudat?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Corect, trebuie s\u0103 sort\u0103m dup\u0103 timp.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i \u00een cele din urm\u0103 vom ob\u021bine un grafic mai bun, dar tot ciudat. Cine \u0219tie de ce? Corect, sunt doi participan\u021bi \u0219i \u00een Grafana oferim dou\u0103 time series, pentru c\u0103 dac\u0103 ne uit\u0103m la modelul de date \u00eenc\u0103 o dat\u0103, fiecare time series este o combina\u021bie unic\u0103 a numelui \u0219i a tuturor cheilor valorilor etichetelor.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/f19bf1a9f43ae8de22af6bf7b494902f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De aceea, trebuie s\u0103 alegem o persoan\u0103 anume. O alegem pe Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b6a714d5d6ce4d4b27634da9414aa6f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i desen\u0103m din nou. Acum graficul arat\u0103 adev\u0103rul. Acum este un grafic normal \u0219i totul func\u021bioneaz\u0103 bine.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/2a93b4cd548239c9314c3283c5b9f488.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i, probabil, \u0219ti\u021bi cum s\u0103 face\u021bi cam acela\u0219i lucru, dar \u00een Prometheus prin PromQL. Aproape a\u0219a. Un pic mai u\u0219or. \u0218i s\u0103 descompunem totul. Am analizat pa\u0219ii. \u0218i filtr\u0103m dup\u0103 Jay. Aici nu specific\u0103m ce valoare trebuie s\u0103 ob\u021binem \u0219i nu select\u0103m timpul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/5e080a1b88c156522af21bf00f3cd641.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum s\u0103 \u00eencerc\u0103m s\u0103 calcul\u0103m viteza de deplasare a lui Jay sau Silent Bob. \u00cen ClickHouse va trebui s\u0103 facem runningDifference, adic\u0103 s\u0103 calcul\u0103m diferen\u021ba dintre perechi de puncte \u0219i s\u0103 le \u00eemp\u0103r\u021bim la timp pentru a ob\u021bine viteza exact\u0103. Interogarea va ar\u0103ta aproximativ a\u0219a.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i va ar\u0103ta aprox. aceste valori, adic\u0103 Silent Bob sau Jay fac aproximativ 1,8 pa\u0219i pe secund\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/1c328f99da6f160bdca23ab5f461bda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i \u00een Prometheus \u0219ti\u021bi cum se face \u0219i asta. Mult mai simplu dec\u00e2t a fost anterior.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>\u0218i pentru a r\u0103m\u00e2ne la fel de u\u0219or de utilizat \u00een Grafana, am ad\u0103ugat un wrapper care arat\u0103 foarte asem\u0103n\u0103tor cu PromQL. Aceasta se nume\u0219te Rate Macros sau cum dori\u021bi s\u0103 o numi\u021bi. \u00cen Grafana, pur \u0219i simplu scrie\u021bi \u201erate\u201d, \u00eens\u0103 undeva \u00een ad\u00e2ncime, aceasta se transform\u0103 \u00eentr-o interogare mare. \u0218i nu trebuie s\u0103 v\u0103 uita\u021bi niciodat\u0103 la ea, este acolo, dar economisi\u021bi o mul\u021bime de timp, deoarece scrierea unor interog\u0103ri SQL at\u00e2t de mari este \u00eentotdeauna costisitoare. Pute\u021bi gre\u0219i cu u\u0219urin\u021b\u0103 \u0219i apoi s\u0103 nu \u00een\u021belege\u021bi timp \u00eendelungat ce se \u00eent\u00e2mpl\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iat\u0103 o interogare care nu a \u00eenc\u0103put nici pe un singur diapozitiv, \u0219i a trebuit s\u0103 o \u00eempart \u00een dou\u0103 coloane. Aceasta este, de asemenea, o interogare \u00een ClickHouse, care face acela\u0219i lucru de rate, dar pentru ambele time series: at\u00e2t pentru Silent Bob, c\u00e2t \u0219i pentru Jay, astfel \u00eenc\u00e2t s\u0103 avem dou\u0103 time series pe panou. \u0218i acesta este deja foarte complicat, \u00een opinia mea. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen Prometheus va fi sum (rate). Pentru ClickHouse, am f\u0103cut un macro separat, numit RateColumns, care arat\u0103 ca o interogare \u00een Prometheus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9743c6a4b3de4aab7cfb5bd3fd50fcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne-am uitat \u0219i, dup\u0103 cum pare, PromQL este foarte fain, dar are, desigur, anumite limit\u0103ri.<\/p>\n<p><\/p>\n<p>Acestea sunt:<\/p>\n<p><\/p>\n<ul>\n<li>SELECT limitat.<\/li>\n<li>JOIN-uri limitate.<\/li>\n<li>F\u0103r\u0103 suport pentru HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0218i dac\u0103 a\u021bi lucrat mult cu el, \u0219ti\u021bi c\u0103 uneori este foarte greu s\u0103 face\u021bi ceva \u00een PromQL, \u00een timp ce \u00een SQL pute\u021bi face practic totul, pentru c\u0103 toate aceste op\u021biuni despre care am discutat acum ar fi putut fi realizate \u00een SQL. Dar ar fi fost convenabil s\u0103 folosi\u021bi acest lucru? \u0218i aceasta m\u0103 duce la g\u00e2ndul c\u0103 nu \u00eentotdeauna cel mai puternic limbaj poate fi cel mai convenabil.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ec8786f1d72a1f8652fa631cdffc9c25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prin urmare, uneori trebuie s\u0103 alegi limbajul \u00een func\u021bie de sarcin\u0103. Este ca o b\u0103t\u0103lie \u00eentre Batman \u0219i Superman. Este clar c\u0103 Superman este mai puternic, dar Batman a reu\u0219it s\u0103-l \u00eenfrunte pentru c\u0103 este mai practic \u0219i \u0219tia exact ce face.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i partea urm\u0103toare este \u2013 Extinderea PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b806acf0e6c7c416614d3fd49004b4be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cenc\u0103 o dat\u0103 despre VictoriaMetrics. Ce este VictoriaMetrics? Este o baz\u0103 de date time series, este \u00een OpenSource, distribuit\u0103 \u00een versiunile single \u0219i cluster. Conform benchmark-urilor noastre, este cea mai rapid\u0103 de pe pia\u021b\u0103 \u00een prezent, iar \u00een ceea ce prive\u0219te compresia, de asemenea, adic\u0103, persoanele reale raporteaz\u0103 o compresie de aproximativ 0,4 byte pe punct, c\u00e2nd la Prometheus este \u00eentre 1,2-1,4. <\/p>\n<p><\/p>\n<p>Sus\u021binem nu doar Prometheus. Sus\u021binem InfluxDB, Graphite, OpenTSDB.<\/p>\n<p><\/p>\n<p>\u00cen noi se poate \u201escrie\u201d, adic\u0103 putem transfera date vechi. <\/p>\n<p><\/p>\n<p>\u0218i, de asemenea, func\u021bion\u0103m perfect cu Prometheus \u0219i Grafana, adic\u0103, sus\u021binem motorul PromQL. \u0218i \u00een Grafana, pute\u021bi pur \u0219i simplu s\u0103 schimba\u021bi endpoint-ul Prometheus cu VictoriaMetrics \u0219i toate dashboard-urile voastre vor func\u021biona la fel ca \u00eenainte. <\/p>\n<p><\/p>\n<p>Dar pute\u021bi utiliza \u0219i caracteristici suplimentare oferite de VictoriaMetrics.<\/p>\n<p><\/p>\n<p>Vom trece rapid prin func\u021biile pe care le-am ad\u0103ugat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78e9c0ce91fad48ab859fc2cf06a0689.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Omiterea parametrului interval \u2013 pute\u021bi omite parametrii interval \u00een Grafana. C\u00e2nd nu dori\u021bi s\u0103 ob\u021bine\u021bi grafice ciudate la zoom in\/out \u00een panou, se recomand\u0103 utilizarea variabilei <code>{$__interval}<\/code>. Aceasta este o variabil\u0103 intern\u0103 Grafana \u0219i ea alege singur\u0103 intervalul de date. Iar VictoriaMetrics poate \u00een\u021belege singur\u0103 ce ar trebui s\u0103 fie acest interval. \u0218i nu este nevoie s\u0103 actualiza\u021bi toate interog\u0103rile. Va fi mult mai simplu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4094c7b8b5e6eef6134b5aa344ef7409.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A doua func\u021bie \u2013 este referin\u021ba intervalului. Pute\u021bi folosi acest interval \u00een expresiile dumneavoastr\u0103. Pute\u021bi \u00eenmul\u021bi, \u00eemp\u0103r\u021bi, transmite, face referire la el.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/967ca6166e588987bd69c1e1953dca31.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen continuare, familia func\u021biilor rollup. Func\u021bia rollup transform\u0103 orice serie temporal\u0103 a dumneavoastr\u0103 \u00een trei serii temporale distincte. Acestea sunt min, max \u0219i avg. Consider c\u0103 este foarte convenabil, deoarece uneori poate ar\u0103ta anumite outliers (anomalii) \u0219i imprecizii. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d5ff7d6f6ae8f7550434a3dbbca09b20.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i dac\u0103 pur \u0219i simplu face\u021bi irate sau rate, probabil c\u0103 a\u021bi putea s\u0103 omite\u021bi unele cazuri c\u00e2nd seria temporal\u0103 se comport\u0103 diferit fa\u021b\u0103 de a\u0219tept\u0103rile dumneavoastr\u0103. Cu aceast\u0103 func\u021bie, este mult mai simplu s\u0103 observa\u021bi, de exemplu, c\u0103 max este mult mai mare dec\u00e2t avg.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Apoi, variabila default. Default \u2013 \u00eenseamn\u0103 ce valoare trebuie s\u0103 desen\u0103m \u00een Grafana, dac\u0103 nu avem serie temporal\u0103 \u00een acel moment. C\u00e2nd se \u00eent\u00e2mpl\u0103 asta? De exemplu, dac\u0103 exporta\u021bi o metric\u0103 de erori. \u0218i ave\u021bi o aplica\u021bie at\u00e2t de grozav\u0103 \u00eenc\u00e2t c\u00e2nd a\u021bi pornit atunci nu a\u021bi avut erori \u0219i nici nu a\u021bi avut erori \u00een urm\u0103toarele trei ore sau chiar zi. \u0218i ave\u021bi dashboard-uri care arat\u0103 raportul de succes fa\u021b\u0103 de erori. Ele v\u0103 vor ar\u0103ta nimic, pentru c\u0103 nu ave\u021bi metrica de erori. Iar \u00een default pute\u021bi specifica orice.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui 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 p\u0103streaz\u0103 ultima valoare a metricii, dac\u0103 aceasta a disp\u0103rut. Dac\u0103 Prometheus, dup\u0103 urm\u0103toarea extragere, nu a g\u0103sit-o timp de 5 minute, atunci aici vom re\u021bine ultima ei valoare \u0219i graficele dumneavoastr\u0103 nu se vor strica din nou.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui 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 arat\u0103 c\u00e2t de des Prometheus adun\u0103 date despre metrica dumneavoastr\u0103, cu ce frecven\u021b\u0103. Aici pute\u021bi observa o omisiune, de exemplu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLabel replace \u2013 o func\u021bie popular\u0103. Dar noi consider\u0103m c\u0103 este pu\u021bin complicat\u0103, deoarece ea accept\u0103 un num\u0103r \u00eentreg de argumente. \u0218i trebuie nu doar s\u0103 \u021bine\u021bi minte 5 argumente, ci \u0219i ordinea lor.<br \/>\n<img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA\u0219adar, de ce s\u0103 nu le facem mai simple? Adic\u0103, s\u0103 le \u00eemp\u0103r\u021bim \u00een func\u021bii mici cu o sintax\u0103 clar\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/e928549205018e7405cc2a81970a8514.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i acum vine partea interesant\u0103. De ce consider\u0103m c\u0103 aceasta este extensia PromQL? Pentru c\u0103 sus\u021binem expresiile de tip Common Table. Pute\u021bi s\u0103 accesa\u021bi QR-code-ul (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL\">https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL<\/a><\/noindex>), s\u0103 vizualiza\u021bi linkurile cu exemple, cu playground-ul, unde pute\u021bi executa interog\u0103ri direct \u00een VictoriaMetrics f\u0103r\u0103 a fi necesar\u0103 instalarea acesteia, doar \u00een browser.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i ce reprezint\u0103 aceasta? Aceast\u0103 interogare de mai sus este o interogare destul de popular\u0103. Cred c\u0103, \u00een orice dashboard \u00een multe companii, folosi\u021bi acela\u0219i filtru pentru toate. De obicei, a\u0219a se \u00eent\u00e2mpl\u0103. Dar c\u00e2nd trebuie s\u0103 ad\u0103uga\u021bi un filtru nou, trebuie fie s\u0103 actualiza\u021bi fiecare panou, fie s\u0103 desc\u0103rca\u021bi dashboard-ul, s\u0103-l deschide\u021bi \u00een JSON, s\u0103 face\u021bi c\u0103utare \u0219i \u00eenlocuire, ceea ce dureaz\u0103, de asemenea, timp. De ce s\u0103 nu p\u0103stra\u021bi aceast\u0103 valoare \u00eentr-o variabil\u0103 \u0219i s\u0103 o reutiliza\u021bi? Este, \u00een opinia mea, mult mai simplu \u0219i mai clar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De exemplu, c\u00e2nd trebuie s\u0103 actualizez filtrele \u00een Grafana \u00een toate interog\u0103rile, iar dashboard-ul poate fi foarte mare sau chiar pot exista mai multe. \u0218i cum a\u0219 dori s\u0103 rezolv aceast\u0103 problem\u0103 \u00een Grafana?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rezolv aceast\u0103 problem\u0103 astfel: creez commonFilter \u0219i \u00een el definesc acest filtru, apoi \u00eel reutilizez \u00een interog\u0103ri. Dar dac\u0103 acum face\u021bi la fel, nu va func\u021biona, pentru c\u0103 Grafana nu v\u0103 permite s\u0103 utiliza\u021bi variabile \u00een variabilele interog\u0103rilor. \u0218i este pu\u021bin ciudat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/0b7a40976cb3eeda370518a242f78708.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De aceea am creat o variant\u0103 care permite acest lucru. \u0218i dac\u0103 sunte\u021bi interesa\u021bi sau dori\u021bi aceast\u0103 func\u021bie, sus\u021bine\u021bi sau da\u021bi dislike, dac\u0103 nu v\u0103 place aceast\u0103 idee. <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 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mai departe despre PromQL extins. Aici definim nu doar o variabil\u0103, ci chiar o func\u021bie \u00eentreag\u0103. \u0218i o numim ru (consumul de resurse). Aceast\u0103 func\u021bie prime\u0219te resursele libere, limita pe resurs\u0103 \u0219i filtrul. Se pare c\u0103 sintaxa este destul de simpl\u0103. \u0218i este foarte u\u0219or s\u0103 folosi\u021bi aceast\u0103 func\u021bie \u0219i s\u0103 calcula\u021bi procentul de memorie liber\u0103 pe care o avem. Adic\u0103, c\u00e2t\u0103 memorie avem, care este limita \u0219i cum filtr\u0103m. Arat\u0103 mult mai convenabil, dac\u0103 a\u021bi scrie totul reutiliz\u00e2nd acelea\u0219i filtre, pentru c\u0103 s-ar transforma \u00eentr-o interogare foarte mare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4ca66e18ac665fe1038493709530b82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iat\u0103 un exemplu al unei cereri foarte mari. Este din tabloul de bord oficial NodeExporter pentru Grafana. Dar eu \u00een\u021beleg cam pu\u021bin despre ce se \u00eent\u00e2mpl\u0103 aici. Adic\u0103, desigur, \u00een\u021beleg dac\u0103 m\u0103 concentrez, dar num\u0103rul de paranteze poate imediat s\u0103 reduc\u0103 motiva\u021bia de a \u00een\u021belege ceea ce se \u00eent\u00e2mpl\u0103 aici. \u0218i de ce s\u0103 nu-l facem mai simplu \u0219i mai clar?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/50e01e7f0c1d03965b028266130413f0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De exemplu, a\u0219a, eviden\u021biind lucrurile sau p\u0103r\u021bile semnificative \u00een variabile. \u0218i apoi efectu\u00e2nd matematica de baz\u0103. Asta deja seam\u0103n\u0103 mai mult cu programarea, este ceea ce mi-ar pl\u0103cea s\u0103 v\u0103d \u00een viitor \u00een Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/81f957d89f97ebf686abdf969982d3ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iat\u0103 un al doilea exemplu, cum putem face acest lucru \u0219i mai simplu, dac\u0103 am avea deja aceast\u0103 func\u021bie ru, iar aceasta exist\u0103 deja direct \u00een VictoriaMetrics. Atunci, pur \u0219i simplu, transmi\u021bi valoarea cached pe care ai declarat-o \u00een CTE.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/415302741e14232228353db6ec57a2e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am mai spus c\u00e2t de important este s\u0103 folose\u0219ti limbajul de programare potrivit. \u0218i, probabil, \u00een fiecare companie \u00een Grafana se \u00eent\u00e2mpl\u0103 ceva propriu. \u0218i, probabil, oferi\u021bi acces la Grafana dezvoltatorilor vo\u0219tri, iar dezvoltatorii fac ceva de-al lor. \u0218i fiecare dintre ei o face diferit. Ar fi bine s\u0103 arate oarecum uniform, adic\u0103 s\u0103 ajungem la un standard comun.<\/p>\n<p><\/p>\n<p>S\u0103 spunem c\u0103 ave\u021bi chiar nu doar ingineri de sistem, poate ave\u021bi chiar exper\u021bi, devops sau SRE. Poate ave\u021bi exper\u021bi care \u0219tiu ce este monitorizarea, \u0219tiu ce este Grafana, adic\u0103 au lucrat cu asta de ani de zile \u0219i \u0219tiu exact cum s\u0103 fac\u0103 corect. \u0218i au scris asta de 100 de ori \u0219i le-au explicat tuturor, dar dintr-un motiv anume nimeni nu \u00eei ascult\u0103.<\/p>\n<p><\/p>\n<p>Dar ce ar fi dac\u0103 ar putea s\u0103 pun\u0103 aceste cuno\u0219tin\u021be direct \u00een Grafana, astfel \u00eenc\u00e2t al\u021bi utilizatori s\u0103 poat\u0103 reutiliza func\u021biile? \u0218i dac\u0103 ar fi necesar s\u0103 se calculeze procentul de memorie disponibil\u0103, atunci pur \u0219i simplu ar aplica func\u021bia. Dar ce-ar fi dac\u0103 creatorii exportatorilor, \u00eempreun\u0103 cu produsul lor, ar oferi de asemenea un set de func\u021bii despre cum s\u0103 lucrezi cu metricile lor, pentru c\u0103 \u0219tiu exact ce metrici sunt \u0219i cum s\u0103 le calculeze corect?<\/p>\n<p><\/p>\n<p>Acest lucru, de fapt, nu exist\u0103. Asta am f\u0103cut eu. Aceasta este suportul pentru biblioteci \u00een Grafana. S\u0103 spunem c\u0103 b\u0103ie\u021bii care au creat NodeExporter au realizat ceea ce am men\u021bionat. \u0218i au oferit, de asemenea, un set de func\u021bii. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Adic\u0103, arat\u0103 cam a\u0219a. Conecta\u021bi aceast\u0103 bibliotec\u0103 \u00een Grafana, intra\u021bi \u00een modul de editare \u0219i aici este foarte simplu explicat \u00een JSON cum s\u0103 lucra\u021bi cu aceast\u0103 metric\u0103. Adic\u0103, o anumit\u0103 set de func\u021bii, descrierea lor \u0219i cum se desf\u0103\u0219oar\u0103 acestea.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78a85dd219a421757807be895c173a39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Consider c\u0103 ar putea fi util, deoarece atunci \u00een Grafana a\u021bi scrie pur \u0219i simplu. \u0218i Grafana v\u0103 \u201einformeaz\u0103\u201d c\u0103 exist\u0103 o astfel de func\u021bie dintr-o astfel de bibliotec\u0103 \u2013 s\u0103 o utiliz\u0103m. Mi se pare c\u0103 ar fi minunat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C\u00e2teva cuvinte despre VictoriaMetrics. Facem foarte multe lucruri interesante. Cite\u0219te articolele noastre despre compresie, despre competi\u021biile noastre cu alte aplica\u021bii de date din serii temporale, explica\u021biile noastre despre cum s\u0103 lucra\u021bi cu PromQL, pentru c\u0103 sunt \u00eenc\u0103 mul\u021bi \u00eencep\u0103tori, dar \u0219i despre scalabilitate vertical\u0103 \u0219i despre confruntarea cu Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcrierea prezent\u0103rii lui Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/562829a25ee6131c7eaed8c561c6927c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00centreb\u0103ri:<\/p>\n<p><\/p>\n<p><em>Voi \u00eencepe \u00eentrebarea mea cu o poveste simpl\u0103 din via\u021b\u0103. C\u00e2nd am \u00eenceput prima dat\u0103 s\u0103 folosesc Grafana, am scris o interogare foarte conving\u0103toare de 5 r\u00e2nduri. \u00cen final, a rezultat un grafic foarte conving\u0103tor. Acest grafic aproape c\u0103 a fost lansat \u00een produc\u021bie. Dar, la o examinare mai atent\u0103, s-a dovedit c\u0103 acest grafic arat\u0103 o abera\u021bie absolut\u0103, f\u0103r\u0103 leg\u0103tur\u0103 cu realitatea, chiar dac\u0103 cifrele se \u00eencadreaz\u0103 \u00een intervalul pe care ne a\u0219teptam s\u0103-l vedem. \u0218i \u00eentrebarea mea este: avem biblioteci, avem func\u021bii, dar cum scriem testele pentru Grafana? A\u021bi scris o interogare complex\u0103, de care depinde o decizie de afaceri \u2013 s\u0103 comand\u0103m un container real de servere sau nu. \u0218i cum \u0219tim c\u0103 func\u021bia care deseneaz\u0103 graficul seam\u0103n\u0103 cu adev\u0103rul. Mul\u021bumesc.<\/em><\/p>\n<p><\/p>\n<p>Mul\u021bumesc pentru \u00eentrebare. Aici sunt dou\u0103 p\u0103r\u021bi. Prima \u2013 mi se pare, din experien\u021ba mea, c\u0103 majoritatea utilizatorilor, atunci c\u00e2nd se uit\u0103 la graficele lor, nu \u00een\u021beleg ce le arat\u0103 acestea. Dintr-un motiv anume, oamenii sunt foarte buni la a g\u0103si scuze pentru orice anomalii care apar pe grafice, chiar dac\u0103 este o eroare \u00een cadrul func\u021biei. \u0218i a doua parte \u2013 cred c\u0103 utilizarea unor astfel de func\u021bii ar fi mult mai potrivit\u0103 pentru rezolvarea problemei tale, \u00een loc ca fiecare dintre dezvoltatorii t\u0103i s\u0103 fac\u0103 planificarea capacit\u0103\u021bii \u0219i s\u0103 gre\u0219easc\u0103 cu o anumit\u0103 probabilitate.<\/p>\n<p><\/p>\n<p><em>Cum verific?<\/em><\/p>\n<p><\/p>\n<p>Cum verific? Probabil, deloc. <\/p>\n<p><\/p>\n<p><em>Sub form\u0103 de test \u00een Grafana.<\/em><\/p>\n<p><\/p>\n<p>Ce leg\u0103tur\u0103 are Grafana cu asta? Grafana transmite aceast\u0103 interogare direct la DataSource.<\/p>\n<p><\/p>\n<p><em>Ad\u0103ug\u00e2nd pu\u021bin \u00een parametrii.<\/em><\/p>\n<p><\/p>\n<p>Nu, \u00een Grafana nu se adaug\u0103 nimic. Acolo pot exista parametri GET, cum ar fi, de exemplu, step. Acesta nu este specificat explicit, dar \u00eel pute\u021bi suprascrie sau nu, \u00eens\u0103 se adaug\u0103 automat. Aici nu pute\u021bi scrie teste. Cred c\u0103 nu ar trebui s\u0103 te bazezi pe Grafana ca surs\u0103 de adev\u0103r.<\/p>\n<p><\/p>\n<p><em>Mul\u021bumesc pentru prezentare! Mul\u021bumesc pentru compresie! A\u021bi men\u021bionat despre maparea variabilelor \u00een grafic, c\u0103 nu se poate folosi o variabil\u0103 \u00eentr-o variabil\u0103 \u00een Grafana. \u00cen\u021belege\u021bi despre ce vorbesc?<\/em><\/p>\n<p><\/p>\n<p>Da.<\/p>\n<p><\/p>\n<p><em>A fost la \u00eenceput o durere de cap c\u00e2nd am vrut s\u0103 fac un alert \u00een Grafana. Acolo trebuie s\u0103 setez alert\u0103 pentru fiecare gazd\u0103 \u00een parte. Func\u021bioneaz\u0103 acel lucru pe care l-a\u021bi creat pentru alertele din Grafana?<\/em><\/p>\n<p><\/p>\n<p>Dac\u0103 Grafana nu acceseaz\u0103 variabilele \u00eentr-un mod diferit, atunci - da, va func\u021biona. Dar sfatul meu este s\u0103 nu folosi\u021bi alerting \u00een Grafana deloc, ar fi mai bine s\u0103 folosi\u021bi alertmanager.<\/p>\n<p><\/p>\n<p><em>Da, \u00eel folosesc, dar pur \u0219i simplu mi s-a p\u0103rut mai u\u0219or de configurat \u00een Grafana, dar mul\u021bumesc pentru sugestie!<\/em><\/p>\n<p>Sursa: <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.2.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\/ro\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\u201d \u2014 prezentarea lui Roman Havronenko | ProHoster","description":"V\u0103 propun s\u0103 citi\u021bi transcrierea prezent\u0103rii lui Roman Khavronenko \"ExtendedPromQL\"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/75585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=75585"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/75585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/75586"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=75585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=75585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=75585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}