{"id":75585,"date":"2020-03-27T07:42:28","date_gmt":"2020-03-27T05:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko"},"modified":"2020-03-27T07:42:28","modified_gmt":"2020-03-27T05:42:28","slug":"extendedpromql-rasshifrovka-doklada-romana-havronenko","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","title":{"rendered":"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Ti invitiamo a scoprire la trascrizione del report di Roman Khavronenko \"ExtendedPromQL\"<\/strong><\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"lWYaiagvmfw\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/lWYaiagvmfw\/hqdefault.jpg\" alt=\"Riproduci video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/54a175d9c74c90d9d313f8ff71476638.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un breve riepilogo su di me. Mi chiamo Roman. Lavoro per CloudFlare e vivo a Londra. Ma sono anche il mantenitore di VictoriaMetrics.<br \/>\nE sono l'autore del <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/clickhouse-grafana\">plugin ClickHouse<\/a><\/noindex> per Grafana e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse-proxy<\/a><\/noindex> \u2013 un piccolo proxy per ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fc1aa56b144def5db9fcee844d5016f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Inizieremo con la prima parte, intitolata \"Le difficolt\u00e0 della traduzione\" nella quale parler\u00f2 di come ogni lingua o anche semplicemente un linguaggio di comunicazione sia molto importante. Perch\u00e9 \u00e8 il modo in cui si trasmettono i propri pensieri a un'altra persona o sistema, come si formula una richiesta. La gente su Internet discute su quale linguaggio sia migliore \u2013 Java o un altro. Per me, ho deciso che bisogna scegliere in base al compito, poich\u00e9 tutto \u00e8 molto specifico.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Partiamo dalle basi. Cos'\u00e8 PromQL? PromQL \u00e8 il linguaggio di query di Prometheus. \u00c8 cos\u00ec che formuliamo le richieste in Prometheus per ottenere dati di serie temporali.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/56b1ef4cc04defdffeea8b2666fdc354.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cosa sono i dati di serie temporali? In parole semplici, sono tre parametri. <\/p>\n<p><\/p>\n<p>Essi sono:<\/p>\n<p><\/p>\n<ul>\n<li>Cosa stiamo osservando. <\/li>\n<li>Quando lo stiamo osservando.<\/li>\n<li>E quale valore mostra. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/358a193e889204d28debe1b74b93df3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se guardiamo questo grafico (questo grafico \u00e8 stato fatto con il mio telefono e mostra le statistiche dei miei passi), possiamo rispondere rapidamente a queste domande. <\/p>\n<p><\/p>\n<p>Stiamo analizzando i passi. Vediamo il valore e vediamo anche l'ora, quando lo osserviamo. Cio\u00e8, guardando questo grafico \u00e8 facile dire che domenica ho fatto circa 15.000 passi. Si tratta di dati della serie temporale. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ora procediamo a \"scomporli\" (trasformarli) in un altro modello di dati in forma tabellare. Anche qui abbiamo ci\u00f2 su cui ci concentriamo. Ho aggiunto alcune informazioni extra che chiameremo metadati, cio\u00e8, non sono stati elaborati da me, ma da due persone, supponiamo Jay e Silent Bob. Questo \u00e8 ci\u00f2 su cui ci concentriamo; cosa mostra e quando mostra questo valore. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOra proviamo a memorizzare tutti questi dati in un database. Per esempio, ho utilizzato la sintassi di ClickHouse. Qui stiamo creando una tabella chiamata \"Steps\", cio\u00e8 ci\u00f2 che stiamo analizzando. Ci sono il tempo in cui lo osserviamo; cosa mostra e alcuni metadati, dove conserveremo chi sono: Jay e Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/bd01f9dc0b29d34aacbb8f012710a94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E per cercare di visualizzare tutto questo, useremo Grafana, perch\u00e9, in primo luogo, \u00e8 bellissimo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9f573241e9ae32e31d6d0b879115970b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Useremo anche questo plugin. Ci sono due motivi per questo. Il primo \u00e8 che l'ho scritto io. E so perfettamente quanto sia difficile estrarre dati di serie temporali da ClickHouse per mostrarli in Grafana. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/29f2d72f9995afb54b23bb7b4230b840.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Visualizzeremo nel Graph Panel. Questo \u00e8 il pannello pi\u00f9 popolare in Grafana, che mostra la dipendenza del valore rispetto al tempo, quindi abbiamo bisogno solo di due parametri.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nScriviamo la query pi\u00f9 semplice: come mostrare le statistiche dei passi in Grafana, memorizzando questi dati in ClickHouse, nella tabella che abbiamo creato. Scriviamo quindi questa semplice query. Selezioniamo dai passi. Selezioniamo il valore e selezioniamo il tempo di questi valori, cio\u00e8 i medesimi tre parametri di cui abbiamo parlato.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ad7895105050178de5bc8a154da7e6e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E come risultato otterremo un grafico come questo. Chi sa perch\u00e9 \u00e8 cos\u00ec strano?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esatto, bisogna ordinare per tempo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E alla fine otterremo un grafico migliore, ma ancora strano. Chi lo sa perch\u00e9? Giusto, ci sono due partecipanti, e in Grafana stiamo restituendo due serie temporali, perch\u00e9 se rivediamo il modello di dati, ogni serie temporale \u00e8 una combinazione unica di nome e di tutte le coppie chiave-valore delle etichette.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/f19bf1a9f43ae8de22af6bf7b494902f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quindi dobbiamo scegliere una persona specifica. Scegliamo Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b6a714d5d6ce4d4b27634da9414aa6f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E disegniamo di nuovo. Ora il grafico \u00e8 pi\u00f9 vicino alla realt\u00e0. Ora \u00e8 un grafico normale e tutto funziona bene.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/2a93b4cd548239c9314c3283c5b9f488.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E probabilmente sapete come fare pi\u00f9 o meno la stessa cosa, ma in Prometheus attraverso PromQL. Circa in questo modo. Un po' pi\u00f9 semplice. E suddivideremo tutto. Abbiamo preso i Passi. E filtriamo per Jay. Qui non specifichiamo che vogliamo ottenere un valore e non scegliamo il tempo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/5e080a1b88c156522af21bf00f3cd641.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ora proviamo a calcolare la velocit\u00e0 di movimento di Jay o Silent Bob. In ClickHouse dobbiamo eseguire un runningDifference, cio\u00e8 calcolare la differenza tra coppie di punti e dividerle per il tempo, per ottenere la velocit\u00e0 esatta. La query apparir\u00e0 pi\u00f9 o meno in questo modo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E mostrer\u00e0 valori simili, cio\u00e8 circa 1,8 passi al secondo per Silent Bob o Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/1c328f99da6f160bdca23ab5f461bda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E in Prometheus sapete come farlo anche. Molto pi\u00f9 semplice di prima.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>E per mantenere questa semplicit\u00e0 in Grafana, ho aggiunto un wrapper che assomiglia molto a PromQL. Si chiama Rate Macros, oppure come volete chiamarla. In Grafana scrivete semplicemente \u00abrate\u00bb, ma in profondit\u00e0 viene trasformato in una grande query. Non dovete nemmeno osservare questa query, esiste da qualche parte, ma risparmiate un sacco di tempo, perch\u00e9 scrivere query SQL gigantesche \u00e8 sempre dispendioso. Potete facilmente commettere un errore e poi impiegare molto tempo per capire cosa stia succedendo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ecco una query che non \u00e8 riuscita a stare nemmeno in un singolo slide e ho dovuto dividerla addirittura in due colonne. Anche questa \u00e8 una query in ClickHouse che esegue lo stesso rate, ma per entrambe le time series: sia per Silent Bob che per Jay, in modo che sulla nostra dashboard ci siano due time series. Gi\u00e0 questo \u00e8 molto complicato, secondo il mio parere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E in Prometheus sarebbe sum(rate). Per ClickHouse ho creato un macro separato chiamato RateColumns, che appare come una query in Prometheus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9743c6a4b3de4aab7cfb5bd3fd50fcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Abbiamo guardato e sembra che PromQL sia davvero fantastico, ma ha sicuramente delle limitazioni.<\/p>\n<p><\/p>\n<p>Essi sono:<\/p>\n<p><\/p>\n<ul>\n<li>SELECT limitato.<\/li>\n<li>JOIN limitati.<\/li>\n<li>Nessun supporto per HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>E se hai lavorato a lungo con esso, sai che a volte \u00e8 molto difficile fare qualcosa in PromQL, mentre in SQL puoi praticamente fare tutto, perch\u00e9 tutte queste opzioni di cui abbiamo parlato possono essere realizzate in SQL. Ma sarebbe comodo usarle? Questo mi porta a pensare che non sempre il linguaggio pi\u00f9 potente sia il pi\u00f9 pratico.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ec8786f1d72a1f8652fa631cdffc9c25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pertanto, a volte bisogna scegliere il linguaggio in base alle esigenze. \u00c8 come una battaglia tra Batman e Superman. \u00c8 chiaro che Superman \u00e8 pi\u00f9 forte, ma Batman \u00e8 riuscito a sconfiggerlo perch\u00e9 \u00e8 pi\u00f9 pratico e sapeva esattamente cosa fare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E la parte successiva \u00e8 l'estensione di PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b806acf0e6c7c416614d3fd49004b4be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ancora una volta su VictoriaMetrics. Cos'\u00e8 VictoriaMetrics? \u00c8 un database time series, \u00e8 open source, distribuiamo versioni single e cluster. Dai nostri benchmark, \u00e8 il pi\u00f9 veloce sul mercato attualmente e offre una compressione simile, ovvero le persone riportano una compressione di circa 0,4 byte per punto, mentre per Prometheus \u00e8 di 1,2-1,4. <\/p>\n<p><\/p>\n<p>Non supportiamo solo Prometheus. Supportiamo anche InfluxDB, Graphite, OpenTSDB.<\/p>\n<p><\/p>\n<p>Possiamo \"scrivere\" in noi, cio\u00e8 possiamo trasferire dati vecchi. <\/p>\n<p><\/p>\n<p>Inoltre, lavoriamo perfettamente con Prometheus e Grafana, ovvero supportiamo il motore PromQL. In Grafana puoi semplicemente cambiare l'endpoint di Prometheus con VictoriaMetrics e tutte le tue dashboard continueranno a funzionare come prima. <\/p>\n<p><\/p>\n<p>Ma puoi anche utilizzare le funzionalit\u00e0 aggiuntive che offre VictoriaMetrics.<\/p>\n<p><\/p>\n<p>Passiamo rapidamente attraverso le funzioni che abbiamo aggiunto.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78e9c0ce91fad48ab859fc2cf06a0689.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ometti il parametro dell'intervallo \u2013 puoi saltare i parametri dell'intervallo in Grafana. Quando non vuoi ottenere grafici strani durante lo zoom in\/out nel pannello, \u00e8 consigliabile utilizzare la variabile <code>$__interval<\/code>. Questa \u00e8 una variabile interna di Grafana e sceglie automaticamente l'intervallo dei dati. E VictoriaMetrics pu\u00f2 capire da sola quale dovrebbe essere questo intervallo. Non \u00e8 necessario aggiornare tutte le tue query. Sar\u00e0 molto pi\u00f9 semplice.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4094c7b8b5e6eef6134b5aa344ef7409.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La seconda funzione \u00e8 il riferimento all'intervallo. Puoi utilizzare questo intervallo nelle tue espressioni. Puoi moltiplicarlo, dividerlo, passarci sopra o fare riferimento ad esso.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/967ca6166e588987bd69c1e1953dca31.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Infine, la famiglia delle funzioni rollup. Le funzioni rollup trasformano qualsiasi tua serie temporale in tre serie temporali separate: min, max e avg. Trovo che sia molto utile perch\u00e9 a volte pu\u00f2 mostrare fuori norma (anomalia) e imprecisioni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d5ff7d6f6ae8f7550434a3dbbca09b20.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E se stai semplicemente utilizzando irate o rate, probabilmente potresti perdere alcuni casi in cui la serie temporale si comporta in modo diverso da quanto previsto. Con questa funzione \u00e8 molto pi\u00f9 semplice vedere, ad esempio, che il max \u00e8 molto superiore all'avg.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poi c'\u00e8 la variabile default. Default significa quale valore dobbiamo visualizzare in Grafana se non abbiamo una serie temporale in quel momento. Quando succede? Supponiamo che tu stia esportando una certa metrica sugli errori. E hai un'app cos\u00ec fantastica che quando hai avviato, non hai avuto errori e nemmeno errori nei successivi tre ore o persino un giorno. E hai dei dashboard che mostrano il rapporto tra successi ed errori. E ti mostreranno nulla, perch\u00e9 non hai la metrica degli errori. In default puoi specificare qualsiasi valore.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/cb4e23199194006186ac6907d2335cf6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Keep_last_Value \u2013 mantiene l'ultimo valore della metrica se scompare. Se Prometheus non riesce a trovarla durante il prossimo scraping per 5 minuti, qui ricorderemo il suo ultimo valore e i tuoi grafici non si romperanno di nuovo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ca202f8a70f071cbd85b33b98cd28bb5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Scrape_interval \u2013 mostra con che frequenza Prometheus raccoglie i dati sulla tua metrica, a quale frequenza. Qui puoi vedere ad esempio un'interruzione. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLa sostituzione dell'etichetta \u00e8 una funzione popolare. Tuttavia, riteniamo che sia un po' complicata, poich\u00e9 richiede argomenti interi. Devi non solo ricordare 5 argomenti, ma anche tener conto della loro sequenza.<br \/>\n<img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPerch\u00e9 non rendere le cose pi\u00f9 semplici? Cio\u00e8, suddividerle in funzioni pi\u00f9 piccole con una sintassi chiara.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/e928549205018e7405cc2a81970a8514.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E ora arriva la parte interessante. Perch\u00e9 consideriamo questa una PromQL estesa? Perch\u00e9 supportiamo le Common Table Expressions. Puoi scansionare il codice QR (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL\">https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL<\/a><\/noindex>), visualizzare i collegamenti con esempi e un playground dove puoi eseguire query direttamente in VictoriaMetrics senza doverla installare, semplicemente nel browser.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E cos'\u00e8 questo? Quella query sopra \u00e8 una query abbastanza comune. Penso che in qualsiasi dashboard di molte aziende tu utilizzi lo stesso filtro per tutto. Di solito \u00e8 cos\u00ec. Ma quando hai bisogno di aggiungere un nuovo filtro, devi aggiornare ogni pannello o scaricare la dashboard, aprirla in JSON, fare find replace, il che richiede tempo. Perch\u00e9 non memorizzare questo valore in una variabile e riutilizzarlo? Questo, a mio avviso, sembra molto pi\u00f9 semplice e chiaro.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ad esempio, quando ho bisogno di aggiornare i filtri in Grafana in tutte le query, e il dashboard pu\u00f2 essere molto grande o addirittura averne pi\u00f9 di uno. Come posso risolvere questo problema in Grafana?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Affronta questo problema in questo modo: creo un commonFilter e in esso definisco questo filtro, poi lo riutilizzo nelle query. Ma se fai cos\u00ec adesso, non funzioner\u00e0, perch\u00e9 Grafana non ti consente di utilizzare variabili all'interno delle variabili delle query. \u00c8 un po' strano.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/0b7a40976cb3eeda370518a242f78708.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E quindi ho realizzato una soluzione che permette di farlo. Se ti interessa o vuoi questa funzionalit\u00e0, sostienila o metti un dislike se non ti piace questa idea. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grafana\/grafana\/pull\/16694\">https:\/\/github.com\/grafana\/grafana\/pull\/16694<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vediamo ora PromQL esteso. Qui definiamo non solo una variabile, ma anche un'intera funzione. La chiamiamo ru (utilizzo delle risorse). Questa funzione riceve le risorse disponibili, un limite per le risorse e un filtro. Il sintassi \u00e8 piuttosto semplice. \u00c8 molto facile utilizzare questa funzione e calcolare la percentuale di memoria libera. Cio\u00e8, quanti MB abbiamo a disposizione, qual \u00e8 il limite e come filtrare. Risulterebbe molto pi\u00f9 comodo se scrivessi tutto questo riutilizzando gli stessi filtri, altrimenti diventa una query molto complessa.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4ca66e18ac665fe1038493709530b82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ed ecco un esempio di una query molto complessa. Proviene dal dashboard ufficiale di NodeExporter per Grafana. Ma io fatico a capire cosa stia succedendo. Cio\u00e8, certo, capisco se ci faccio attenzione, ma il numero di parentesi pu\u00f2 subito scoraggiare dal cercare di capire cosa stia accadendo. Perch\u00e9 non semplificarla e renderla pi\u00f9 comprensibile?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/50e01e7f0c1d03965b028266130413f0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ad esempio, potremmo farlo in questo modo, evidenziando i punti o le parti significative in variabili. E poi eseguire i nostri calcoli di base. Questo assomiglia di pi\u00f9 alla programmazione ed \u00e8 ci\u00f2 che vorrei vedere in futuro in Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/81f957d89f97ebf686abdf969982d3ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ecco un secondo esempio di come possiamo semplificare ulteriormente, se avessimo gi\u00e0 questa funzione ru, che \u00e8 gi\u00e0 presente direttamente in VictoriaMetrics. E quindi basta passare il valore memorizzato nella cache che hai dichiarato nel CTE.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/415302741e14232228353db6ec57a2e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ho gi\u00e0 parlato di quanto sia importante utilizzare il giusto linguaggio di programmazione. E, probabilmente, in ogni azienda in Grafana succede qualcosa di diverso. E, probabilmente, dai anche accesso a Grafana ai tuoi sviluppatori, e gli sviluppatori fanno qualcosa di diverso. E tutti lo fanno in modi differenti. Vorremmo che fosse pi\u00f9 uniforme, cio\u00e8 ridurre tutto a uno standard comune.<\/p>\n<p><\/p>\n<p>Supponiamo che tu abbia non solo ingegneri di sistema, forse hai anche esperti, devops o SRE. Potresti avere esperti che sanno cos'\u00e8 il monitoraggio, sanno cos'\u00e8 Grafana, cio\u00e8 lavorano con questo da anni e sanno esattamente come fare nel modo giusto. E lo hanno gi\u00e0 scritto 100 volte e l'hanno spiegato a tutti, ma per qualche motivo nessuno ascolta.<\/p>\n<p><\/p>\n<p>E se potessero inserire direttamente queste conoscenze in Grafana, in modo che altri utenti potessero riutilizzare le funzionalit\u00e0? E se fosse necessario calcolare la percentuale di memoria libera, basterebbe applicare la funzione. E se i creatori degli exporter, insieme al loro prodotto, fornissero anche un insieme di funzioni su come lavorare con le loro metriche, perch\u00e9 sanno esattamente quali sono queste metriche e come calcolarle correttamente?<\/p>\n<p><\/p>\n<p>In realt\u00e0, questo non esiste. Questo l'ho fatto io stesso. \u00c8 il supporto delle librerie in Grafana. Supponiamo che i ragazzi che hanno creato NodeExporter abbiano fatto quanto ho descritto, e abbiano anche fornito un insieme di funzioni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cio\u00e8, appare pi\u00f9 o meno cos\u00ec. Colleghi questa libreria a Grafana, entri in modifica e qui \u00e8 scritto molto semplicemente in JSON come lavorare con questa metrica. Cio\u00e8, un certo insieme di funzioni, loro descrizioni e in cosa si sviluppano.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78a85dd219a421757807be895c173a39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Penso che questo potrebbe essere utile, perch\u00e9 cos\u00ec in Grafana scrivereste semplicemente in questo modo. E Grafana vi \"dice\" che c'\u00e8 una certa funzione da una certa libreria \u2013 usiamola. Penso che sarebbe fantastico.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un po' su VictoriaMetrics. Facciamo molte cose interessanti. Leggi i nostri articoli sulla compressione, sulle nostre competizioni con altre applicazioni di time series, sulla nostra spiegazione su come lavorare con PromQL, perch\u00e9 ci sono ancora molti principianti, e anche sulla scalabilit\u00e0 verticale e sulla nostra sfida con Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/562829a25ee6131c7eaed8c561c6927c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Domande:<\/p>\n<p><\/p>\n<p><em>Inizio la mia domanda con una semplice storia della vita reale. Quando ho iniziato a usare Grafana, ho scritto una query molto convincente di cinque righe. Ne \u00e8 risultato un grafico davvero interessante. Questo grafico era quasi pronto per essere messo in produzione. Ma, a un'attenta analisi, si \u00e8 scoperto che mostrava assolute sciocchezze, del tutto scollegate dalla realt\u00e0, anche se i numeri rientravano nell'intervallo che ci aspettavamo. Ecco la mia domanda. Abbiamo delle librerie, abbiamo delle funzioni, ma come scriviamo i test per Grafana? Hai scritto una query complessa, dalla quale dipende una decisione aziendale: ordinare un vero container di server o no. E come possiamo sapere che la funzione che disegna il grafico assomiglia alla verit\u00e0? Grazie.<\/em><\/p>\n<p><\/p>\n<p>Grazie per la domanda. Ci sono due parti. Prima di tutto, mi sembra, sulla base della mia esperienza, che la maggior parte degli utenti, quando osserva i propri grafici, non capisca cosa stiano mostrando. In qualche modo, le persone sono molto abili nel trovare giustificazioni per qualsiasi anomalia che appare nei grafici, anche quando si tratta di un errore all'interno della funzione. La seconda parte \u00e8 che penso che usare questo tipo di funzioni sarebbe molto pi\u00f9 utile per risolvere il vostro problema, invece che ogni vostro sviluppatore faccia il proprio capacity planning e commetta errori con qualche probabilit\u00e0.<\/p>\n<p><\/p>\n<p><em>Come verificare?<\/em><\/p>\n<p><\/p>\n<p>Come verificare? Probabilmente, non si pu\u00f2. <\/p>\n<p><\/p>\n<p><em>Sotto forma di test in Grafana.<\/em><\/p>\n<p><\/p>\n<p>Cosa c'entra Grafana? Grafana trasmette questa richiesta direttamente nel DataSource.<\/p>\n<p><\/p>\n<p><em>Aggiungendo un po' nei parametri.<\/em><\/p>\n<p><\/p>\n<p>No, in Grafana non aggiungono nulla. Possono esserci parametri GET, come ad esempio step. Non viene specificato esplicitamente, ma puoi sovrascriverlo o meno, ma viene aggiunto automaticamente. Non puoi scrivere test qui. Penso che non dovresti fare affidamento su Grafana come fonte di verit\u00e0.<\/p>\n<p><\/p>\n<p><em>Grazie per la relazione! Grazie per la compressione! Hai menzionato il mapping delle variabili nel grafico, dove in Grafana non \u00e8 possibile usare una variabile all'interno di un'altra. Capisci di cosa parlo?<\/em><\/p>\n<p><\/p>\n<p>S\u00ec.<\/p>\n<p><\/p>\n<p><em>\u00c8 stata inizialmente una seccatura quando volevo impostare gli avvisi in Grafana. E l\u00ec devi impostare un avviso separato per ogni host. Questa cosa che hai fatto, funziona per gli avvisi in Grafana?<\/em><\/p>\n<p><\/p>\n<p>Se Grafana non gestisce le variabili in un modo diverso, allora s\u00ec, funzioner\u00e0. Ma il mio consiglio \u00e8 di non usare affatto gli avvisi in Grafana, \u00e8 meglio utilizzare alertmanager.<\/p>\n<p><\/p>\n<p><em>S\u00ec, lo utilizzo, ma mi \u00e8 sembrato pi\u00f9 facile configurarlo in Grafana, comunque grazie per il consiglio!<\/em><\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/494034\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot; \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u043e \u043c\u043d\u0435. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u043e\u043c\u0430\u043d. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 CloudFlare, \u0436\u0438\u0432\u0443 \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u044f \u043c\u0435\u0439\u0442\u0435\u043d\u0435\u0440 VictoriaMetrics. \u0418 \u044f \u0430\u0432\u0442\u043e\u0440 ClickHouse \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Grafana \u0438 ClickHouse-proxy \u2013 \u044d\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f ClickHouse. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u00bb \u0438 \u0432 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":75586,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-75585","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot; \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u043e \u043c\u043d\u0435. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u043e\u043c\u0430\u043d. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 CloudFlare, \u0436\u0438\u0432\u0443 \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u044f \u043c\u0435\u0439\u0442\u0435\u043d\u0435\u0440 VictoriaMetrics. \u0418 \u044f \u0430\u0432\u0442\u043e\u0440 ClickHouse \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Grafana \u0438 ClickHouse-proxy \u2013 \u044d\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f ClickHouse. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u00bb \u0438 \u0432 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u00abExtendedPromQL\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot; \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u043e \u043c\u043d\u0435. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u043e\u043c\u0430\u043d. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 CloudFlare, \u0436\u0438\u0432\u0443 \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u044f \u043c\u0435\u0439\u0442\u0435\u043d\u0435\u0440 VictoriaMetrics. \u0418 \u044f \u0430\u0432\u0442\u043e\u0440 ClickHouse \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Grafana \u0438 ClickHouse-proxy \u2013 \u044d\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f ClickHouse. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u00bb \u0438 \u0432 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-27T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-27T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00abExtendedPromQL\u00bb \u2014 trascrizione della relazione di Roman Khavronenko | ProHoster","description":"Ti propongo di dare un'occhiata alla trascrizione della relazione di Roman Khavronenko \"ExtendedPromQL\" Breve introduzione. Mi chiamo Roman. Lavoro in CloudFlare, vivo a Londra. Ma sono anche mantenitore di VictoriaMetrics. E sono l'autore del plugin ClickHouse per Grafana e del ClickHouse-proxy \u2013 \u00e8 un piccolo proxy per ClickHouse. Iniziamo con la prima parte, che si chiama \"Difficolt\u00e0 di traduzione\" e in essa parler\u00f2 di","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u00abExtendedPromQL\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0420\u043e\u043c\u0430\u043d\u0430 \u0425\u0430\u0432\u0440\u043e\u043d\u0435\u043d\u043a\u043e &quot;ExtendedPromQL&quot; \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u043e \u043c\u043d\u0435. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u043e\u043c\u0430\u043d. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 CloudFlare, \u0436\u0438\u0432\u0443 \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u044f \u043c\u0435\u0439\u0442\u0435\u043d\u0435\u0440 VictoriaMetrics. \u0418 \u044f \u0430\u0432\u0442\u043e\u0440 ClickHouse \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Grafana \u0438 ClickHouse-proxy \u2013 \u044d\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f ClickHouse. \u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u00bb \u0438 \u0432 \u043d\u0435\u0439 \u044f \u0431\u0443\u0434\u0443","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-27T05:42:28+00:00","article:modified_time":"2020-03-27T05:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"75585","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:54:47","updated":"2022-09-28 07:46:53"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/75585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=75585"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/75585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/75586"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=75585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=75585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=75585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}