"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Vi suggeriu di leghje a trascrizione di u rapportu di Roman Khavronenko "ExtendedPromQL"

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

In breve nantu à mè. Mi chjamu Rumanu. U travagliu in CloudFlare è campu in Londra. Ma sò ancu un mantene VictoriaMetrics.
È sò l'autore ClickHouse plugin per Grafana è Clicca House-proxy hè un picculu proxy per ClickHouse.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Cuminciaremu cù a prima parte, chì hè chjamata "Dificultà di a traduzzione" è in questu parleraghju di u fattu chì ogni lingua o ancu solu una lingua di cumunicazione hè assai impurtante. Perchè questu hè cumu trasmette i vostri pinsamenti à una altra persona o sistema, cumu formulate una dumanda. A ghjente in Internet discute quale lingua hè megliu - java o qualcuna altra. Per mè stessu, aghju decisu chì aghju bisognu di sceglie secondu u compitu, perchè tuttu questu hè specificu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Cuminciamu da u principiu. Cosa hè PromQL? PromQL hè Prometheus Query Language. Questu hè cumu formemu dumande in Prometheus per uttene dati di serie temporale.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Chì sò i dati di a serie temporale? Litteralmente, questi sò trè paràmetri.

Queste sò:

  • Chì guardemu ?
  • Quandu avemu vistu.
  • È chì valore mostra ?

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Se guardate stu graficu (questu graficu hè da u mo telefunu chì mostra i mo statistiche di passu), pò risponde rapidamente à queste dumande.

Fighjemu i passi. Videmu u significatu è vedemu u tempu quandu guardemu. Questu hè, fighjendu stu diagramma, pudete facilmente dì chì dumenica aghju fattu circa 15 000 passi. Questa hè una serie di dati di u tempu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Avà "split" (cunvertisce) in un altru mudellu di dati in forma di tavula. Quì avemu ancu ciò chì guardemu. Quì aghju aghjustatu un pocu di dati supplementari, chì chjameremu meta-data, vale à dì ùn era micca mè chì hà passatu per questu, ma duie persone, per esempiu, Jay è Silent Bob. Questu hè ciò chì guardemu; ciò chì mostra è quandu mostra stu valore.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko
Avà pruvemu di almacenà tutte queste dati in una basa di dati. Per esempiu, aghju pigliatu a sintassi di ClickHouse. È quì avemu creatu una tavola chjamata "Steps", vale à dì ciò chì guardemu. Ci hè un tempu quandu u fighjemu; ciò chì mostra è qualchi metadati induve guardemu quale hè: Jay è Silent Bob.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È per pruvà à visualizà tuttu questu, avemu aduprà Grafana perchè, prima di tuttu, hè bella.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Avemu ancu aduprà stu plugin. Ci hè dui motivi per questu. U primu hè perchè l'aghju scrittu. È sò esattamente quantu hè difficiule di tirà dati di serie di u tempu da ClickHouse per vede in Grafana.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Avemu da vede in u Pannellu Graficu. Questu hè u pannellu più populari in Grafana, chì mostra a dependenza di un valore in u tempu, cusì avemu bisognu di dui paràmetri.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko
Scrivemu a quistione più simplice - cumu per vede statistiche di u passu in Grafana, almacenendu queste dati in ClickHouse, in a tavula chì avemu creatu. E scrivemu sta dumanda simplice. Avemu sceltu da i passi. Selezziunà un valore è selezziunate u tempu di sti valori, vale à dì i stessi trè paràmetri chì avemu parlatu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È in u risultatu, averemu un graficu cum'è questu. Quale sà perchè hè cusì stranu ?

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Hè propiu, avemu bisognu di sorte per u tempu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È à a fine averemu un calendariu megliu, ma sempre stranu. Quale sà perchè ? Hè ghjustu, ci sò dui participanti, è noi à Grafana dà fora dui serii tempu, perchè s'è vo circate u mudellu di dati di novu, allura ogni serie di tempu hè una cumminazzioni unica di nome è tutte e etichette chjave-valore.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Dunque, avemu bisognu di sceglie una persona specifica. Avemu sceltu Jay.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È disegnemu di novu. Avà u graficu s'assumiglia à a verità. Avà questu hè un schedariu normale è tuttu funziona bè.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È probabilmente sapete cumu fà quasi a listessa cosa, ma in Prometheus via PromQL. Qualcosa cum'è questu. Un pocu più simplice. È spartemu tuttu. Avemu fattu Passi. È filtre da Jay. Ùn avemu micca specificà quì chì avemu bisognu di ottene un valore è ùn avemu micca sceltu un tempu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Avà pruvemu à calculà a velocità di muvimentu di Jay o Silent Bob. In ClickHouse avemu bisognu di fà runningDifference, vale à dì calculà a diffarenza trà coppie di punti è dividite per u tempu per ottene a velocità esatta. A dumanda sarà simile à questu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È mostrarà apprussimatamente questi valori, vale à dì Silent Bob o Jay piglia circa 1,8 passi per seconda.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È in Prometheus sapete cumu fà questu. Moltu più faciule ch'è prima.

"ExtendedPromQL" - trascrizione di u rapportu di Roman KhavronenkoÈ per fà ancu faciule fà in Grafana, aghju aghjustatu stu wrapper, chì pare assai simili à PromQL. Hè chjamatu Rate Macros o ciò chì vulete chjamà. In Grafana scrivite solu "rate", ma in un locu prufondu si trasforma in questa grande dumanda. È ùn avete mancu à fighjà, ci hè in qualchì locu, ma risparmiate assai tempu, perchè scrive tali dumande SQL enormi hè sempre caru. Pudete facilmente fà un sbagliu è dopu ùn capisce micca ciò chì succede per un bellu pezzu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È questu hè una dumanda chì ùn hè micca ghjustu in una sola diapositiva è aghju avutu ancu di split in dui culonni. Questu hè ancu una dumanda in ClickHouse, chì face a stessa tarifa, ma per e duie serie di tempu: Silent Bob è Jay, perchè avemu duie serie di tempu nantu à u pannellu. È questu hè digià assai difficiule, in my opinion.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

E sicondu Prometheus serà somma (tariffa). Per ClickHouse, aghju fattu una macro separata chjamata RateColumns, chì pare una dumanda in Prometheus.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Avemu guardatu è pare chì PromQL hè cusì cool, ma hà, sicuru, limitazioni.

Queste sò:

  • SELEZIONE limitata.
  • Borderline JOINs.
  • Senza sustegnu.

E s'è vo avete travagliatu cù questu per un bellu pezzu, allora sapete chì qualchì volta hè assai difficiule di fà qualcosa in PromQL, ma in SQL pudete fà quasi tuttu, perchè tutte queste opzioni chì avemu parlatu solu puderanu esse fattu in SQL. . Ma saria cunvene à aduprà? È questu mi face pensà chì a lingua più putente ùn hè micca sempre a più còmuda.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Dunque, qualchì volta avete bisognu di sceglie una lingua per u compitu. Hè cum'è Batman cumbattendu Superman. Hè chjaru chì Superman hè più forte, ma Batman hà sappiutu scunfighjalu perchè hè più praticu è sapia esattamente ciò chì facia.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È a prossima parte hè Extending PromQL.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Una volta di più nantu à VictoriaMetrics. Cosa hè VictoriaMetrics? Questa hè una basa di dati di serie di tempu, hè in OpenSource, distribuemu e so versioni singuli è cluster. Sicondu i nostri benchmarks, hè più veloce di tuttu ciò chì hè in u mercatu avà è a cumpressione hè simile, vale à dì chì e persone veri rapportanu cumpressione di circa 0,4 bytes per puntu, mentri Prometheus hè 1,2-1,4.

Supportemu più cà solu Prometheus. Supportemu InfluxDB, Graphite, OpenTSDB.

Pudete "scrivite" à noi, chì hè, vi ponu trasfiriri vechji dati.

È avemu ancu travagliatu perfettamente cù Prometheus è Grafana, vale à dì chì sustenemu u mutore PromQL. È in Grafana pudete simpricimenti cambià l'endpoint Prometheus à VictoriaMetrics è tutti i vostri dashboards funzionaranu cum'è.

Ma pudete ancu aduprà funzioni supplementari chì VictoriaMetrics furnisce.

Passeremu rapidamente per e funzioni chì avemu aghjustatu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Omit interval param - pudete omette i paràmetri di intervallu in Grafana. Quandu ùn vulete micca uttene grafici strani quandu si zooma in / out in u pannellu, hè cunsigliatu di utilizà a variabile $__interval. Questu hè un cambiamentu Grafana internu è selezziunate a gamma di dati stessu. E VictoriaMetrics stessu pò capisce ciò chì deve esse sta gamma. È ùn avete micca bisognu di aghjurnà tutte e vostre richieste. Serà assai più faciule.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

A seconda funzione hè u riferimentu à intervalli. Pudete aduprà stu intervallu in e vostre espressioni. Pudete multiplicà, dividite, trasfiriri, riferite à questu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Dopu hè a famiglia di funzioni rollup. A funzione Rollup trasforma qualsiasi di e vostre serie temporali in trè serie temporali separate. Quessi sò min, max è avg. Aghju trovu questu assai cunvene perchè qualchì volta pò mostrà alcuni outliers è imprecisioni.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

E s'è vo fate solu irate o rate, allura vi prubabilmente mancate certi casi induve a serie di u tempu ùn si cumporta cum'è aspittatu. Cù sta funzione hè assai più faciule per vede, dicemu chì max hè assai assai da avg.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Dopu hè a variabile predeterminata. Default - questu significa chì valore avemu bisognu di disegnà in Grafana si ùn avemu micca una serie di tempu in u mumentu. Quandu succede questu? Diciamu chì esportate alcune metriche d'errore. È avete una applicazione cusì fresca chì quandu avete principiatu, ùn avete micca errori è ancu micca errori per e trè ore o ancu un ghjornu. È avete dashboards chì mostranu a relazione da successu à errore. È ùn vi mostraranu nunda perchè ùn avete micca una metrica d'errore. È in modu predeterminatu pudete specificà qualcosa.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Keep_last_Value - salva l'ultimu valore di a metrica se manca. Se Prometheus ùn si trova micca in 5 minuti dopu à u prossimu scrape, allora quì ricurdaremu u so ultimu valore è i vostri charts ùn si romperanu più.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Scrape_interval - mostra quantu spessu Prometheus raccoglie dati nantu à a vostra metrica, è cù quale frequenza. Quì pudete vede un passaghju, per esempiu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko
A sostituzione di l'etichetta hè una funzione populari. Ma pensemu chì hè un pocu complicatu perchè ci vole argumenti interi. È ùn deve micca solu ricurdà 5 argumenti, ma ancu ricurdate a so sequenza.
"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko
Dunque, perchè ùn li rende più simplici? Questu hè, scumpressate in picculi funzioni cù sintassi comprensibile.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È avà a parte divertente. Perchè pensemu chì questu hè PromQL allargatu? Perchè sustenemu l'espressioni di tavulinu cumuni. Pudete seguità u codice QR (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL), vede ligami cù esempii, da u campu di ghjocu, induve pudete eseguite dumande direttamente in VictoriaMetrics senza installà solu in u navigatore.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È chì hè questu? Questa dumanda sopra hè una dumanda abbastanza populari. Pensu chì in ogni dashboard in parechje cumpagnie utilizate u stessu filtru per tuttu. Di solitu cusì. Ma quandu avete bisognu di aghjunghje un novu filtru, avete da aghjurnà ogni pannellu, o scaricate u dashboard, apre in JSON, truvate rimpiazzà, chì piglia ancu tempu. Perchè micca almacenà stu valore in una variàbile è reutilizà? Questu pare, in my opinion, assai più simplice è più chjaru.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Per esempiu, quandu aghju bisognu di aghjurnà i filtri in Grafana in tutte e dumande, è u dashboard pò esse enormi o pò ancu esse parechji. È cumu mi piacerebbe risolve stu prublema in Grafana ?

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Risolvi stu prublema in questu modu: aghju fattu un filtru cumuni è definisce stu filtru in questu, è poi reutilizà in e dumande. Ma s'è vo fate u listessu avà, ùn funzionerà micca perchè Grafana ùn vi permette micca di utilizà variabili in e variabili di dumanda. È hè un pocu stranu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È cusì aghju fattu una opzione chì vi permette di fà questu. È se site interessatu o vulete una tale funzione, allora sustene o dispiace si ùn ti piace micca sta idea. https://github.com/grafana/grafana/pull/16694

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Più nantu à PromQL estendu. Quì avemu definitu micca solu una variabile, ma una funzione sana. E chjamemu ru (usu di risorse). E sta funzione accetta risorse gratuiti, limitazione di risorse è filtru. A sintassi pare esse simplice. È hè assai faciule d'utilizà sta funzione è calculà u percentuale di memoria libera chì avemu. Questu hè, quantu memoria avemu, quale hè a limitazione è cumu filtrà. Sembra assai più còmuda s'è vo avete scrittu tuttu, reutilizandu i stessi filtri, perchè diventerà una grande, grande query.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

È quì hè un esempiu di una dumanda cusì grande è grande. Hè da u dashboard ufficiale NodeExporter per Grafana. Ma capiscu appena ciò chì succede quì. Questu hè, sicuru, capiscu s'è vo circate attentamente, ma u numeru di parentesi pò riduce immediatamente a motivazione per capisce ciò chì succede quì. E perchè micca fà più simplice è chjaru?

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Per esempiu, cum'è questu, separà e cose significati o parti in variàbili. E poi fate a vostra matematica basica. Questu hè digià più di prugrammazione, questu hè ciò chì mi piacerebbe vede in u futuru in Grafana.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Eccu un secondu esempiu di cumu pudemu fà questu ancu più faciule sè avemu digià avutu sta funzione ru, è esiste digià direttamente in VictoriaMetrics. È tandu simpricimenti passà u valore in cache chì avete dichjaratu in u CTE.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Aghju digià parlatu di quantu hè impurtante di utilizà a lingua di prugrammazione curretta. E, probabilmente, ogni cumpagnia in Grafana hà qualcosa di differente. È prubabilmente dà ancu accessu à Grafana à i vostri sviluppatori, è i sviluppatori facenu u so propiu. È tutti facenu in una manera diversa. Ma aghju vulsutu chì sia in qualchì manera u listessu, vale à dì, per riduce à un standard cumuni.

Diciamu chì ùn avete mancu solu ingegneri di sistema, forse avete ancu esperti, devops o SRE. Forsi avete sperti chì sanu ciò chì u monitoraghju hè, chì sanu ciò chì Grafana hè, vale à dì, anu travagliatu cù questu per anni è sanu esattamente cumu fà bè. E anu digià scrittu questu 100 volte è l'anu spiegatu à tutti, ma per una certa ragione nimu ùn sente.

E se puderanu mette sta cunniscenza direttamente in Grafana per chì l'altri utilizatori puderanu reutilizà e funziunalità? È s'ellu avianu bisognu di calculà u percentualità di memoria libera, solu applicà a funzione. E se i creatori di l'esportatori, cù u so pruduttu, furnissi ancu un inseme di funzioni nantu à cumu travaglià cù e so metriche, perchè sanu esattamente ciò chì sò questi metrichi è cumu per calculà currettamente?

Questu ùn esiste micca veramente. Questu hè ciò chì aghju fattu mè stessu. Questu hè u supportu di a biblioteca in Grafana. Diciamu chì i picciotti chì anu fattu NodeExporter anu fattu ciò chì aghju parlatu. E anu ancu furnitu una serie di funzioni.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Questu hè, pare qualcosa cusì. Cunnettete sta biblioteca à Grafana, andate in editazione è hè scrittu assai simplice in JSON cumu travaglià cù questa metrica. Questu hè, qualchì settore di funzioni, a so descrizzione è ciò chì si trasformanu.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Pensu chì questu puderia esse utile, perchè tandu in Grafana scriverete cusì cusì. E Grafana "dici" chì ci hè una tale funzione da una tale è una biblioteca - usemu. Pensu chì seria assai cool.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Un pocu nantu à VictoriaMetrics. Facemu assai cose interessanti. Leghjite i nostri articuli nantu à a compressione, nantu à e nostre cumpetizioni cù altre applicazioni di dati di serie di u tempu, a nostra spiegazione di cumu travaglià cù PromQL, perchè ci sò sempre assai principianti in questu, è ancu di scalabilità verticale è di u cunfrontu cù Thanos.

"ExtendedPromQL" - trascrizione di u rapportu di Roman Khavronenko

Domande:

Cumincià a mo quistione cù una storia di vita simplice. Quandu aghju cuminciatu à aduprà Grafana, aghju scrittu una dumanda assai convincente chì era di 5 linee. U risultatu finale hè un graficu assai cunvincente. Stu schedariu hè guasi andatu in pruduzzione. Ma dopu à un'ispezione più stretta, hè risultatu chì stu graficu mostra un assulutu assulutu chì ùn hà nunda di fà cù a realità, ancu s'è i numeri sò in u intervallu chì avemu aspittatu di vede. È a mo dumanda. Avemu biblioteche, avemu funzioni, ma cumu scrivemu testi per Grafana ? Avete scrittu una dumanda cumplessa nantu à quale dipende una decisione cummerciale - per urdinà un veru cuntinuu di servitori o micca per urdinà. È cum'è sapemu, sta funzione chì traccia u graficu hè simile à a verità. Grazie.

Grazie per a quistione. Ci sò dui parti. Prima, aghju l'impressione, basatu annantu à a mo sperienza, chì a maiò parte di l'utilizatori, quand'elli fighjenu i so grafici, ùn capiscenu micca ciò chì li mostranu. Per una certa ragione, a ghjente hè assai bona per vene cun una scusa per ogni anomalia chì si trova in i grafici, ancu s'ellu hè un errore in una funzione. È a seconda parte - mi pare chì l'usu di tali funzioni seria un approcciu assai megliu per risolve u vostru prublema, invece di ognunu di i vostri sviluppatori di fà a so propria pianificazione di capacità è di fà sbagli cù una certa probabilità.

Cumu verificà?

Cumu verificà? Probabilmente micca.

Cum'è una prova in Grafana.

Chì ci hà da fà Grafana ? Grafana traduce sta dumanda direttamente à DataSource.

Aghjunghjendu un pocu à i paràmetri.

Innò, nunda hè aghjuntu à Grafana. Ci ponu esse parametri GET, cum'è, dì, passu. Ùn hè micca esplicitamente specificatu, ma pudete annullà, o ùn pudete micca annullà, ma hè aghjuntu automaticamente. Ùn scriverete micca testi quì. Ùn pensu micca chì duvemu cunfidassi in Grafana cum'è fonte di verità quì.

Grazie per u rapportu! Grazie per a cumpressione! Avete parlatu di mapping una variabile in un graficu, chì in Grafana ùn pudete micca aduprà una variabile in una variabile. Sapete ciò chì vogliu dì ?

Sì.

Questu era inizialmente un mal di testa quandu vulia creà una alerta in Grafana. È quì avete bisognu di fà una alerta per ogni host separatamente. Questa cosa chì avete fattu, funziona per alerti in Grafana ?

Se Grafana ùn accede micca à variàbili in modu diversu, allora sì, hà da travaglià. Ma u mo cunsigliu ùn hè micca di utilizà l'alerta in Grafana in tuttu, hè megliu aduprà alertmanager.

Iè, l'aghju utilizatu, ma pareva più faciule d'installà in Grafana, ma grazie per i cunsiglii!

Source: www.habr.com

Add a comment