„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Siūlau perskaityti Romano Khavronenko pranešimo „ExtendedPromQL“ stenogramą

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Trumpai apie mane. Mano vardas Romanas. Aš dirbu CloudFlare ir gyvenu Londone. Bet aš taip pat esu „VictoriaMetrics“ prižiūrėtojas.
Ir aš esu autorius ClickHouse įskiepis už Grafana ir ClickHouse-proxy yra mažas ClickHouse tarpinis serveris.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Pradėsime nuo pirmosios dalies, kuri vadinasi „Vertimo sunkumai“ ir joje kalbėsiu apie tai, kad bet kokia kalba ar net tik bendravimo kalba yra labai svarbi. Nes taip savo mintis perteiki kitam žmogui ar sistemai, kaip suformuluoji prašymą. Internete žmonės ginčijasi, kuri kalba geresnė – java ar kokia kita. Dėl savęs nusprendžiau, kad reikia pasirinkti užduotį, nes visa tai yra specifinė.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Pradėkime nuo pat pradžių. Kas yra PromQL? PromQL yra Prometheus užklausų kalba. Taip Prometheus formuojame užklausas, kad gautume laiko eilučių duomenis, laiko eilutes.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Kas yra laiko eilučių duomenys? Žodžiu, tai yra trys parametrai.

Jie yra:

  • Ką mes žiūrime.
  • Kai žiūrime į tai.
  • Ir kokią vertę tai parodo.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Jei pažvelgsite į šią diagramą (ši diagrama yra iš mano telefono, kurioje rodoma mano žingsnių statistika), tada čia galite greitai atsakyti į šiuos klausimus.

Mes žiūrime į žingsnius. Mes matome prasmę ir matome laiką, kai žiūrime į jį. Tai yra, pažvelgus į šią diagramą, galite lengvai pasakyti, kad sekmadienį nuėjau apie 15 000 žingsnių. Tai laiko eilučių duomenys.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Dabar juos „sulaužykime“ (paverskime) į kitą duomenų modelį lentelės pavidalu. Čia taip pat turime tai, į ką žiūrime. Čia pridėjau šiek tiek papildomų duomenų, kuriuos vadinsime metaduomenimis, tai yra, perėjau ne aš, o du žmonės, pavyzdžiui, Jay ir Silent Bob. Štai į ką mes žiūrime; ką jis rodo ir kada parodo tą vertę.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas
Dabar pabandykime visus šiuos duomenis saugoti duomenų bazėje. Pavyzdžiui, aš paėmiau ClickHouse sintaksę. Ir čia mes kuriame vieną lentelę pavadinimu „Žingsniai“, t.y., į ką žiūrime. Čia yra laikas, kai mes į tai žiūrime; ką jis rodo, ir kai kuriuos metaduomenis, kur saugosime, kas tai yra: Jay ir Silent Bob.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

O kad pabandytume visa tai vizualizuoti, naudosime Grafana, nes, pirma, ji graži.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Taip pat naudosime šį papildinį. Tam yra dvi priežastys. Pirma, nes aš tai parašiau. Ir aš tiksliai žinau, kaip sunku iš „ClickHouse“ ištraukti laiko eilučių duomenis, kad juos būtų galima parodyti „Grafana“.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Rodysime grafikų skydelyje. Tai populiariausias „Grafana“ skydelis ir rodo vertę, palyginti su laiku, todėl mums reikia tik dviejų parametrų.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas
Parašykime paprasčiausią užklausą – kaip parodyti žingsnių statistiką Grafana, išsaugant šiuos duomenis ClickHouse, į mūsų sukurtą lentelę. Ir mes rašome tokią paprastą užklausą. Renkamės iš žingsnių. Mes pasirenkame reikšmę ir pasirenkame šių reikšmių laiką, ty tuos pačius tris parametrus, apie kuriuos kalbėjome.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir kaip rezultatas, mes gauname šį grafiką. Kas žino, kodėl jis toks keistas?

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Teisingai, reikia rūšiuoti pagal laiką.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir galiausiai gauname geresnį, bet vis tiek keistą tvarkaraštį. Kas žino kodėl? Taip, yra du dalyviai, o „Grafana“ atiduodame dvi laiko eilutes, nes jei dar kartą susidorosime su duomenų modeliu, kiekviena laiko eilutė yra unikalus pavadinimo ir visų etikečių raktų-reikšmių derinys.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Todėl turime pasirinkti konkretų žmogų. Mes pasirenkame Jay.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir vėl piešti. Dabar grafikas atrodo kaip tiesa. Dabar tai normalus grafikas ir viskas veikia gerai.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir tikriausiai žinote, kaip padaryti tą patį, bet „Prometheus“ per PromQL. Maždaug taip. Šiek tiek lengviau. Ir viską suskaidykime. Žengėme žingsnius. Ir filtruoti pagal Jay. Čia nenurodome, kad reikia gauti vertę ir nesirenkame laiko.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Dabar pabandykime apskaičiuoti Jay arba Silent Bob judėjimo greitį. „ClickHouse“ turėsime atlikti „runDifference“, ty apskaičiuoti skirtumą tarp taškų porų ir padalyti jas iš laiko, kad gautume tikslų greitį. Prašymas atrodys maždaug taip.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir jis parodys apytiksliai šias reikšmes, t. y. maždaug 1,8 žingsnio per sekundę Tylus Bobas ar Jay.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir Prometėjas jūs taip pat žinote, kaip tai padaryti. Daug lengviau nei anksčiau.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašasO kad tai būtų lengva padaryti ir Grafana, pridėjau tokį įvyniojimą, kuris atrodo labai panašus į PromQL. Tai vadinama greičio makrokomandomis arba kaip norite tai pavadinti. Grafanoje tiesiog rašai „rate“, bet kažkur giliai tai transformuojasi į tokį didelį prašymą. Ir net nereikia į jį žiūrėti, jis kažkur yra, bet sutaupai daug laiko, nes rašyti tokias milžiniškas SQL užklausas visada brangu. Galite lengvai suklysti ir ilgai nesuprasti, kas vyksta.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir tai yra užklausa, kuri net netilpo vienoje skaidrėje, ir aš turėjau ją padalinti į du stulpelius. Tai taip pat yra užklausa „ClickHouse“, kuri sukuria tą patį rodiklį, tačiau abiem laiko eilutėms: „Silent Bob“ ir „Jay“, kad skydelyje būtų dvi laiko eilutės. O tai jau labai sunku, mano nuomone.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

O pagal Prometėją tai bus suma (kursas). „ClickHouse“ sukūriau atskirą makrokomandą „RateColumns“, kuri atrodo kaip „Prometheus“ užklausa.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Mes pažiūrėjome ir atrodo, kad PromQL yra toks šaunus, tačiau, žinoma, jis turi apribojimų.

Jie yra:

  • Ribotas SELECT.
  • Edge JOIN.
  • NĖRA TURĖTI paramos.

Ir jei dirbate su juo ilgą laiką, tada žinote, kad kartais labai sunku ką nors padaryti PromQL, o SQL galite padaryti beveik viską, nes visas šias parinktis, apie kurias ką tik kalbėjome, galima padaryti SQL . Bet ar būtų patogu juo naudotis? Ir tai verčia mane galvoti, kad ne visada galingiausia kalba gali būti pati patogiausia.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Todėl kartais reikia pasirinkti kalbą užduotims atlikti. Tai tarsi mūšis tarp Betmeno ir Supermeno. Aišku, kad Supermenas stipresnis, bet Betmenas sugebėjo jį nugalėti, nes yra praktiškesnis ir tiksliai žinojo, ką daro.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

O kita dalis – PromQL išplėtimas.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Dar kartą apie VictoriaMetrics. Kas yra VictoriaMetrics? Tai laiko eilučių duomenų bazė, ji yra atvirojo kodo, platiname jos vienos ir klasterio versijas. Pagal mūsų etalonus jis yra greičiausias, koks dabar yra rinkoje, o glaudinimo prasme panašus, t.y. gyvi žmonės praneša apie 0,4 baito suspaudimą taške, kai Prometheus turi 1,2–1,4.

Mes palaikome ne tik Prometėją. Mes palaikome InfluxDB, Graphite, OpenTSDB.

Galite "rašyti" pas mus, tai yra, galite perkelti senus duomenis.

Taip pat puikiai dirbame su Prometheus ir Grafana, t.y. palaikome PromQL variklį. O „Grafana“ galite tiesiog pakeisti „Prometheus“ galinį tašką į „VictoriaMetrics“ ir visos jūsų prietaisų skydeliai veiks taip, kaip veikia.

Tačiau taip pat galite naudoti papildomus „VictoriaMetrics“ pateiktus lustus.

Greitai peržiūrėsime pridėtas funkcijas.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Praleisti intervalo parametrą – galite praleisti parametrų intervalą Grafana. Kai nenorite gauti keistų grafikų didinant/mažinant skydelį, rekomenduojama naudoti kintamąjį $__interval. Tai vidinis „Grafana“ pakeitimas ir pats pasirenka duomenų diapazoną. Ir „VictoriaMetrics“ pati gali suprasti, koks turėtų būti šis diapazonas. Ir jums nereikia atnaujinti visų savo užklausų. Bus daug lengviau.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Antroji funkcija yra intervalų nuoroda. Šį tarpą galite naudoti savo išraiškose. Galite dauginti, dalyti, perkelti, remtis.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Kitas yra sujungimo funkcijų šeima. Apibendrinimo funkcija paverčia bet kurią jūsų laiko eilutę į tris atskiras laiko eilutes. Tai yra min., maks. ir vid. Man tai labai patogu, nes kartais gali pasirodyti kažkokių nukrypimų (anomalijų) ir netikslumų.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir jei jūs tiesiog pykstate ar vertinate, tikriausiai galite praleisti kai kuriuos atvejus, kai laiko eilutė elgiasi ne taip, kaip norėjote. Tai daug lengviau matyti naudojant šią funkciją, tarkime, maksimalus dydis labai skiriasi nuo vid.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Kitas yra numatytasis kintamasis. Numatytasis - tai reiškia, kokią vertę turime nubrėžti Grafana, jei šiuo metu neturime laiko eilutės. Kada tai įvyksta? Tarkime, kad eksportuojate tam tikrą klaidų metriką. Ir jūs turite tokią šaunią programą, kurią paleidę per ateinančias tris valandas ar net dieną neturite klaidų ir net jokių klaidų. Ir jūs turite informacijos suvestines, kuriose rodomi santykiai nuo sėkmės iki klaidų. Ir jie jums nieko nerodys, nes neturite klaidų metrikos. Ir pagal nutylėjimą galite nurodyti bet ką.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Keep_last_Value – išsaugo paskutinę metrikos reikšmę, jei jos trūksta. Jei Prometėjas po kito įbrėžimo jo nerado per 5 minutes, tai čia mes atsiminsime paskutinę jo reikšmę ir jūsų diagramos daugiau nenutrūks.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Scrape_interval – parodo, kaip dažnai Prometheus renka duomenis apie jūsų metriką ir kokiu dažnumu. Pavyzdžiui, čia galite pamatyti leidimą.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas
Etiketės keitimas yra populiari funkcija. Bet mes manome, kad tai šiek tiek sudėtinga, nes reikia sveikųjų skaičių. Ir reikia ne tik atsiminti 5 argumentus, bet ir atsiminti jų seką.
„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas
Todėl kodėl gi jų nesupaprastinus? Tai yra, suskaidykite jį į mažas funkcijas su aiškia sintaksė.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

O dabar įdomiausia. Kodėl manome, kad tai išplėstas PromQL? Kadangi palaikome bendrąsias lentelės išraiškas. Galite sekti QR kodą (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL), žr. nuorodas su pavyzdžiais iš žaidimų aikštelės, kur galite vykdyti užklausas tiesiogiai „VictoriaMetrics“, neįdiegę jos tik naršyklėje.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir kas tai yra? Šis prašymas iš viršaus yra gana populiarus prašymas. Manau, kad daugelyje įmonių prietaisų skydelyje viskam naudojate tą patį filtrą. Paprastai taip. Bet kai reikia pridėti naują filtrą, turite atnaujinti kiekvieną skydelį arba atsisiųsti prietaisų skydelį, atidaryti jį JSON, atlikti radimo pakeitimą, o tai taip pat užtrunka. Kodėl neišsaugojus šios reikšmės kintamajame ir nepanaudojus jos dar kartą? Mano nuomone, tai atrodo daug paprasčiau ir aiškiau.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Pavyzdžiui, kai man reikia atnaujinti „Grafana“ filtrus visose užklausose, o prietaisų skydelis gali būti didžiulis arba jų gali būti net keli. Ir kaip aš norėčiau išspręsti šią problemą Grafana?

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Šią problemą sprendžiu taip: sukuriu commonFilter ir apibrėžiu jame šį filtrą, o tada vėl naudoju jį užklausose. Bet jei tą patį padarysite dabar, tai neveiks, nes „Grafana“ neleidžia naudoti kintamųjų užklausos kintamuosiuose. Ir tai šiek tiek keista.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Taigi aš padariau parinktį, kuri leidžia jums tai padaryti. O jei domitės ar norite tokios funkcijos, tuomet palaikykite arba nepatinka, jei ši idėja jums nepatinka. https://github.com/grafana/grafana/pull/16694

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Daugiau apie PromQL išplėstą. Čia apibrėžiame ne tik kintamąjį, bet ir tiesiogiai visą funkciją. Ir mes tai vadiname ru (resursų naudojimas). Ir ši funkcija priima nemokamus išteklius, išteklių limitą ir filtrą. Sintaksė atrodo paprasta. O naudotis šia funkcija ir apskaičiuoti, kiek procentų turime laisvos atminties, labai paprasta. Tai yra, kiek atminties turime, kokia riba ir kaip filtruoti. Atrodytų daug geriau, jei viską parašytumėte pakartotinai naudodami tuos pačius filtrus, nes tai virstų didele, didele užklausa.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Ir štai tokio didelio, didelio prašymo pavyzdys. Tai iš oficialios „Grafana“ skirtos „NodeExporter“ prietaisų skydelio. Bet aš nelabai suprantu, kas čia vyksta. Tai, žinoma, suprantu, jei gerai įsižiūri, bet skliaustų skaičius gali iš karto sumažinti motyvaciją suprasti, kas čia vyksta. Ir kodėl gi to nepadarius paprasčiau ir aiškiau?

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Pavyzdžiui, kaip šis, paryškinant reikšmingus dalykus ar dalis kintamuosiuose. Ir tada atlikite savo pagrindinę matematiką. Tai daugiau kaip programavimas, tai aš norėčiau ateityje pamatyti Grafana.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Štai antras pavyzdys, kaip galime padaryti dar lengviau, jei jau turėjome šią ru funkciją ir ji jau yra tiesiogiai „VictoriaMetrics“. Tada tiesiog perduodate talpykloje esančią vertę, kurią deklaravote CTE.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Jau kalbėjau apie tai, kaip svarbu naudoti tinkamą programavimo kalbą. Ir tikriausiai kiekvienoje įmonėje Grafana vyksta kažkas kitokio. Ir tikriausiai jūs vis tiek suteikiate prieigą prie „Grafana“ savo kūrėjams, o kūrėjai daro kažką savo. Ir visi jie tai daro skirtingai. Bet aš norėjau kažkaip to paties, tai yra, sumažinto iki bendro standarto.

Tarkime, kad jūs netgi neturite sistemos inžinierių, galbūt netgi turite ekspertų, devops ar SRE. Galbūt turite ekspertų, kurie žino, kas yra stebėjimas, žino, kas yra „Grafana“, t. y. jie su tuo dirba daugelį metų ir tiksliai žino, kaip tai padaryti teisingai. Ir jau 100 kartų rašė ir visiems aiškino, bet kažkodėl niekas neklauso.

O kas, jei jie galėtų šias žinias įdėti tiesiai į „Grafana“, kad kiti vartotojai galėtų pakartotinai panaudoti funkcijas? O jei reikėtų skaičiuoti laisvos atminties procentą, tai jie tiesiog pritaikytų funkciją. Tačiau kas būtų, jei eksportuotojų kūrėjai kartu su savo produktu pateiktų ir funkcijų rinkinį, kaip dirbti su savo metrikais, nes jie tiksliai žino, kas tai yra ir kaip teisingai juos apskaičiuoti?

Šis tikrai neegzistuoja. Štai ką aš padariau pats. Tai yra „Grafana“ bibliotekos palaikymas. Tarkime, vaikinai, kurie sukūrė „NodeExporter“, padarė tai, ką aprašiau. Taip pat pateikė funkcijų rinkinį.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Tai yra, tai atrodo maždaug taip. Šią biblioteką prijungiate prie „Grafana“, pradedate redaguoti, o štai JSON labai paprasta dirbti su šia metrika. Tai yra, tam tikras funkcijų rinkinys, jų aprašymas ir į ką jos išsiskleidžia.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Mano nuomone, tai galėtų būti naudinga, nes tada rašytum Grafana tiesiog taip. O Grafana jums „pasakoja“, kad iš tokios ir tokios bibliotekos yra tokia ir tokia funkcija – naudokimės. Manau, būtų labai šaunu.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Šiek tiek apie VictoriaMetrics. Mes darome daug įdomių dalykų. Skaitykite mūsų straipsnius apie glaudinimą, apie mūsų konkurenciją su kitomis laiko eilučių duomenų programomis, mūsų paaiškinimus, kaip dirbti su PromQL, nes čia yra daug daugiau pradedančiųjų, taip pat apie vertikalų mastelio keitimą ir apie konfrontaciją su Thanos.

„ExtendedPromQL“ – Romano Khavronenko pranešimo nuorašas

Klausimai:

Savo klausimą pradėsiu nuo paprastos gyvenimo istorijos. Kai pirmą kartą pradėjau naudoti „Grafana“, parašiau labai įtikinamą 5 eilučių užklausą. Galutinis rezultatas yra labai įtikinama diagrama. Šis grafikas beveik pradėtas gaminti. Tačiau atidžiau pažiūrėjus paaiškėjo, kad ši diagrama rodo absoliučią nesąmonę, kuri neturi nieko bendra su realybe, nors skaičiai patenka į tą diapazoną, kurį tikėjomės pamatyti. Ir mano klausimas. Mes turime bibliotekas, turime funkcijas, bet kaip parašyti „Grafana“ testus? Parašėte sudėtingą užklausą, kuri turi įtakos verslo sprendimui – užsakyti tikrą serverių konteinerį ar ne. Ir, kaip žinome, ši funkcija, nubrėžianti grafiką, yra panaši į tiesą. Ačiū.

Ačiū už klausimą. Čia yra dvi dalys. Pirma, remdamasis savo patirtimi susidaro įspūdis, kad dauguma vartotojų, žiūrėdami į savo diagramas, nesupranta, ką jie rodo. Kažkaip žmonės labai gerai sugalvoja pasiteisinimą bet kokiai diagramose pasitaikančiam anomalijai, net jei tai yra funkcijos klaida. Ir antroji dalis – man atrodo, kad tokių funkcijų naudojimas daug labiau tiktų jūsų problemai spręsti, o ne kiekvienas jūsų kūrėjas pats planuotų pajėgumus ir su tam tikra tikimybe klystytų.

Kaip patikrinti?

Kaip patikrinti? Tikriausiai ne.

Kaip išbandymas Grafanoje.

O kaip Grafana? „Grafana“ verčia šią užklausą tiesiai į duomenų šaltinį.

Šiek tiek pridedant prie parametrų.

Ne, prie Grafanos nieko nepridėta. Gali būti GET parametrai, pvz., žingsnis. Jis nėra aiškiai nurodytas, bet jūs galite jį nepaisyti, negalite jo nepaisyti, bet jis pridedamas automatiškai. Testų čia nerašysi. Nemanau, kad čia reikėtų pasikliauti Grafana kaip tiesos šaltiniu.

Ačiū už pranešimą! Ačiū už suspaudimą! Jūs prisiminėte apie kintamojo atvaizdavimą grafike, kad Grafana negalite naudoti kintamojo kintamajame. Ar supranti, ką aš turiu galvoje?

Taip.

Iš pradžių tai buvo galvos skausmas, kai norėjau įspėti Grafaną. Ir čia reikia perspėti kiekvieną pagrindinį kompiuterį atskirai. Štai ką jūs padarėte: ar jis veikia su įspėjimais sistemoje „Grafana“?

Jei Grafana nepasiekia kintamųjų kitu būdu, tada taip, jis veiks. Bet aš patariu iš viso nenaudoti įspėjimų Grafana, geriau naudoti alertmanager.

Taip, aš jį naudoju, bet atrodė, kad tai lengviau nustatyti Grafana, bet ačiū už patarimą!

Šaltinis: www.habr.com

Добавить комментарий