«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Navrhujem oboznámiť sa s prekladom prezentácie Romana Chavronenka "ExtendedPromQL"

Prehrajte video

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Stručne o mne. Volám sa Roman. Pracujem v CloudFlare a žijem v Londýne. Som tiež údržbárom VictoriaMetrics.
A som autor ClickHouse pluginu pre Grafanu a ClickHouse-proxy – je to malý proxy pre ClickHouse.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Začneme s prvou časťou, ktorá sa volá „Zložitosti prekladu“, a v nej budem rozprávať o tom, že každý jazyk alebo dokonca len jazyk komunikácie – je to veľmi dôležité. Pretože to, ako prenášate svoje myšlienky inej osobe alebo systému, je zásadné, ako formulujete dopyt. Ľudia na internete sa hádajú, ktorý jazyk je lepší – java alebo nejaký iný. Pre seba som sa rozhodol, že treba vybrať podľa úlohy, pretože všetko to je špecifické.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Začneme od samého začiatku. Čo je to PromQL? PromQL – to je jazyk dotazov Prometheus. Takto formulujeme dopyty v Prometheuse, aby sme získali dáta o časových radoch.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Čo sú to dáta o časových radoch? Ak to vezmeme doslovne, sú to tri parametre.

Sú to:

  • Na čo sa pozeráme.
  • Kedy sa na to pozeráme.
  • A akú hodnotu to ukazuje.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Ak sa pozrieme na túto diagramu (táto diagram je z môjho telefónu, ktorý ukazuje štatistiku mojich krokov), môžeme rýchlo odpovedať na tieto otázky.

Sledujeme kroky. Vidíme hodnotu a vidíme čas, keď sa na to pozeráme. T. j. pozrúc na tento diagram, môžeme ľahko povedať, že v nedeľu som prešiel približne 15 000 krokov. To sú dáta o časových radoch.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Teraz sa pokúsme „rozbiť“ (premeniť) ich na iný model dát vo forme tabuľky. Tu máme tiež to, na čo sa pozeráme. Trochu som pridal ďalšie údaje, ktoré budeme nazývať meta-dátami, t. j. to neprešiel som ja, ale dvaja ľudia, povedzme, Jay a Silent Bob. Toto je to, na čo sa pozeráme; čo to ukazuje a kedy ukazuje túto hodnotu.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka
Teraz sa pokúsme uložiť všetky tieto dáta do databázy. Na príklad som vzal syntaktiku ClickHouse. A tu vytvárame jednu tabuľku, ktorá sa volá „Steps“, t. j. na čo sa pozeráme. Tu je čas, keď sa na to pozeráme; čo to ukazuje a nejaké meta-dáta, kde budeme ukladať, kto to je: Jay a Silent Bob.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A aby sme sa pokúsili vizualizovať toto všetko, budeme používať Grafanu, pretože, po prvé, je to krásne.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Takisto budeme používať tento plugin. Existujú dva dôvody. Prvý je ten, že som ho napísal. A presne viem, ako ťažké je získať časové údaje z ClickHouse, aby sme ich mohli zobraziť v Grafane.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Zobrazíme to v Graf Panel. Je to najpopulárnejšia panel v Grafane, ktorý zobrazuje závislosť hodnoty od času, takže potrebujeme iba dva parametre.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka
Napíšme najjednoduchší dotaz — ako zobraziť štatistiku krokov v Grafane, pričom tieto údaje sú uložené v ClickHouse, v tej tabuľke, ktorú sme vytvorili. A píšeme takýto jednoduchý dotaz. Vyberáme zo krokov. Vyberáme hodnotu a vyberáme čas týchto hodnôt, teda tie tri parametre, o ktorých sme hovorili.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A výsledkom bude takýto graf. Kto vie, prečo je taký zvláštny?

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Správne, treba to zoradiť podľa času.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A nakoniec dostaneme už lepší, ale stále zvláštny graf. Kto vie, prečo? Správne, sú tam dvaja účastníci, a v Grafane posielame dva časové rady, pretože ak sa pozrieme na dátový model ešte raz, každá časová rada je unikátna kombinácia mena a všetkých kľúč-hodnotových labelov.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

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

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A znova kreslíme. Teraz už graf vyzerá pravdivejšie. Teraz je to normálny graf a všetko funguje dobre.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A pravdepodobne viete, ako to urobiť podobne, ale v Prometheovi cez PromQL. Približne takto. O niečo jednoduchšie. A ešte to všetko rozdelíme. Brali sme Krokov. A filtrujeme podľa Jaya. Tu neuvádzame, čo potrebujeme získať a nevyberáme čas.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A teraz sa pokúsime vypočítať rýchlosť pohybu Jaya alebo Silent Boba. V ClickHouse nám bude treba urobiť runningDifference, teda vypočítať rozdiel medzi pármi bodov a rozdeliť ich časom, aby sme získali presnú rýchlosť. Dotaz bude vyzerať asi takto.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A ukáže približne takéto hodnoty, teda Silent Bob alebo Jay robí asi 1,8 kroku za sekundu.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A v Prometheovi viete, ako to urobiť tiež. Oveľa jednoduchšie, než to bolo predtým.

«ExtendedPromQL» — preklad prezentácie Romana ChavronenkaAby to bolo v Grafana tak jednoduché, pridal som takýto obal, ktorý sa veľmi podobá na PromQL. Nazýva sa to Rate Macros, alebo ako chcete. V Grafana jednoducho napíšete „rate“, ale niekde v hĺbke sa to transformuje na taký veľký dotaz. A nemusíte sa na to ani pozerať, je tam niekde, ale ušetríte množstvo času, pretože písanie takých obrovských SQL dotazov je vždy nákladné. Ľahko sa môžete pomýliť a potom dlho nechápete, čo sa deje.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A toto je dotaz, ktorý sa ani nezmestil do jedného snímku a musel som ho rozdeliť na dve stĺpce. Toto je tiež dotaz v ClickHouse, ktorý robí to isté rate, ale pre obe časové rady: aj pre Silent Boba, aj pre Jaya, aby sme mali na paneli dve časové rady. A to už je podľa mňa veľmi zložité.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A v Prometheovi to bude sum(rate). Pre ClickHouse som vytvoril samostatný makro, ktorý sa volá RateColumns, ktorý vyzerá ako dotaz v Prometheovi.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Pozreli sme sa na to a zdá sa, že PromQL je všetko také skvelé, ale má samozrejme aj obmedzenia.

Sú to:

  • Obmedzený SELECT.
  • Obmedzené JOIN.
  • Žiadna podpora pre HAVING.

A ak ste s ním pracovali dlho, viete, že niekedy je veľmi ťažké urobiť niečo v PromQL, zatiaľ čo v SQL môžete robiť takmer všetko, pretože všetky tieto varianty, o ktorých sme teraz hovorili, by mohli byť vykonané v SQL. Ale bolo by pohodlné to používať? A to ma privádza k myšlienke, že nie vždy je najvýkonnejší jazyk najpohodlnejší.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Preto niekedy treba vybrať jazyk podľa úloh. Je to ako súboj Batmana so Supermanom. Je jasné, že Superman je silnejší, ale Batman ho dokázal poraziť, pretože bol praktickejší a presne vedel, čo robí.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A nasledujúca časť – to je Rozšírenie PromQL.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Ešte raz o VictoriaMetrics. Čo je to VictoriaMetrics? Je to databáza časových radov, je open source, distribujeme ju v single a cluster verziách. Podľa našich benchmarkov je najrýchlejšia na trhu a v oblasti kompresie podobne, t. j. živí ľudia hlásia kompresiu okolo 0,4 bajtov na bod, zatiaľ čo u Prometheusa je to 1,2-1,4.

Nepodporujeme len Prometheus. Podporujeme aj InfluxDB, Graphite, OpenTSDB.

Môžete do nás "písať", t. j. môžete prenášať staré dáta.

A ešte ideálne fungujeme s Prometheusom a Grafanou, t. j. podporujeme PromQL engine. A v Grafane môžete jednoducho zmeniť Prometheus endpoint na VictoriaMetrics a všetky vaše dashboardy budú fungovať ako predtým.

Môžete však využiť aj ďalšie funkcie, ktoré ponúka VictoriaMetrics.

Rýchlo prejdeme funkciami, ktoré sme pridali.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Omit interval param – môžete preskočiť interval parametrov v Grafane. Keď nechcete dostávať zvláštne grafy pri priblížení alebo oddialení na paneli, je odporúčané použiť premennú $__interval. Je to vnútorná premenná Grafany a sama vyberá rozsah dát. VictoriaMetrics dokáže tiež pochopiť, aký tento rozsah by mal byť. Nemusíte aktualizovať všetky vaše dotazy. Bude to oveľa jednoduchšie.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Druhá funkcia – to je intervalové odkazovanie. Tento interval môžete použiť vo svojich výrazoch. Môžete ho násobiť, deliť, prenášať, odkazovať na neho.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Ďalej je tu rodina funkcií rollup. Funkcia rollup transformuje akýkoľvek váš časový rad na tri samostatné časové rady. To sú min, max a avg. Považujem to za veľmi užitočné, pretože to môže občas ukázať nejaké odľahlé hodnoty (anomálie) a nepresnosti.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A ak jednoducho robíte irate alebo rate, pravdepodobne môžete vynechať niektoré prípady, keď sa časový rad správa inak, než ste predpokladali. S touto funkciou je oveľa jednoduchšie vidieť, že max je veľmi silno od avg.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Ďalej premenná default. Default znamená, akú hodnotu potrebujeme zobraziť v Grafane, ak momentálne nemáme časový rad. Kedy sa to stane? Povedzme, že exportujete nejakú metriku chýb. A máte také skvelé aplikácie, že keď ste začali, nemáte chyby a dokonca žiadne chyby nemáte nasledujúce tri hodiny alebo aj deň. A máte dashboardy, ktoré ukazujú vzťah medzi úspechom a chybou. A budú vám zobrazovať nič, pretože nemáte metriku chýb. A v default môžete uviesť čokoľvek.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Keep_last_Value – uchováva poslednú hodnotu metriky, ak zmizla. Ak Prometheus po nasledujúcom skenovaní nenašiel metriku v priebehu 5 minút, tu zapamätáme jej poslednú hodnotu a vaše grafy sa opäť nerozpadnú.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Scrape_interval – ukazuje, ako často Prometheus zbiera dáta o vašej metrike, s akou frekvenciou. Tu môžete vidieť vynechanie, napríklad.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka
Label replace – populárna funkcia. Ale považujeme ju za trochu zložitú, pretože vyžaduje množstvo argumentov. A musíte si nielen pamätať 5 argumentov, ale aj ich poradie.
«ExtendedPromQL» — preklad prezentácie Romana Chavronenka
Preto, prečo ich neurobiť jednoduchšie? T. j. rozdeliť na malé funkcie s jasnou syntaxou.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A teraz prichádza to zaujímavé. Prečo považujeme toto za rozšírený PromQL? Pretože podporujeme spoločné tabuľkové výrazy. Môžete prejsť na QR kód (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL), pozrieť si odkazy s príkladmi, s playgroundom, kde môžete vykonávať dotazy priamo vo VictoriaMetrics bez jej inštalácie, jednoducho v prehliadači.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A čo to vlastne je? Tento dotaz vyššie – to je pomerne populárny dotaz. Myslím, že v akomkoľvek dashboarde v mnohých firmách používate rovnaký filter pre všetko. Zvyčajne je to tak. Ale keď potrebujete pridať nejaký nový filter, musíte aktualizovať každý panel, alebo stiahnuť dashboard, otvoriť ho v JSON, robiť find replace, čo tiež trvá čas. Prečo by sme nemohli uložiť túto hodnotu do premennej a znovu ju použiť? To vyzerá podľa mňa oveľa jednoduchšie a zrozumiteľnejšie.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

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

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Riešim tento problém takto: vytvorím commonFilter a v ňom definujem tento filter, a potom ho znovu používam v dotazoch. Ale ak to teraz urobíte rovnako, nebude to fungovať, pretože Grafana vám nedovolí používať premenné vo vnútri dotazov premiérnych. A to je trochu zvláštne.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A preto som vytvoril takú variantu, ktorá to umožňuje. A ak vás to zaujíma alebo chcete takú funkciu, podporte ju alebo dajte dislike, ak sa vám táto myšlienka nepáči. https://github.com/grafana/grafana/pull/16694

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Ďalej o rozšírenom PromQL. Tu definujeme nielen premennú, ale priamo celú funkciu. A nazývame ju ru (resource usage). A táto funkcia prijíma voľné zdroje, obmedzenie zdrojov a filter. Zdá sa, že syntax je celkom jednoduchá. A je veľmi ľahké použiť túto funkciu a vypočítať percento voľnej pamäte u nás. T. j. koľko máme pamäte, aké obmedzenie a ako filtrovať. To vyzerá oveľa pohodlnejšie, ak by ste to všetko písali, znovu používajúc rovnaké filtre, pretože by sa to premenilo na veľký-veľký dotaz.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

A tu je príklad takého veľkého dopytu. Pochádza z oficiálneho panelu NodeExporter pre Grafana. Ale príliš dobre nerozumiem, čo sa tu deje. T. j., samozrejme, rozumiem, ak sa na to pozriete pozornejšie, ale množstvo zátvoriek môže okamžite znížiť motiváciu snažiť sa pochopiť, čo sa tu deje. A prečo to neuľahčiť a nezjednodušiť?

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Napríklad takto, pričom sa dôležité veci alebo časti zvýraznia v premenných. A potom sa vykoná základná matematika. Toto už viac pripomína programovanie, to je to, čo by som chcel vidieť v budúcnosti v Grafane.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Tu je druhý príklad, ako to môžeme urobiť ešte jednoduchšie, keby sme už mali túto funkciu ru, a ona už existuje priamo vo VictoriaMetrics. A potom jednoducho predáte cacheovanú hodnotu, ktorú ste vyhlásili v CTE.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Už som hovoril o tom, ako je dôležité používať správny programovací jazyk. A asi v každej spoločnosti sa v Grafane deje niečo vlastné. A určite dávate prístup k Grafane svojim vývojárom, ktorí robia niečo vlastné. A všetci to robia nejako inak. Rád by som to videl aspoň nejako jednotne, t. j. zúžiť to na spoločný štandard.

Predpokladajme, že máte nielen systémových inžinierov, možno máte aj expertov, devops alebo SRE. Môže byť, že máte expertov, ktorí vedia, čo je monitoring, vedia, čo je Grafana, t. j. pracujú s tým roky a presne vedia, ako to robiť správne. A už to písali 100-krát a všetkým to vysvetlili, ale prečo si ich nikto nevšíma.

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

Toto vlastne neexistuje. To som urobil sám. Je to podpora knižníc v Grafane. Predpokladajme, že chlapci, ktorí vytvorili NodeExporter, urobili to, o čom hovorím. A tiež poskytli súbor funkcií.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

T. j. vyzerá to asi takto. Pripojíte túto knižnicu do Grafany, prejdete do editácie a tu je veľmi jednoducho napísané v JSON, ako pracovať s touto metríkou. T. j. nejaký súbor funkcií, ich opísanie a do čoho sa rozvinú.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Myslím, že by to mohlo byť užitočné, pretože potom by ste v Grafane písali jednoducho tak. A Grafana "hovorí", že existuje takáto funkcia z tejto knižnice – poďme ju použiť. Mám pocit, že by to bolo veľmi skvelé.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Trochu o VictoriaMetrics. Robíme veľa zaujímavých vecí. Prečítajte si naše články o kompresii, naše súťaže s inými aplikáciami na časové rady, naše vysvetlenie, ako pracovať s PromQL, pretože v tom je ešte veľa nováčikov, a takisto o vertikálnej škálovateľnosti a o konfrontácii so Thanosom.

«ExtendedPromQL» — preklad prezentácie Romana Chavronenka

Otázky:

Začnem svoju otázku jednoduchým príbehom zo života. Keď som prvýkrát začal používať Grafanu, napísal som veľmi presvedčivý dotaz s dĺžkou 5 riadkov. Nakoniec som dostal veľmi presvedčivý graf. Tento graf takmer šiel do produkcie. Ale pri bližšom skúmaní sa ukázalo, že tento graf ukazuje absolútnu nezmysel, ktorá nemá nič spoločné s realitou, hoci čísla sa nachádzajú v rozsahu, ktorý sme očakávali vidieť. A moja otázka. Máme knižnice, máme funkcie, ale ako píšeme testy pre Grafanu? Napísali ste zložitý dotaz, od ktorého závisí obchodné rozhodnutie – objednať skutočný kontajner serverov alebo nie. A ako vieme, že tá funkcia, ktorá kreslí graf, vyzerá pravdivo. Ďakujem.

Ďakujem za otázku. Tu sú dve časti. Prvá – mám pocit, vychádzajúc z mojej praxe, že väčšina používateľov, keď sa pozerá na svoje grafy, nechápe, čo im ukazujú. Nejakým spôsobom sú ľudia veľmi dobrí v tom, aby si vymysleli ospravedlnenie akejkoľvek anomálie, ktorá sa objavuje na grafoch, aj keď je to chyba vnútri funkcie. A druhá časť – mám pocit, že použitie takýchto funkcií by oveľa lepšie vyhovovalo riešeniu vašej problémy, namiesto toho, aby každý z vašich vývojárov robil svoj capacity planning a robil chyby s nejakou pravdepodobnosťou.

Ako skontrolovať?

Ako skontrolovať? Snáď nijako.

V podobe testu v Grafane.

Čo má Grafana spoločné? Grafana prevádza tento dotaz priamo do DataSource.

Pridaním trochu do parametrov.

Nie, v Grafana sa nič nepridáva. Môžu tam byť GET parametre, ako napríklad step. Nie je to jasne uvedené, ale môžete ho predefinovať, alebo nemusíte, ale pridáva sa automaticky. Tu nemôžete napísať testy. Myslím si, že by ste sa na Grafana nemali spoliehať ako na zdroj pravdy.

Ďakujem za prezentáciu! Ďakujem za kompresiu! Spomínali ste mapovanie premennej v grafe, že v Grafana nemožno použiť premennú v premennej. Rozumiete, o čom hovorím?

Áno.

To bola spočiatku veľká bolest' hlavy, keď som chcel vytvoriť alert v Grafana. A tam treba robiť alert pre každého hostiteľa zvlášť. Funguje tento nástroj, ktorý ste vytvorili, pre alerty v Grafana?

Ak Grafana neoslovuje premenné nejakým iným spôsobom, tak – áno, bude to fungovať. Ale moja rada je, aby ste alertovanie v Grafana nepoužívali vôbec, je lepšie použiť alertmanager.

Áno, používam ho, ale len sa mi to v Grafana zdalo jednoduchšie na nastavenie, ale ďakujem za radu!

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster