"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Aku saranake sampeyan maca transkrip laporan Roman Khavronenko "ExtendedPromQL"

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Sedhela babagan aku. Jenengku Roman. Aku kerja ing CloudFlare lan manggon ing London. Nanging aku uga njaga VictoriaMetrics.
Lan aku penulis Plugin ClickHouse kanggo Grafana lan ClickHouse-proxy minangka proxy cilik kanggo ClickHouse.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Kita bakal miwiti karo bagean pisanan, sing diarani "Kesulitan Terjemahan" lan ing kana aku bakal ngomong babagan kasunyatan manawa basa apa wae utawa mung basa komunikasi iku penting banget. Amarga iki carane sampeyan ngirim pikirane kanggo wong liya utawa sistem, carane ngramu panjalukan. Wong-wong ing Internet mbantah babagan basa sing luwih apik - Jawa utawa liyane. Kanggo aku, aku mutusake yen aku kudu milih miturut tugas, amarga kabeh iki spesifik.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Ayo diwiwiti saka wiwitan. Apa PromQL? PromQL minangka Prometheus Query Language. Iki carane nggawe pitakon ing Prometheus kanggo entuk data seri wektu.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Apa data seri wektu? Secara harfiah, iki telung paramèter.

Iki minangka:

  • Apa sing kita deleng?
  • Nalika kita ndeleng.
  • Lan nilai apa sing dituduhake?

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Yen sampeyan ndeleng grafik iki (grafik iki saka telponku sing nuduhake stats langkahku), bisa kanthi cepet njawab pitakonan kasebut.

Kita ndeleng langkah-langkah kasebut. Kita ndeleng makna lan kita ndeleng wektu nalika ndeleng. Yaiku, ndeleng diagram iki, sampeyan bisa kanthi gampang ngomong yen dina Minggu aku mlaku udakara 15 langkah. Iki minangka data seri wektu.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Saiki ayo "dibagi" (ngowahi) dadi model data liyane ing wangun tabel. Ing kene kita uga duwe apa sing kita deleng. Ing kene aku nambahake data tambahan sing sethithik, sing bakal kita sebut meta-data, yaiku dudu aku sing ngliwati iki, nanging wong loro, contone, Jay lan Silent Bob. Iki sing kita deleng; apa sing dituduhake lan kapan nuduhake nilai kasebut.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko
Saiki ayo nyoba nyimpen kabeh data kasebut ing basis data. Contone, aku njupuk sintaks ClickHouse. Lan ing kene kita nggawe tabel siji sing diarani "Langkah", yaiku apa sing kita deleng. Ana wektu nalika kita ndeleng; apa sing dituduhake lan sawetara data meta ing ngendi kita bakal nyimpen sapa: Jay lan Silent Bob.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan kanggo nyoba kanggo nggambarake kabeh iki, kita bakal nggunakake Grafana amarga, pisanan kabeh, iku ayu.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Kita uga bakal nggunakake plugin iki. Ana rong alasan kanggo iki. Kapisan amarga aku nulis. Lan aku ngerti persis carane angel kanggo narik data seri wektu saka ClickHouse kanggo nuduhake ing Grafana.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Kita bakal nampilake ing Panel Graph. Iki minangka panel paling populer ing Grafana, sing nuduhake katergantungan nilai ing wektu, mula kita mung butuh rong paramèter.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko
Ayo nulis pitakon sing paling gampang - carane nuduhake statistik langkah ing Grafana, nyimpen data iki ing ClickHouse, ing tabel sing digawe. Lan kita nulis panjalukan prasaja iki. Kita milih saka langkah. Kita milih nilai lan pilih wektu nilai kasebut, yaiku telung paramèter sing padha karo sing diomongake.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan minangka asil, kita bakal entuk grafik kaya iki. Sapa sing ngerti kenapa dheweke aneh banget?

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Bener, kita kudu ngurutake wektu.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan ing pungkasan kita bakal entuk jadwal sing luwih apik, nanging isih aneh. Sapa sing ngerti kenapa? Sing tengen, ana loro peserta, lan kita ing Grafana menehi loro seri wektu, amarga yen katon ing model data maneh, banjur saben seri wektu iku kombinasi unik saka jeneng lan kabeh label tombol-nilai.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Mulane, kita kudu milih wong tartamtu. Kita milih Jay.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan kita nggambar maneh. Saiki grafik katon kaya bebener. Saiki iki jadwal normal lan kabeh mlaku kanthi apik.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan sampeyan bisa uga ngerti carane nindakake kira-kira padha, nanging ing Prometheus liwat PromQL. Mergo iki. Luwih prasaja. Lan ayo dibongkar kabeh. Kita njupuk Langkah. Lan saringan dening Jay. Kita ora nemtokake manawa kita kudu entuk nilai lan ora milih wektu.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Saiki ayo nyoba ngetung kacepetan gerakan Jay utawa Silent Bob. Ing ClickHouse, kita kudu nindakake runningDifference, yaiku ngetung prabédan antarane pasangan poin lan dibagi miturut wektu kanggo entuk kacepetan sing tepat. Panjaluk kasebut bakal katon kaya iki.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan bakal nuduhake kira-kira nilai kasebut, yaiku Silent Bob utawa Jay njupuk kira-kira 1,8 langkah per detik.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan ing Prometheus sampeyan uga ngerti carane nindakake iki. Luwih gampang tinimbang sadurunge.

"ExtendedPromQL" - transkrip laporan dening Roman KhavronenkoLan kanggo nggawe iku uga gampang kanggo nindakake ing Grafana, Aku nambah pambungkus iki, kang katon banget padha PromQL. Iki diarani Rate Macros utawa apa wae sing pengin diarani. Ing Grafana sampeyan mung nulis "tarif", nanging ing endi wae ing jero, dadi panjaluk gedhe iki. Lan sampeyan ora malah kudu katon ing, iku ana nang endi wae, nanging sampeyan nyimpen akèh wektu, amarga nulis query SQL ageng kuwi tansah larang. Sampeyan bisa kanthi gampang nggawe kesalahan lan banjur ora ngerti apa sing kedadeyan nganti suwe.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan iki minangka panyuwunan sing ora cocog karo siji slide lan aku kudu dibagi dadi rong kolom. Iki uga panjalukan ing ClickHouse, kang ndadekake tingkat padha, nanging kanggo loro seri wektu: Silent Bob lan Jay, supaya kita duwe rong seri wektu ing panel. Lan iki wis angel banget, miturut pendapatku.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan miturut Prometheus bakal dadi jumlah (tingkat). Kanggo ClickHouse, aku nggawe makro kapisah sing diarani RateColumns, sing katon kaya pitakon ing Prometheus.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Kita ndeleng lan kayane PromQL pancen keren, nanging mesthi ana watesan.

Iki minangka:

  • PILIHAN winates.
  • Borderline GABUNGAN.
  • Ora duwe dhukungan.

Lan yen sampeyan wis kerjo karo iku kanggo dangu, banjur ngerti sing kadhangkala iku angel banget kanggo nindakake soko ing PromQL, nanging ing SQL sampeyan bisa nindakake meh kabeh, amarga kabeh opsi iki kita mung ngomong bab bisa rampung ing SQL. . Nanging bakal trep kanggo nggunakake? Lan iki nggawe aku mikir yen basa sing paling kuat bisa uga ora paling trep.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Mulane, kadhangkala sampeyan kudu milih basa kanggo tugas kasebut. Kaya Batman nglawan Superman. Cetha yen Superman luwih kuwat, nanging Batman bisa ngalahake dheweke amarga dheweke luwih praktis lan ngerti persis apa sing ditindakake.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan bagean sabanjure yaiku Extending PromQL.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Sawise maneh babagan VictoriaMetrics. Apa iku VictoriaMetrics? Iki minangka basis data seri wektu, ana ing OpenSource, kita nyebarake versi siji lan kluster. Miturut pathokan kita, luwih cepet tinimbang apa wae sing ana ing pasar saiki lan kompresi padha, yaiku wong nyata nglaporake kompresi kira-kira 0,4 bita saben titik, dene Prometheus yaiku 1,2-1,4.

Kita ndhukung luwih saka Prometheus. Kita ndhukung InfluxDB, Graphite, OpenTSDB.

Sampeyan bisa "nulis" kanggo kita, yaiku, sampeyan bisa nransfer data lawas.

Lan kita uga bisa sampurna karo Prometheus lan Grafana, IE ndhukung engine PromQL. Lan ing Grafana sampeyan mung bisa ngganti titik pungkasan Prometheus menyang VictoriaMetrics lan kabeh dashboard sampeyan bakal bisa digunakake.

Nanging sampeyan uga bisa nggunakake fitur tambahan sing diwenehake VictoriaMetrics.

Kita bakal cepet njelajah fitur sing wis ditambahake.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Ngilangi interval param - sampeyan bisa ngilangi parameter interval ing Grafana. Yen sampeyan ora pengin entuk grafik aneh nalika nggedhekake / metu ing panel, disaranake nggunakake variabel $__interval. Iki minangka owah-owahan Grafana internal lan milih sawetara data dhewe. Lan VictoriaMetrics dhewe bisa ngerti apa kisaran iki. Lan sampeyan ora perlu nganyari kabeh panjaluk sampeyan. Iku bakal luwih gampang.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Fungsi kapindho yaiku referensi interval. Sampeyan bisa nggunakake interval iki ing ekspresi. Sampeyan bisa multiply, dibagi, transfer, deleng.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Sabanjure yaiku kulawarga fungsi rollup. Fungsi Rollup ngowahi samubarang seri wektu dadi telung seri wektu sing kapisah. Iki minangka min, maks lan rata-rata. Aku nemokake iki trep banget amarga kadhangkala bisa nuduhake sawetara outlier lan ora akurat.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan yen sampeyan mung nesu utawa menehi rating, mula sampeyan bakal kantun sawetara kasus nalika seri wektu ora tumindak kaya sing dikarepake. Kanthi fungsi iki luwih gampang kanggo ndeleng, ayo ngomong sing max banget saka avg.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Sabanjure yaiku variabel standar. Default - iki tegese apa nilai sing kudu digambar ing Grafana yen kita ora duwe seri wektu saiki. Kapan iki kedadeyan? Contone, sampeyan ngekspor sawetara metrik kesalahan. Lan sampeyan duwe aplikasi sing apik banget nalika sampeyan miwiti, sampeyan ora duwe kesalahan lan malah ora ana kesalahan sajrone telung jam sabanjure utawa malah sedina. Lan sampeyan duwe dashboard sing nuduhake hubungan saka sukses kanggo kesalahan. Lan dheweke ora bakal nuduhake apa-apa amarga sampeyan ora duwe metrik kesalahan. Lan ing gawan sampeyan bisa nemtokake apa wae.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Keep_last_Value - nyimpen nilai pungkasan metrik yen ora ana. Yen Prometheus ora nemokake ing 5 menit sawise scrape sabanjuré, ing kene kita bakal ngelingi nilai pungkasan lan denah sampeyan ora bakal break maneh.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Scrape_interval - nuduhake sepira kerepe Prometheus nglumpukake data ing metrik sampeyan, lan frekuensi apa. Kene sampeyan bisa ndeleng pass, contone,.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko
Ganti label minangka fitur sing populer. Nanging kita mikir iki rada rumit amarga mbutuhake bantahan lengkap. Lan sampeyan kudu ora mung ngelingi 5 argumen, nanging uga ngelingi urutane.
"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko
Mulane, kenapa ora nggawe luwih gampang? Yaiku, dipecah dadi fungsi cilik kanthi sintaksis sing bisa dingerteni.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan saiki bagean sing nyenengake. Napa kita mikir iki ditambahake PromQL? Amarga kita ndhukung Ekspresi Tabel Umum. Sampeyan bisa tindakake kode QR (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL), ndeleng pranala karo conto, saka dolanan, ngendi sampeyan bisa mbukak pitakon langsung ing VictoriaMetrics tanpa nginstal mung ing browser.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan apa iki? Panjaluk kasebut ing ndhuwur minangka panjaluk sing cukup populer. Aku mikir ing dashboard ing akeh perusahaan sampeyan nggunakake filter sing padha kanggo kabeh. Biasane ngono. Nanging yen sampeyan kudu nambah sawetara filter anyar, sampeyan kudu nganyari saben panel, utawa download dashboard, mbukak ing JSON, golek ngganti, kang uga mbutuhake wektu. Napa ora nyimpen nilai iki ing variabel lan gunakake maneh? Iki katon, miturut pendapatku, luwih gampang lan luwih jelas.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Contone, nalika aku kudu nganyari saringan ing Grafana ing kabeh panjalukan, lan dashboard bisa ageng utawa malah ana sawetara. Lan kepiye carane ngatasi masalah iki ing Grafana?

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Aku ngatasi masalah iki kanthi cara iki: Aku nggawe commonFilter lan nemtokake Filter iki ing, lan banjur digunakake maneh ing pitakonan. Nanging yen sampeyan nindakake saiki, ora bakal bisa amarga Grafana ora ngidini sampeyan nggunakake variabel ing variabel pitakon. Lan rada aneh.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Dadi aku nggawe pilihan sing ngidini sampeyan nindakake iki. Lan yen sampeyan kasengsem utawa pengin fitur kasebut, banjur dukung utawa ora seneng yen sampeyan ora seneng karo ide iki. https://github.com/grafana/grafana/pull/16694

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Liyane babagan PromQL ditambahi. Ing kene kita nemtokake ora mung variabel, nanging kabeh fungsi. Lan kita nyebut ru (panggunaan sumber daya). Lan fungsi iki nampa free sumber daya, watesan sumber lan Filter. Sintaks katon prasaja. Lan iku gampang banget kanggo nggunakake fungsi iki lan ngetung persentasi saka free memori kita duwe. Sing, pinten memori kita duwe, apa watesan lan carane nyaring. Katon luwih trep yen sampeyan nulis kabeh, nggunakake maneh saringan sing padha, amarga bakal dadi pitakon gedhe lan gedhe.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Lan iki minangka conto panyuwunan sing gedhe lan gedhe. Iku saka dashboard NodeExporter resmi kanggo Grafana. Nanging aku meh ora ngerti apa sing kedadeyan ing kene. Sing, mesthi, aku ngerti yen sampeyan ndeleng kanthi teliti, nanging jumlah kurung bisa langsung nyuda motivasi kanggo ngerti apa sing kedadeyan ing kene. Lan kenapa ora nggawe luwih gampang lan luwih jelas?

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Contone, kaya iki, misahake barang utawa bagean sing penting dadi variabel. Banjur nindakake matematika dhasar. Iki wis luwih kaya pemrograman, iki sing dakkarepake ing mangsa ngarep ing Grafana.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Punika conto kapindho carane kita bisa nggawe iki luwih gampang yen kita wis duwe fungsi ru iki, lan wis ana langsung ing VictoriaMetrics. Lan sampeyan mung ngliwati nilai cache sing diumumake ing CTE.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Aku wis ngomong babagan pentinge nggunakake basa pamrograman sing bener. Lan, mesthine, saben perusahaan ing Grafana duwe kedadeyan sing beda. Lan sampeyan mbokmenawa uga menehi akses menyang Grafana kanggo pangembang, lan pangembang nindakake dhewe. Lan kabeh padha nindakake kanthi cara sing beda. Nanging aku wanted kanggo dadi piye wae padha, sing, kanggo ngurangi menyang standar umum.

Ayo dadi ngomong sampeyan ora duwe mung engineers sistem, Mungkin sampeyan malah duwe ahli, devops utawa SRE. Mungkin sampeyan duwe ahli sing ngerti apa pemantauan, sing ngerti apa Grafana, yaiku, dheweke wis nggarap pirang-pirang taun lan ngerti persis carane nindakake kanthi bener. Lan dheweke wis nulis iki kaping 100 lan nerangake kabeh, nanging ora ana sing ngrungokake.

Apa yen dheweke bisa nyelehake kawruh iki langsung menyang Grafana supaya pangguna liyane bisa nggunakake maneh fitur kasebut? Lan yen padha perlu kanggo ngetung persentasi saka free memori, padha mung bakal aplikasi fungsi. Apa yen pangripta eksportir, bebarengan karo produke, uga nyedhiyakake seperangkat fungsi babagan cara nggarap metrik, amarga padha ngerti persis apa metrik kasebut lan cara ngetung kanthi bener?

Iki pancene ora ana. Iki sing dak lakoni dhewe. Iki minangka dhukungan perpustakaan ing Grafana. Ayo wong sing nggawe NodeExporter nindakake apa sing dakkandhakake. Lan padha uga nyedhiyakake set fungsi.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Sing, katon kaya iki. Sampeyan nyambungake perpustakaan iki menyang Grafana, sampeyan pindhah menyang nyunting lan ditulis kanthi gampang ing JSON carane nggarap metrik iki. Yaiku, sawetara fungsi, deskripsi lan apa sing dadi.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Aku mikir iki bisa migunani, amarga ing Grafana sampeyan bakal nulis kaya ngono. Lan Grafana "nyritakake" manawa ana fungsi kasebut saka perpustakaan kasebut - ayo gunakake. Aku sing bakal banget kelangan.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

A sethitik babagan VictoriaMetrics. Kita nindakake akeh perkara sing menarik. Waca artikel babagan kompresi, babagan kompetisi karo aplikasi data seri wektu liyane, panjelasan babagan cara nggarap PromQL, amarga isih akeh pamula, uga babagan skalabilitas vertikal lan babagan konfrontasi karo Thanos.

"ExtendedPromQL" - transkrip laporan dening Roman Khavronenko

Pitakonan:

Aku bakal miwiti pitakonan karo crita urip prasaja. Nalika aku miwiti nggunakake Grafana, aku nulis pitakon sing menarik banget sing dawane 5 baris. Asil pungkasan punika grafik banget ngyakinake. Jadwal iki meh dadi produksi. Nanging nalika ditliti kanthi cetha, grafik iki nuduhake omong kosong sing ora ana hubungane karo kasunyatan, sanajan angka kasebut ana ing kisaran sing dikarepake. Lan pitakonku. Kita duwe perpustakaan, kita duwe fungsi, nanging kepiye carane nulis tes kanggo Grafana? Sampeyan wis nulis panjaluk rumit sing gumantung karo keputusan bisnis - supaya bisa ngirim wadhah server sing nyata utawa ora pesen. Lan kaya sing kita ngerteni, fungsi sing nggambar grafik iki padha karo bebener. matur nuwun.

Matur nuwun kanggo pitakonan. Ana rong bagean. Kaping pisanan, aku entuk kesan, adhedhasar pengalaman, manawa umume pangguna, nalika ndeleng grafik, ora ngerti apa sing dituduhake. Kanggo sawetara alesan, wong apik banget kanggo nggawe alesan kanggo anomali sing kedadeyan ing grafik, sanajan ana kesalahan ing sawijining fungsi. Lan bagean kapindho - misale jek yen nggunakake fungsi kasebut bakal dadi pendekatan sing luwih apik kanggo ngrampungake masalah sampeyan, tinimbang saben pangembang sampeyan nindakake perencanaan kapasitas dhewe lan nggawe kesalahan kanthi kemungkinan.

Cara mriksa?

Carane mriksa? Mbokmenawa ora.

Minangka tes ing Grafana.

Apa hubungane Grafana? Grafana nerjemahake panjalukan iki langsung menyang DataSource.

Nambahake sethithik menyang paramèter.

Ora, ora ana sing ditambahake ing Grafana. Bisa uga ana parameter GET, kayata, ucapake, langkah. Iku ora kasebut kanthi tegas, nanging sampeyan bisa ngilangi, utawa sampeyan ora bisa ngalahake, nanging ditambahake kanthi otomatis. Sampeyan ora bakal nulis tes ing kene. Aku ora mikir kita kudu ngandelake Grafana minangka sumber bebener ing kene.

Matur nuwun kanggo laporan! Thanks kanggo komprèsi! Sampeyan nyatakake pemetaan variabel ing grafik, yen ing Grafana sampeyan ora bisa nggunakake variabel ing variabel. Kowe ngerti maksudku?

Ya.

Iki wiwitane ngelu nalika aku pengin nggawe tandha ing Grafana. Lan ing kana sampeyan kudu menehi tandha kanggo saben host kanthi kapisah. Iki sing sampeyan gawe, apa bisa digunakake kanggo tandha ing Grafana?

Yen Grafana ora ngakses variabel kanthi cara sing beda, ya, bakal bisa digunakake. Nanging saranku ora nggunakake alerting ing Grafana, luwih becik sampeyan nggunakake alertmanager.

Ya, Aku nggunakake, nanging mung ketoke luwih gampang kanggo nyiyapake ing Grafana, nanging thanks kanggo saran!

Source: www.habr.com

Add a comment