«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Tutvustan Romain Khavroenko raporti "ExtendedPromQL" sisukokkuvÔtet.

MĂ€ngi videot

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

LĂŒhidalt minust. Minu nimi on Romain. Töötoime CloudFlare'is, elan Londonis. Olen ka VictoriaMetrics'i hooldaja.
Ja ma olen autor ClickHouse'i pluginast Grafana jaoks ja ClickHouse-proxy – see on vĂ€ike proxy ClickHouse'i jaoks.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Kasutame esimest osa, mis kannab nime "TĂ”lke keerukused", kus rÀÀgin, et iga keel vĂ”i isegi lihtsalt suhtlemiskeel on vĂ€ga oluline. Sest see on viis, kuidas edastate oma mĂ”tteid teisele inimesele vĂ”i sĂŒsteemile, kuidas te esitate pĂ€ringu. Internetis vaieldakse selle ĂŒle, milline keel on parem – java vĂ”i mĂ”ni muu. Otsustasin, et tuleb valida vastavalt ĂŒlesandele, sest kĂ”ik see on spetsiifiline.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Alustame algusest. Mis on PromQL? PromQL on Prometheuse pÀringukeel. See on viis, kuidas me vormistame pÀringud Prometheuses, et saada ajaseeria andmeid.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Mis on ajaseeria andmed? Kui vÔtta sÔnasÔnaliselt, siis need on kolm parameetrit.

Need on:

  • Millele me vaatame.
  • Millal me sellele vaatame.
  • Ja milline vÀÀrtus nĂ€itab.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Kui vaadata seda diagrammi (see diagramm on minu telefonist, mis nĂ€itab minu samblaste statistikat), siis saame kiiresti sellele kĂŒsimusele vastata.

Me vaatame samme. NĂ€eme vÀÀrtust ja aega, mil me sellele vaatame. Seega, vaadates seda diagrammi, on lihtne öelda, et pĂŒhapĂ€eval kĂ”ndisin umbes 15 000 sammu. Need on ajaseeria andmed.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

NĂŒĂŒd proovime "jaotada" (muuta) need teise andmemudeli kujul tabelina. Siin on meil samuti see, millele me vaatame. Siia olen lisanud tĂ€iendavaid andmeid, mida nimetame metaandmeteks, seega see ei olnud mitte mina, vaid kaks inimest, oletame, Jay ja Silent Bob. See on see, millele me vaatame; mida see nĂ€itab ja millal see vÀÀrtus nĂ€itab.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te
NĂŒĂŒd proovime salvestada kĂ”ik need andmed andmebaasi. NĂ€iteks vĂ”tsin ClickHouse'i sĂŒntaksi. Siin loome ĂŒhe tabeli, mis kannab nime "Steps", st millele me vaatame. Siin on aeg, mil me sellele vaatame; mida see nĂ€itab ja mĂ”ned metaandmed, kus me salvestame, kes see on: Jay ja Silent Bob.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja et proovida seda kÔike visualiseerida, kasutame Grafana't, sest eelkÔige on see ilus.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Me kasutame ka seda pistikprogrammi. Selleks on kaks pÔhjust. Esiteks, sest mina selle kirjutasin. Ja ma tean tÀpselt, kui keeruline on time series andmete eraldamine ClickHouse'ist, et neid Grafanas nÀidata.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

KÀtkeme Graph Panelis. See on kÔige populaarsem paneel Grafanas, mis kuvab vÀÀrtuse sÔltuvust ajast, seega vajame ainult kahte parameetrit.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te
Kirjutame kĂ”ige lihtsama pĂ€ringu — kuidas nĂ€idata samme Grafanas, mille andmed on salvestatud ClickHouse'i, tabelisse, mille me lĂ”ime. Ja me kirjutame sellise lihtsa pĂ€ringu. Valime sammudest. Valime vÀÀrtuse ja valime nende vÀÀrtuste aja, st samad kolm parameetrit, millest me rÀÀkisime.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja tulemuseks saame sellise graafiku. Kas keegi teab, miks see nii kummaline on?

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Õige, tuleb sorteerida ajas.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja lĂ”puks saame juba parem, aga ikka kummalise graafiku. Kas keegi teab, miks? Õige, seal on kaks osalejat, ja me saame Grafanas kaks time series, sest kui vaatame tĂŒpoloogiat veel kord, siis iga time series on ainulaadne kombinatsioon nimest ja kĂ”igist vĂ”tme-vÀÀrtuse labelitest.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Seega peame valima konkreetse isiku. Valime Jay.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja joonistame uuesti. NĂŒĂŒd nĂ€eb graafik vĂ€lja nagu tĂ”de. NĂŒĂŒd on see normaalne graafik ja kĂ”ik töötab hĂ€sti.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja ilmselt teate, kuidas teha umbes sama ka Prometheuses lÀbi PromQL. Umbes nii. Veidi lihtsam. Ja veel jagame selle kÔik. Me vÔtsime Steps. Ja filtreerime Jay jÀrgi. Me ei nÀita siin, et me tahame saada vÀÀrtust ja me ei vali aega.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Aga nĂŒĂŒd proovime arvutada Jay vĂ”i Silent Bob'i liikuvuse kiirus. ClickHouse'is peame tegema runningDifference, st arvutama paaride punktide erinevuse ja jagama nad ajaga, et saada tĂ€pne kiirus. PĂ€ring nĂ€eb vĂ€lja umbes nii.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja see nÀitab umbes selliseid vÀÀrtusi, st umbes 1,8 sammu sekundis teeb Silent Bob vÔi Jay.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja Prometheuses teate, kuidas seda teha samuti. Oluliselt lihtsam, kui see oli varem.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”teJa et see oleks Grafanas lihtne, lisasin ma sellise mĂ€hise, mis sarnaneb PromQL-iga. Seda nimetatakse Rate Macros vĂ”i kuidas iganes soovite. Grafanas kirjutate lihtsalt „rate”, kuid kuskil sĂŒgaval muudetakse see suureks pĂ€ringuks. Teie ei pea isegi sellele vaatama, see on seal kuskil, kuid sÀÀstate rohkesti aega, sest selliste suurte SQL-pĂ€ringute kirjutamine on alati aeganĂ”udev. Te vĂ”ite kergesti eksida ja hiljem kaua aru saada, mis toimub.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja see on pĂ€ring, mis ei mahtunud isegi ĂŒhele slaidile ja pidin selle jagama kaheks veeruks. See on samuti pĂ€ring ClickHouse'is, mis teeb sama rate'i, kuid mĂ”lema aega seeria kohta: nii Silent Bobi kui ka Jay kohta, et meil oleks paneelil kaks aega seeriat. Ja see on juba vĂ€ga keeruline, minu arvates.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja Prometheusele on see sum (rate). ClickHouse'i jaoks tegin ma eraldi makro, mida nimetatakse RateColumns, mis nÀeb vÀlja nagu pÀring Prometheuses.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Me vaatasime ja tundus, et PromQL on tÔeliselt Àge, kuid sellel on loomulikult omad piirangud.

Need on:

  • Piiratud SELECT.
  • Piiratud JOIN.
  • Puudub HAVING tugi.

Ja kui olete sellega kaua töötanud, siis teate, et mÔnikord on PromQL'is midagi teha vÀga raske, samas kui SQL-is saab teha praktiliselt kÔike, sest kÔik need variandid, millest me praegu rÀÀkisime, oleks saanud teostada SQL-is. Kuid kas oleks mugav seda kasutada? Ja see viib mind mÔtlema, et mitte alati ei pruugi kÔige vÔimsam keel olla kÔige mugavam.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

SeetĂ”ttu tuleb mĂ”nikord valida keel ĂŒlesannete jĂ€rgi. See on nagu Batmani ja Supermani lahing. Selge, et Superman on tugevam, kuid Batman suutis ta vĂ”ita, sest ta on praktilisem ja teadis tĂ€pselt, mida teeb.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja jÀrgmine osa on Extending PromQL.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Veel kord VictoriaMetricsist. Mis on VictoriaMetrics? See on ajalooliste andmete baas, mis on OpenSource, me jagame selle single- ja klastriversioone. Meie benchmarkide kohaselt on see kiireim, mis turul praegu on ja kompressioon on samuti sarnane, st elavad inimesed teatavad kompressioonist umbes 0,4 bait/punkt, kui Prometheuse puhul on see 1,2-1,4.

Me toetame mitte ainult Prometheust. Me toetame InfluxDB-d, Graphite'i, OpenTSDB-d.

Meisse saab "kirjutada", st vanu andmeid saab ĂŒle kanda.

Ja me töötame ideaalselt Prometheuse ja Grafanaga, st toetame PromQL mootorit. Ja Grafanas vÔite lihtsalt vahetada Prometheuse lÔpp-punkti VictoriaMetricsi vastu, ja teie kÔik armatuurlaud toimib nagu enne.

Kuid saate kasutada ka tÀiendavaid funktsioone, mida VictoriaMetrics pakub.

Vaatame kiiresti funktsioone, mille me oleme lisanud.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Omandage interval'i parameeter – saate Grafanas vahe parameetreid vahele jĂ€tta. Kui te ei soovi saada kummalisi graafikuid, kui zoomite sisse/vĂ€lja paneelil, siis on soovitatav kasutada muutujat $__interval. See on Grafana sisemine muutuja ja see valib ise andmete vahemiku. Ja VictoriaMetrics suudab ise mĂ”ista, milline see vahemik olema peab. Te ei pea uuendama oma pĂ€ringuid. See on palju lihtsam.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Teine funktsioon on intervalli viitamine. Saate seda intervalli kasutada oma vÀljendites. Saate seda korrutada, jagada, edastada ja viidata sellele.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Edasi liikudes rollup funktsioonide kogum. Rollup funktsioon muudab teie ajaseeriad kolmeks eraldi ajaseeriaks. Need on min, max ja avg. Arvan, et see on vÀga mugav, kuna see vÔib mÔnikord nÀidata teatud kÔrvalekaldeid ja ebatÀpsusi.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja kui te lihtsalt teete irate vÔi rate, siis on tÔenÀoline, et vÔite mÔnda juhtumit kÔrvale jÀtta, kui ajaseeria kÀitub mitte nii, nagu te oletate. Selle funktsiooniga on palju lihtsam nÀha, et nÀiteks max on palju kÔrgem kui avg.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Edasi muutuja default. Default tĂ€hendab, millist vÀÀrtust peame Grafanas joonistama, kui meil ei ole ajaseeriat hetkel. Millal see juhtub? Oletame, et ekspordite mĂ”nda veateavet. Ja teil on nii suur rakendus, et kui te alustate, siis ei ole teil vigu ja isegi kolme tunni jooksul vĂ”i isegi pĂ€eva jooksul ei ole vigu. Ja teil on armatuurlaud, mis nĂ€itab suhete suhet edus ja vigades. Ja nad nĂ€itavad teile mitte midagi, kuna teil ei ole veateavet. Default's saate mÀÀrata ĂŒkskĂ”ik mida.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Keep_last_Value – salvestab viimase mÔÔtme vÀÀrtuse, kui see kaob. Kui Prometheus ei leia jĂ€rgmisel hÀÀlestamisel seda viie minuti jooksul, siis salvestame selle viimase vÀÀrtuse ja teie graafikud ei purune uuesti.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Scrape_interval – nĂ€itab, kui tihti Prometheus kogub andmeid teie mÔÔdiku kohta, kui sageli. Siit on nĂ€iteks vĂ”imalik nĂ€ha lĂŒnki.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te
Label replace – populaarne funktsioon. Kuid meie arvates on see pisut keeruline, kuna see vĂ”tab terveid argumente. Ja peate mitte ainult meeles pidama 5 argumenti, vaid ka nende jĂ€rjekorda.
«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te
SeetĂ”ttu, miks mitte teha neid lihtsamaks? St. jagada vĂ€ikesteks funktsioonideks, millel on arusaadav sĂŒntaks.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja nĂŒĂŒd tuleb huvitav osa. Miks me arvame, et see on extended PromQL? Sest toetame Ühislauda. Sa saad skaneerida QR-koodi (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL), vaadata nĂ€idiste linke, mĂ€nguvĂ€ljakku, kus saad teostada pĂ€ringuid otse VictoriaMetrics'is ilma selle installimata lihtsalt brauseris.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja mis see siis on? See ĂŒlalpool olev pĂ€ring – see on ĂŒsna populaarne pĂ€ring. Ma arvan, et igas andmevisualiseerimises paljudes ettevĂ”tetes kasutad sama filtrit kĂ”igi jaoks. Tavaliselt nii. Aga kui pead lisama mingi uue filtri, tuleb iga paneel uuendada vĂ”i laadida andmevisualiseerimine alla, avada JSON-is, teha find replace, mis ka vĂ”tab aega. Miks mitte hoida seda vÀÀrtust muutujas ja taaskasutada seda? See tundub minu arvates palju lihtsam ja arusaadavam.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

NÀiteks, kui mul on vaja uuendada filtreid Grafanas kÔigis pÀringutes, ja andmevisualiseerimine vÔib olla tohutu vÔi neid vÔib olla isegi mitu. Ja kuidas ma sooviksin seda probleemi Grafanas lahendada?

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Lahendan selle probleemi nii: teen commonFilteri ja mÀÀratlen selles filtris, ning seejĂ€rel taaskasutada seda pĂ€ringutes. Kuid kui sa teed nĂŒĂŒd samamoodi, ei toimi see, sest Grafana ei luba sul kasutada muutujaid sisemistes pĂ€ringumuutujates. Ja see on veidi kummaline.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja seetÔttu tegin sellise variandi, mis lubab seda teha. Ja kui see huvitab sind vÔi soovid sellist funktsiooni, siis toeta vÔi hinda negatiivselt, kui sulle ei meeldi selline idee. https://github.com/grafana/grafana/pull/16694

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Edasi extended PromQL'i kohta. Siin mÀÀratleme mitte ainult muutuja, vaid lausa terve funktsiooni. Ja nimetame selle ru (resource usage). See funktsioon vĂ”tab vastu vabad ressursid, ressursi piirangu ja filtri. SĂŒntaks tundub olema lihtne. Ja on vĂ€ga lihtne kasutada seda funktsiooni ning arvutada meie vabade mĂ€lu protsent. St. kui palju meil on mĂ€lu, mis on piirang ja kuidas filtreerida. See tundub oluliselt mugavam, sest kirjutades kĂ”ik kasutada sama filtrit, see muutuks suureks-pĂ€devaks pĂ€ringuks.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ja, ja nÀide sellisest suurest pÀringust. See on ametlikust NodeExporter'i juhtpaneelist Grafanas. Aga ma ei saa aru, mis siin toimub. T. e., muidugi, ma saan aru, kui tÀhelepanelikult vaadata, aga sulgede arv vÔib kohe motivatsiooni alandada mÔista, mis siin toimub. Ja miks mitte teha seda lihtsamaks ja selgemaks?

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

NÀiteks nii, tuues esile olulised asjad vÔi osad muutujatesse. Ja siis tehes oma baasmatemaatika. See on juba rohkem nagu programmeerimine, see on see, mida ma tahaksin tulevikus Grafanas nÀha.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

See on teine nÀide, kuidas saame seda veelgi lihtsamaks teha, kui meil oleks see funktsioon ru, ja see on juba olemas VictoriaMetrics'is. Ja siis edastate lihtsalt vahemÀlus oleva vÀÀrtuse, mille olete CTE's kuulutanud.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

Ma olen juba rÀÀkinud, kui oluline on kasutada Ă”iget programmeerimiskeelt. Ja ilmselt igas ettevĂ”ttes toimub Grafanas midagi oma. Ja ilmselt annate ka oma arendajatele juurdepÀÀsu Grafanale, ja arendajad teevad midagi oma. Ja kĂ”ik nad teevad seda kuidagi erinevalt. Ja oleks hea, kui saaks kuidagi ĂŒhtsemalt, t. e. viia see ĂŒhise standardini.

Eeldame, et teil on mitte ainult sĂŒsteemiinsenerid, vĂ”ib-olla on teil isegi eksperdid, devops'id vĂ”i SRE'd. VĂ”ib-olla on teil eksperdid, kes teavad, mis asi on jĂ€lgimine, teavad, mis asi on Grafana, t. e. nad on sellega töötanud aastaid ja teavad tĂ€pselt, kuidas Ă”igesti teha. Ja nad on seda juba 100 korda kirjutanud ja kĂ”igile seletanud, aga mingil pĂ”hjusel keegi ei kuula.

Ja mis siis, kui nad saaksid need teadmised otse Grafanasse panna, et teised kasutajad saaksid funktsioone taaskasutada? Ja kui peaks arvutama vaba mÀlu protsendi, siis nad lihtsalt rakendaksid funktsiooni. Aga mis siis, kui eksportijate tegijad kaasneksid oma tootega ka funktsioonide kogumitega, kuidas töötada nende mÔÔtmetega, sest nad teavad tÀpselt, mis need mÔÔtmed on ja kuidas neid Ôigesti arvutada?

Seda tegelikult ei eksisteeri. Selle tegin mina ise. See on toetuse raamatukogude jaoks Grafanas. Eeldame, et poisid, kes tegid NodeExporter'i, tegid seda, millest ma rÀÀkisin. Ja pakkusid ka funktsioonide kogumit.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

See, it looks something like this. You connect this library in Grafana, you go into editing, and here it’s very simply written in JSON how to work with this metric. That is, it’s some set of functions, their descriptions, and how they unfold.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

I think this could be useful, because then in Grafana you would just write like this. And Grafana 'tells' you that there is such a function from a certain library – let’s use it. I think that would be really great.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

A bit about VictoriaMetrics. We are doing a lot of interesting things. Read our articles about compression, about our competitions with other time series data applications, our explanations on how to work with PromQL, because there are still many newcomers, as well as about vertical scalability and our confrontation with Thanos.

«ExtendedPromQL» — Romani Havronenko ettekande kokkuvĂ”te

KĂŒsimused:

I will start my question with a simple life story. When I first started using Grafana, I wrote a very convincing query that was five lines long. In the end, I got a very convincing graph. This graph almost went into production. But upon closer inspection, it turned out that this graph shows absolute nonsense, having nothing to do with reality, although the numbers fall within the range we expected to see. And my question is. We have libraries, we have functions, but how do we write tests for Grafana? You wrote a complex query that depends on a business decision – whether to order a real container of servers or not. And how do we know that this function, which draws the graph, resembles the truth? Thank you.

Thanks for the question. There are two parts. First – I have the impression, based on my practice, that most users, when looking at their graphs, do not understand what they are showing. For some reason, people are very good at coming up with justifications for any anomalies that occur on the graphs, even if it’s an error inside the function. And the second part – it seems to me that using such functions would suit your problem much better, instead of each of your developers doing their own capacity planning and being wrong with some probability.

How to check?

How to check? Probably, no way.

In the form of a test in Grafana.

What does Grafana have to do with it? Grafana translates this query directly into the DataSource.

Adding a little bit to the parameters.

Ei, Grafanas ei lisata midagi. Seal vĂ”ivad olla GET-parameetrid, nagu nĂ€iteks step. Seda ei öelda selgelt, kuid saate selle ĂŒletada, vĂ”ite mitte ĂŒletada, kuid see lisatakse automaatselt. Te ei kirjuta siia teste. Ma arvan, et ei tasu Grafanat tĂ”e allikana usaldada.

AitÀh ettekande eest! AitÀh kompresseerimise eest! Te mainisite, et grafikus ei saa kasutada muutujaid muutuja sees, kas saate aru, millest ma rÀÀgin?

Jah.

See oli algselt peavalu, kui ma tahtsin Grafanas hoiatust teha. Ja seal tuleb hoiatust teha iga hosti jaoks eraldi. Kas see, mille te tegite, töötab hoiatuste jaoks Grafanas?

Kui Grafana ei kĂ€sitle muutujaid kuidagi teisiti, siis jah, see töötab. Kuid minu soovitus on mitte kasutada Grafanas hoiatamist ĂŒldse, teil on parem kasutada alertmanagerit.

Jah, ma kasutan seda, aga lihtsalt tundus Grafanas seadistamine kergem, aga aitÀh nÀpunÀite eest!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster