“ExtendedPromQL” - prepis správy od Romana Khavronenka

Navrhujem, aby ste si prečítali prepis správy Romana Khavronenka „ExtendedPromQL“

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Stručne o mne. Volám sa Roman. Pracujem v CloudFlare a žijem v Londýne. Ale som tiež správcom VictoriaMetrics.
A autorom som ja ClickHouse plugin pre Grafana a ClickHouse-proxy je malý proxy server pre ClickHouse.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Začneme prvou časťou, ktorá sa volá “Ťažkosti prekladu” a v nej budem hovoriť o tom, že veľmi dôležitý je akýkoľvek jazyk alebo aj len jazyk komunikácie. Pretože takto prenášate svoje myšlienky na inú osobu alebo systém, ako formulujete požiadavku. Ľudia na internete sa hádajú, ktorý jazyk je lepší - java alebo nejaký iný. Pre seba som sa rozhodol, že si musím vybrať podľa úlohy, pretože toto všetko je špecifické.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Začnime od úplného začiatku. Čo je PromQL? PromQL je dopytovací jazyk Prometheus. Takto vytvárame dopyty v Prometheus, aby sme získali údaje o časových radoch.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Čo sú údaje časových radov? Doslova ide o tri parametre.

Sú to:

  • Na čo sa pozeráme?
  • Keď sa na to pozrieme.
  • A akú hodnotu to ukazuje?

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Ak sa pozriete na tento graf (tento graf je z môjho telefónu, ktorý zobrazuje moje štatistiky krokov), môže rýchlo odpovedať na tieto otázky.

Pozeráme sa na kroky. Vidíme zmysel a vidíme čas, keď sa na to pozeráme. To znamená, že pri pohľade na tento diagram môžete ľahko povedať, že v nedeľu som prešiel asi 15 000 krokov. Ide o údaje z časových radov.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Teraz ich „rozdeľme“ (prekonvertujme) do iného dátového modelu vo forme tabuľky. Aj tu máme to, na čo sa pozeráme. Tu som pridal malé dodatočné údaje, ktoré budeme nazývať metadáta, t. j. neprešiel som tým ja, ale dvaja ľudia, napríklad Jay a Tichý Bob. Toto je to, na čo sa pozeráme; čo ukazuje a kedy ukazuje tú hodnotu.

“ExtendedPromQL” - prepis správy od Romana Khavronenka
Teraz sa pokúsime uložiť všetky tieto údaje do databázy. Napríklad som vzal syntax ClickHouse. A tu vytvoríme jednu tabuľku s názvom „Kroky“, teda to, na čo sa pozeráme. Je čas, keď sa na to pozeráme; čo zobrazuje a niektoré metaúdaje, kde budeme ukladať, kto to je: Jay a Tichý Bob.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A aby sme sa pokúsili toto všetko vizualizovať, použijeme Grafana, pretože je v prvom rade krásna.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Tento plugin použijeme aj my. Sú na to dva dôvody. Prvý je preto, že som to napísal. A presne viem, aké ťažké je získať údaje časových radov z ClickHouse, aby ste ich mohli zobraziť v Grafane.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Zobrazíme ho na paneli grafov. Toto je najobľúbenejší panel v Grafane, ktorý zobrazuje závislosť hodnoty od času, takže potrebujeme iba dva parametre.

“ExtendedPromQL” - prepis správy od Romana Khavronenka
Napíšeme najjednoduchší dotaz – ako zobraziť štatistiku krokov v Grafane, pričom tieto údaje sú uložené v ClickHouse, v tabuľke, ktorú sme vytvorili. A my píšeme túto jednoduchú požiadavku. Vyberáme z krokov. Vyberieme hodnotu a vyberieme čas týchto hodnôt, teda tie isté tri parametre, o ktorých sme hovorili.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A ako výsledok dostaneme takýto graf. Ktovie, prečo je taký zvláštny?

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Presne tak, musíme triediť podľa času.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A nakoniec dostaneme lepší, no stále zvláštny rozvrh. ktovie prečo? Je to tak, sú dvaja účastníci a my v Grafane rozdávame dva časové rady, pretože ak sa znova pozriete na dátový model, potom každý časový rad je jedinečnou kombináciou názvu a všetkých označení kľúč-hodnota.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Preto si musíme vybrať konkrétneho človeka. Vyberáme Jaya.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A poďme znova kresliť. Teraz graf vyzerá ako pravda. Teraz je to normálny rozvrh a všetko funguje dobre.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A asi viete, ako urobiť zhruba to isté, ale v Prometheus cez PromQL. Niečo také. Trochu jednoduchšie. A poďme si to celé rozobrať. Urobili sme Kroky. A filtrovať podľa Jaya. Nešpecifikujeme tu, že potrebujeme získať hodnotu a nevyberáme si čas.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Teraz skúsme vypočítať rýchlosť pohybu Jaya alebo Tichého Boba. V ClickHouse budeme musieť urobiť runningDifference, t.j. vypočítať rozdiel medzi pármi bodov a vydeliť ich časom, aby sme získali presnú rýchlosť. Žiadosť bude vyzerať asi takto.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A ukáže približne tieto hodnoty, t.j. Tichý Bob alebo Jay trvá približne 1,8 kroku za sekundu.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A v Prometheus to tiež viete. Oveľa jednoduchšie ako predtým.

“ExtendedPromQL” - prepis správy od Romana KhavronenkaA aby to bolo jednoduché aj v Grafane, pridal som tento obal, ktorý vyzerá veľmi podobne ako PromQL. Volá sa to makrá na hodnotenie alebo ako to nazvať. V Grafane jednoducho napíšete „sadzba“, ale niekde hlboko sa to pretaví do tejto veľkej požiadavky. A nemusíte sa na to ani pozerať, niekde to je, ale ušetríte veľa času, pretože písanie takýchto obrovských SQL dopytov je vždy drahé. Ľahko sa môžete pomýliť a potom dlho nebudete rozumieť tomu, čo sa deje.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A to je požiadavka, ktorá sa nezmestila ani do jednej snímky a dokonca som ju musel rozdeliť do dvoch stĺpcov. Toto je požiadavka aj v ClickHouse, ktorý robí rovnakú sadzbu, ale pre oba časové rady: Silent Bob a Jay, takže na paneli máme dva časové rady. A to je už podľa mňa veľmi ťažké.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A podľa Promethea to bude súčet (sadzba). Pre ClickHouse som vytvoril samostatné makro s názvom RateColumns, ktoré vyzerá ako dotaz v Prometheus.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Pozreli sme sa na to a zdá sa, že PromQL je taký skvelý, ale má, samozrejme, obmedzenia.

Sú to:

  • Obmedzený SELECT.
  • Hraničné JOINY.
  • Bez podpory.

A ak s tým pracujete dlho, viete, že niekedy je veľmi ťažké niečo urobiť v PromQL, ale v SQL sa dá robiť takmer všetko, pretože všetky tieto možnosti, o ktorých sme práve hovorili, sa dajú urobiť v SQL . Ale bolo by vhodné ho použiť? A to ma núti myslieť si, že najsilnejší jazyk nemusí byť vždy ten najpohodlnejší.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Preto si niekedy musíte zvoliť jazyk úlohy. Je to ako keď Batman bojuje so Supermanom. Je jasné, že Superman je silnejší, no Batman ho dokázal poraziť, pretože je praktickejší a presne vedel, čo robí.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A ďalšia časť je Extending PromQL.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Ešte raz o VictoriaMetrics. Čo je VictoriaMetrics? Ide o databázu časových radov, je v OpenSource, distribuujeme jej single a cluster verzie. Podľa našich benchmarkov je rýchlejší ako čokoľvek, čo je teraz na trhu, a kompresia je podobná, t.j. skutoční ľudia uvádzajú kompresiu približne 0,4 bajtu na bod, zatiaľ čo Prometheus je 1,2-1,4.

Podporujeme viac ako len Prometheus. Podporujeme InfluxDB, Graphite, OpenTSDB.

Môžete nám „napísať“, to znamená, že môžete preniesť staré dáta.

A perfektne spolupracujeme aj s Prometheus a Grafana, t.j. podporujeme PromQL engine. A v Grafane môžete jednoducho zmeniť koncový bod Prometheus na VictoriaMetrics a všetky vaše ovládacie panely budú fungovať tak, ako fungovali.

Môžete však použiť aj ďalšie funkcie, ktoré poskytuje VictoriaMetrics.

Rýchlo si prejdeme funkcie, ktoré sme pridali.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Vynechať parametre intervalu – v Grafane môžete vynechať parametre intervalu. Ak nechcete, aby sa pri približovaní/odďaľovaní v paneli zobrazovali divné grafy, odporúča sa použiť premennú $__interval. Ide o internú zmenu Grafany a rozsah údajov si vyberá sám. A samotná VictoriaMetrics dokáže pochopiť, aký by mal byť tento rozsah. A nemusíte aktualizovať všetky svoje požiadavky. Bude to oveľa jednoduchšie.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Druhou funkciou je intervalové odkazovanie. Tento interval môžete použiť vo svojich výrazoch. Môžete ho násobiť, deliť, prenášať, odkazovať.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Ďalej je to rodina funkcií súhrnu. Funkcia Rollup transformuje ktorýkoľvek z vašich časových radov na tri samostatné časové rady. Toto sú min, max a priem. Považujem to za veľmi výhodné, pretože niekedy to môže ukázať nejaké odľahlé hodnoty a nepresnosti.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A ak sa len rozčuľujete alebo hodnotíte, potom vám pravdepodobne ujdú prípady, keď sa časové rady nesprávajú tak, ako ste očakávali. S touto funkciou je to oveľa lepšie vidieť, povedzme, že max je veľmi veľa z avg.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Ďalej je predvolená premenná. Predvolené – to znamená, akú hodnotu musíme v Grafane vykresliť, ak práve nemáme časový rad. Kedy sa to stane? Povedzme, že exportujete nejaké chybové metriky. A máte takú skvelú aplikáciu, že keď spustíte, nemáte žiadne chyby a dokonca žiadne chyby ďalšie tri hodiny alebo dokonca deň. A máte informačné panely, ktoré zobrazujú vzťah od úspechu k chybe. A neukážu vám nič, pretože nemáte metriku chýb. A v predvolenom nastavení môžete zadať čokoľvek.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Keep_last_Value – uloží poslednú hodnotu metriky, ak chýba. Ak ho Prometheus nenájde do 5 minút po ďalšom zoškrabaní, tak si tu zapamätáme jeho poslednú hodnotu a vaše grafy sa už nezlomia.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Scrape_interval – ukazuje, ako často Prometheus zhromažďuje údaje o vašej metrike a s akou frekvenciou. Tu môžete vidieť priesmyk napr.

“ExtendedPromQL” - prepis správy od Romana Khavronenka
Nahradenie štítkov je obľúbená funkcia. Ale myslíme si, že je to trochu komplikované, pretože si to vyžaduje celé argumenty. A musíte si pamätať nielen 5 argumentov, ale aj ich postupnosť.
“ExtendedPromQL” - prepis správy od Romana Khavronenka
Prečo ich teda nezjednodušiť? To znamená, rozložiť ho na malé funkcie so zrozumiteľnou syntaxou.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A teraz tá zábavná časť. Prečo si myslíme, že ide o rozšírený PromQL? Pretože podporujeme bežné tabuľkové výrazy. Môžete sledovať QR kód (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL), pozrite si odkazy s príkladmi z ihriska, kde môžete spúšťať dopyty priamo vo VictoriaMetrics bez toho, aby ste ho jednoducho nainštalovali do prehliadača.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

a čo je toto? Táto vyššie uvedená požiadavka je pomerne populárna. Myslím, že na akomkoľvek dashboarde v mnohých spoločnostiach používate rovnaký filter na všetko. Zvyčajne áno. Ale keď potrebujete pridať nejaký nový filter, musíte aktualizovať každý panel alebo stiahnuť dashboard, otvoriť ho v JSON, nájsť náhradu, čo si tiež vyžaduje čas. Prečo neuložiť túto hodnotu do premennej a znova ju použiť? Toto vyzerá podľa mňa oveľa jednoduchšie a prehľadnejšie.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Napríklad, keď potrebujem aktualizovať filtre v Grafane vo všetkých požiadavkách a dashboard môže byť obrovský alebo ich môže byť dokonca niekoľko. A ako by som chcel tento problém vyriešiť v Grafane?

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Tento problém riešim takto: vytvorím spoločný filter a definujem v ňom tento filter a potom ho znova použijem v dotazoch. Ale ak to isté urobíte teraz, nebude to fungovať, pretože Grafana vám neumožňuje používať premenné vo vnútri premenných dotazu. A je to trochu zvláštne.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A tak som vytvoril možnosť, ktorá vám to umožňuje. A ak máte záujem alebo chcete takúto funkciu, podporte ju alebo sa jej nepáči, ak sa vám táto myšlienka nepáči. https://github.com/grafana/grafana/pull/16694

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Viac o PromQL rozšírené. Tu definujeme nielen premennú, ale celú funkciu. A nazývame to ru (využitie zdrojov). A táto funkcia akceptuje voľné zdroje, obmedzenie zdrojov a filter. Syntax sa zdá byť jednoduchá. A je veľmi jednoduché použiť túto funkciu a vypočítať percento voľnej pamäte, ktorú máme. Teda koľko máme pamäte, aké je obmedzenie a ako filtrovať. Vyzerá to oveľa pohodlnejšie, ak by ste to všetko napísali a znova použili rovnaké filtre, pretože by sa to zmenilo na veľký, veľký dopyt.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

A tu je príklad takejto veľkej, veľkej požiadavky. Je to z oficiálneho hlavného panela NodeExporter pre Grafana. Ale sotva rozumiem tomu, čo sa tu deje. To je, samozrejme, chápem, ak sa pozriete pozorne, ale počet zátvoriek môže okamžite znížiť motiváciu pochopiť, čo sa tu deje. A prečo to neurobiť jednoduchšie a prehľadnejšie?

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Napríklad, ako je toto, oddelenie významných vecí alebo častí do premenných. A potom urobte základnú matematiku. Toto je už skôr programovanie, toto by som chcel v budúcnosti vidieť v Grafane.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Tu je druhý príklad toho, ako by sme to mohli ešte zjednodušiť, keby sme túto funkciu ru už mali a už existuje priamo vo VictoriaMetrics. A potom jednoducho odošlete hodnotu uloženú vo vyrovnávacej pamäti, ktorú ste deklarovali v CTE.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Už som hovoril o tom, aké dôležité je používať správny programovací jazyk. A pravdepodobne každá spoločnosť v Grafane má niečo iné. A pravdepodobne tiež poskytujete prístup ku Grafane svojim vývojárom a vývojári si robia svoje. A každý to robí nejako inak. Ale chcel som, aby to bolo nejako rovnaké, teda zredukovať to na bežný štandard.

Povedzme, že nemáte iba systémových inžinierov, možno máte dokonca odborníkov, devops alebo SRE. Možno máte odborníkov, ktorí vedia, čo je monitoring, ktorí vedia, čo je Grafana, teda pracujú s ňou roky a presne vedia, ako na to. A už to písali 100x a každému to vysvetlili, ale z nejakého dôvodu to nikto nepočúva.

Čo keby mohli vložiť tieto znalosti priamo do Grafany, aby ostatní používatelia mohli znova použiť funkcie? A ak by potrebovali vypočítať percento voľnej pamäte, jednoducho by použili funkciu. Čo keby tvorcovia exportérov spolu s ich produktom poskytli aj sadu funkcií, ako s ich metrikami pracovať, pretože presne vedia, čo tieto metriky sú a ako ich správne vypočítať?

Toto naozaj neexistuje. Toto som robil ja sám. Toto je podpora knižnice v Grafane. Povedzme, že chlapci, ktorí vytvorili NodeExporter, urobili to, o čom som hovoril. A poskytovali aj súbor funkcií.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

To znamená, že to vyzerá asi takto. Túto knižnicu pripojíte k Grafane, pustíte sa do úprav a v JSON je veľmi jednoducho napísané, ako s touto metrikou pracovať. Teda nejaký súbor funkcií, ich popis a na čo sa premenia.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Myslím, že by sa to mohlo hodiť, lebo potom v Grafane by ste písali len tak. A Grafana vám „hovorí“, že existuje taká a taká funkcia z takej a takej knižnice - poďme ju použiť. Myslím, že by to bolo veľmi cool.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Trochu o VictoriaMetrics. Robíme veľa zaujímavých vecí. Prečítajte si naše články o kompresii, o našich súťažiach s inými aplikáciami časových radov, naše vysvetlenie ako pracovať s PromQL, pretože v tomto je ešte veľa začiatočníkov, ako aj o vertikálnej škálovateľnosti a o konfrontácii s Thanosom.

“ExtendedPromQL” - prepis správy od Romana Khavronenka

Otázky:

Svoju otázku začnem jednoduchým životným príbehom. Keď som prvýkrát začal používať Grafana, napísal som veľmi pútavý dotaz, ktorý mal 5 riadkov. Konečným výsledkom je veľmi presvedčivý graf. Tento plán sa takmer dostal do výroby. Ale pri bližšom skúmaní sa ukázalo, že tento graf ukazuje absolútny nezmysel, ktorý nemá nič spoločné s realitou, hoci čísla spadajú do rozsahu, ktorý sme očakávali. A moja otázka. Máme knižnice, máme funkcie, ale ako napíšeme testy pre Grafana? Napísali ste komplexnú požiadavku, od ktorej závisí obchodné rozhodnutie - objednať skutočný kontajner serverov alebo neobjednať. A ako vieme, táto funkcia, ktorá kreslí graf, je podobná pravde. Ďakujem.

dakujem za otazku. Sú dve časti. Po prvé, na základe svojich skúseností mám dojem, že väčšina používateľov, keď sa pozrie na svoje grafy, nerozumie tomu, čo im ukazuje. Z nejakého dôvodu sú ľudia veľmi dobrí vo vymýšľaní ospravedlnenia pre akúkoľvek anomáliu, ktorá sa vyskytuje v grafoch, aj keď ide o chybu v rámci funkcie. A druhá časť – zdá sa mi, že používanie takýchto funkcií by bolo oveľa lepším prístupom k riešeniu vášho problému, namiesto toho, aby si každý z vašich vývojárov robil vlastné kapacitné plánovanie a s určitou pravdepodobnosťou robil chyby.

Ako skontrolovať?

Ako skontrolovať? Pravdepodobne nie.

Ako test v Grafane.

Čo s tým má spoločné Grafana? Grafana preloží túto požiadavku priamo do DataSource.

Trochu pridávame k parametrom.

Nie, do Grafany sa nič nepridáva. Môžu existovať parametre GET, ako napríklad krok. Nie je explicitne špecifikovaný, ale môžete ho prepísať, alebo ho nemôžete prepísať, ale pridá sa automaticky. Tu nebudeš písať testy. Nemyslím si, že by sme sa tu mali spoliehať na Grafanu ako na zdroj pravdy.

Ďakujeme za správu! Ďakujem za kompresiu! Spomínali ste mapovanie premennej v grafe, že v Grafane nemôžete použiť premennú v premennej. Viete, čo mám na mysli?

Áno.

Keď som chcel vytvoriť upozornenie v Grafane, spočiatku to bolelo hlavu. A tam treba spraviť upozornenie pre každého hostiteľa zvlášť. Táto vec, ktorú ste vytvorili, funguje pre upozornenia v Grafane?

Ak Grafana nepristupuje k premenným inak, tak áno, bude to fungovať. Ale moja rada je, aby ste upozornenia v Grafane vôbec nepoužívali, radšej použite alertmanager.

Áno, používam to, ale zdalo sa mi to jednoduchšie nastaviť v Grafane, ale ďakujem za radu!

Zdroj: hab.com

Pridať komentár