{"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\/da\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","title":{"rendered":"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Jeg vil gerne pr\u00e6sentere transkriptionen af Roman Khavronenko's pr\u00e6sentation \"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=\"Afspil 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 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/54a175d9c74c90d9d313f8ff71476638.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kort om mig. Mit navn er Rom\u00e1n. Jeg arbejder hos CloudFlare, bor i London. Men jeg er ogs\u00e5 vedligeholder af VictoriaMetrics.<br \/>\nOg jeg er forfatter <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/clickhouse-grafana\">til ClickHouse-pluginet<\/a><\/noindex> for Grafana og <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse-proxy<\/a><\/noindex> \u2013 det er en lille proxy for ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/fc1aa56b144def5db9fcee844d5016f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi begynder med den f\u00f8rste del, som hedder \u00abOvers\u00e6ttelsesudfordringer\u00bb, hvor jeg vil fort\u00e6lle om, at ethvert sprog eller endda blot en kommunikationsform er meget vigtigt. For det er m\u00e5den, hvorp\u00e5 du overf\u00f8rer dine tanker til en anden person eller system, hvordan du formulerer din foresp\u00f8rgsel. Folk p\u00e5 internettet diskuterer, hvilket sprog der er bedst \u2013 Java eller et andet. For mig har jeg besluttet, at man skal v\u00e6lge ud fra opgaven, fordi alt dette er specifikt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lad os starte fra begyndelsen. Hvad er PromQL? PromQL er Prometheus Query Language. Det er, hvordan vi danner foresp\u00f8rgsler i Prometheus for at f\u00e5 tidsserie data, tidsr\u00e6kker.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/56b1ef4cc04defdffeea8b2666fdc354.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad er tidsserie data? Bogstaveligt talt er det tre parametre. <\/p>\n<p><\/p>\n<p>Det er:<\/p>\n<p><\/p>\n<ul>\n<li>Hvad vi ser p\u00e5. <\/li>\n<li>Hvorn\u00e5r vi ser p\u00e5 det.<\/li>\n<li>Og hvilken v\u00e6rdi det viser. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/358a193e889204d28debe1b74b93df3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvis vi ser p\u00e5 denne graf (denne graf er fra min telefon, som viser statistikken for mine skridt), kan vi hurtigt besvare disse sp\u00f8rgsm\u00e5l. <\/p>\n<p><\/p>\n<p>Vi ser p\u00e5 skridt. Vi ser v\u00e6rdien og vi ser tidspunktet, hvor vi ser p\u00e5 det. Alts\u00e5, ved at se p\u00e5 denne graf kan man let sige, at jeg gik omkring 15.000 skridt om s\u00f8ndagen. Det er tidsserie data. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lad os nu \"opdele\" (omdanne) dem til en anden datamodel i form af en tabel. Her har vi ogs\u00e5 det, vi ser p\u00e5. Jeg har tilf\u00f8jet nogle ekstra data, som vi vil kalde metadata, dvs. det var ikke mig, men to personer, lad os sige, Jay og Silent Bob. Dette er hvad vi ser; hvad det viser, og hvorn\u00e5r det viser denne v\u00e6rdi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLad os nu fors\u00f8ge at gemme alle disse data i en database. For eksemplet har jeg taget ClickHouse-syntax. Og her opretter vi en tabel, der hedder \u00abSteps\u00bb, dvs. det, vi ser p\u00e5. Her er tidspunktet, hvor vi ser p\u00e5 det; hvad det viser og nogle metadata, hvor vi opbevarer, hvem det er: Jay og Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/bd01f9dc0b29d34aacbb8f012710a94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og for at fors\u00f8ge at visualisere alt dette, vil vi bruge Grafana, fordi det for det f\u00f8rste er flot.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/9f573241e9ae32e31d6d0b879115970b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi vil ogs\u00e5 bruge denne plugin. Der er to grunde til det. Den f\u00f8rste er, at jeg har skrevet den. Og jeg ved pr\u00e6cist, hvor sv\u00e6rt det er at tr\u00e6kke tidsseriedata ud af ClickHouse for at vise det i Grafana. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/29f2d72f9995afb54b23bb7b4230b840.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi vil vise det i Graph Panel. Det er den mest popul\u00e6re panel i Grafana, der viser afh\u00e6ngigheden af v\u00e6rdien over tid, s\u00e5 vi har kun brug for to parametre.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLad os skrive den enkleste foresp\u00f8rgsel \u2013 hvordan man viser skridtt\u00e6lling i Grafana, mens vi gemmer disse data i ClickHouse i den tabel, vi har oprettet. Og vi skriver s\u00e5dan en simpel foresp\u00f8rgsel. Vi v\u00e6lger fra skridt. Vi v\u00e6lger v\u00e6rdien og v\u00e6lger tidspunktet for disse v\u00e6rdier, dvs. de samme tre parametre, som vi talte om.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/ad7895105050178de5bc8a154da7e6e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og resultatet bliver s\u00e5dan et diagram. Hvem ved, hvorfor det er s\u00e5 m\u00e6rkeligt?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Korrekt, det skal sorteres efter tid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og i sidste ende f\u00e5r vi et lidt bedre, men stadig m\u00e6rkeligt diagram. Hvem ved hvorfor? Korrekt, der er to deltagere, og vi i Grafana leverer to tidsserier, for hvis vi ser p\u00e5 datamodellen igen, s\u00e5 er hver tidsserie en unik kombination af navn og alle n\u00f8gle-v\u00e6rdier labels.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/f19bf1a9f43ae8de22af6bf7b494902f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derfor skal vi v\u00e6lge en specifik person. Vi v\u00e6lger Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/b6a714d5d6ce4d4b27634da9414aa6f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og tegner igen. Nu ligner grafen sandheden. Nu er det en normal graf, og alt fungerer godt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/2a93b4cd548239c9314c3283c5b9f488.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og m\u00e5ske ved du, hvordan man g\u00f8r omtrent det samme, men i Prometheus gennem PromQL. Omtrent s\u00e5dan her. Lidt lettere. Og s\u00e5 vil vi opdele det hele. Vi tog Skridt. Og filtrerer efter Jay. Vi angiver ikke, hvad vi skal have som v\u00e6rdi, og vi v\u00e6lger ikke tidspunkt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/5e080a1b88c156522af21bf00f3cd641.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lad os nu pr\u00f8ve at beregne Jays eller Silent Bobs hastighed. I ClickHouse skal vi lave en runningDifference, dvs. beregne forskellen mellem par af punkter og dele dem med tiden for at f\u00e5 den n\u00f8jagtige hastighed. Foresp\u00f8rgslen vil se nogenlunde s\u00e5dan her ud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og den vil vise omtrent s\u00e5dan nogle v\u00e6rdier, dvs. Silent Bob eller Jay tager cirka 1,8 skridt per sekund.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/1c328f99da6f160bdca23ab5f461bda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og i Prometheus ved du ogs\u00e5, hvordan man g\u00f8r det. Meget lettere end f\u00f8r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>For it to remain just as easy to do in Grafana, I added this wrapper that looks very similar to PromQL. It's called Rate Macros, or however you want to name it. In Grafana, you just write 'rate', but deep down, it's transformed into a large query. You don't even need to look at it; it's there somewhere, saving you a lot of time because writing such huge SQL queries is always costly. You can easily make a mistake and then spend a long time figuring out what's going on.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>And here is a query that didn't even fit on one slide, so I had to split it into two columns. This is also a ClickHouse query that does the same rate calculation, but for both time series: for Silent Bob and Jay, so we have two time series on the panel. This is already very complex, in my opinion. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For Prometheus, it will be sum(rate). For ClickHouse, I created a separate macro called RateColumns that looks like a Prometheus query.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/9743c6a4b3de4aab7cfb5bd3fd50fcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We looked at it and it seems PromQL is really cool, but it does have its limitations.<\/p>\n<p><\/p>\n<p>Det er:<\/p>\n<p><\/p>\n<ul>\n<li>Limited SELECT.<\/li>\n<li>Borderline JOIN.<\/li>\n<li>No support for HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>If you have worked with it for a long time, you know that it can be very challenging to do something in PromQL, whereas in SQL you can do almost anything, because all the options we've just discussed could have been done in SQL. But would it be convenient to use? This makes me think that the most powerful language isn't always the most comfortable one.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/ec8786f1d72a1f8652fa631cdffc9c25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So sometimes you need to choose a language suited for the tasks. It's like the battle of Batman versus Superman. Clearly, Superman is stronger, but Batman managed to defeat him because he was more practical and knew exactly what he was doing.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>And the next part is Extending PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/b806acf0e6c7c416614d3fd49004b4be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Once again about VictoriaMetrics. What is VictoriaMetrics? It's a time series database, it's open-source, and we distribute both single and cluster versions. According to our benchmarks, it's the fastest currently available on the market, and also comparable in compression, i.e., live users report a compression rate of around 0.4 bytes per point, whereas for Prometheus it's 1.2-1.4. <\/p>\n<p><\/p>\n<p>We not only support Prometheus. We support InfluxDB, Graphite, OpenTSDB.<\/p>\n<p><\/p>\n<p>Vi kan \"skrive\" i os, dvs. vi kan overf\u00f8re gamle data. <\/p>\n<p><\/p>\n<p>And we work perfectly with Prometheus and Grafana, meaning we support the PromQL engine. In Grafana, you can simply change the Prometheus endpoint to VictoriaMetrics, and all your dashboards will work as they did. <\/p>\n<p><\/p>\n<p>Men kan dog bruge ekstra funktioner, som VictoriaMetrics tilbyder.<\/p>\n<p><\/p>\n<p>Lad os hurtigt gennemg\u00e5 de funktioner, vi har tilf\u00f8jet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/78e9c0ce91fad48ab859fc2cf06a0689.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Udelad intervalparameteren \u2013 du kan springe intervalparametre over i Grafana. N\u00e5r du ikke \u00f8nsker at f\u00e5 m\u00e6rkelige grafer ved zoom-in\/zoom-out p\u00e5 panelet, anbefales det at bruge variablen <code>{$__interval}<\/code>. Dette er en intern variabel i Grafana, og den v\u00e6lger selv dataperioden. VictoriaMetrics kan ogs\u00e5 selv finde ud af, hvilken periode der skal anvendes, og du beh\u00f8ver ikke at opdatere alle dine foresp\u00f8rgsler. Det bliver meget nemmere.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/4094c7b8b5e6eef6134b5aa344ef7409.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Den anden funktion er intervalreferencen. Du kan bruge dette interval i dine udtryk. Du kan multiplicere, dividere, overf\u00f8re og referere til det.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/967ca6166e588987bd69c1e1953dca31.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dern\u00e6st er der en familie af rollup-funktioner. Rollup-funktionen transformerer enhver tidsserie til tre separate tidsserier: min, max og avg. Jeg synes, det er meget praktisk, fordi det nogle gange kan vise outliers (afvigelser) og un\u00f8jagtigheder. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/d5ff7d6f6ae8f7550434a3dbbca09b20.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og hvis du blot laver irate eller rate, kan du sandsynligvis overse nogle tilf\u00e6lde, hvor tidsserien opf\u00f8rer sig anderledes end forventet. Med denne funktion er det meget nemmere at se, eksempelvis, at max varierer betydeligt fra avg.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dern\u00e6st er der standardvariablen. Default betyder, hvilket v\u00e6rdi vi skal tegne i Grafana, hvis vi ikke har nogen tidsserier i \u00f8jeblikket. Hvorn\u00e5r sker dette? For eksempel, hvis du eksporterer en metrisk data om fejl. Og dit program er s\u00e5 godt, at du under opstart ikke har nogen fejl, og der endda ikke er fejl i de n\u00e6ste tre timer eller endda en dag. Og du har dashboards, der viser forholdet mellem success og error. De vil vise dig ingenting, fordi du ikke har nogen metric for fejl. I default kan du angive hvad som helst.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/cb4e23199194006186ac6907d2335cf6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Keep_last_Value \u2013 gemmer den sidste v\u00e6rdi af en metrisk data, hvis den forsvinder. Hvis Prometheus ikke finder den efter n\u00e6ste scraping i l\u00f8bet af 5 minutter, vil vi huske dens sidste v\u00e6rdi, og dine grafer vil ikke bryde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/ca202f8a70f071cbd85b33b98cd28bb5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Scrape_interval \u2013 viser hvor ofte Prometheus indsamler data om dine metrikker, med hvilken frekvens. Her kan du se, om der er nogen spring. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLabel replace \u2013 en popul\u00e6r funktion. Men vi mener, at den er lidt kompleks, fordi den accepterer hele argumenter. Og du skal ikke kun huske 5 argumenter, men ogs\u00e5 deres r\u00e6kkef\u00f8lge.<br \/>\n<img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nS\u00e5 hvorfor ikke g\u00f8re dem enklere? Dvs. opdele dem i mindre funktioner med en forst\u00e5elig syntaks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/e928549205018e7405cc2a81970a8514.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og nu det mest interessante. Hvorfor mener vi, at dette er udvidet PromQL? Fordi vi underst\u00f8tter Common Table Expressions. Du kan scanne QR-koden (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL\">https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL<\/a><\/noindex>), se links med eksempler, samt et playground, hvor du kan udf\u00f8re foresp\u00f8rgsler direkte i VictoriaMetrics uden installation, blot i browseren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og hvad er det? Den foresp\u00f8rgsel ovenfor er en ret popul\u00e6r foresp\u00f8rgsel. Jeg tror, at i ethvert dashboard i mange virksomheder bruger du den samme filter for alle. Normalt s\u00e5dan. Men n\u00e5r du skal tilf\u00f8je et nyt filter, skal du opdatere hver enkelt panel, eller downloade dashboardet, \u00e5bne det i JSON, g\u00f8re find og erstat, hvilket ogs\u00e5 tager tid. Hvorfor ikke gemme denne v\u00e6rdi i en variabel og genbruge den? Det virker, efter min mening, meget lettere og mere forst\u00e5eligt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For eksempel, n\u00e5r jeg skal opdatere filtre i Grafana i alle foresp\u00f8rgsler, mens dashboardet kan v\u00e6re k\u00e6mpestort, eller der kan v\u00e6re flere. Og hvordan vil jeg gerne l\u00f8se dette problem i Grafana?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jeg l\u00f8ser dette problem s\u00e5dan: jeg laver commonFilter og definerer denne filter der, og s\u00e5 genbruger jeg den i foresp\u00f8rgslerne. Men hvis du g\u00f8r det p\u00e5 samme m\u00e5de nu, vil det ikke fungere, fordi Grafana ikke tillader dig at bruge variabler inden for variablerne i foresp\u00f8rgsler. Og det er lidt underligt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/0b7a40976cb3eeda370518a242f78708.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derfor lavede jeg en mulighed, der tillader det. Og hvis du er interesseret eller \u00f8nsker s\u00e5dan en funktion, s\u00e5 st\u00f8t eller dislike, hvis du ikke kan lide ideen. <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 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lad os nu tale om udvidet PromQL. Her definerer vi ikke kun en variabel, men en helt funktion. Og vi kalder den ru (resource usage). Denne funktion tager frie ressourcer, begr\u00e6nsningen p\u00e5 ressourcen og filteret. Synes syntaksen er ganske simpel. Det er meget nemt at bruge denne funktion og beregne procentdelen af fri hukommelse hos os. Dvs. hvor meget hukommelse vi har, hvilken begr\u00e6nsning der er, og hvordan vi filtrerer. Det ville v\u00e6re meget mere bekvemt, hvis du skrev alt dette, genbrugte de samme filtre, fordi det ville blive til en stor stor foresp\u00f8rgsel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/4ca66e18ac665fe1038493709530b82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og her er et eksempel p\u00e5 en meget stor foresp\u00f8rgsel. Den er fra den officielle NodeExporter-dashboard til Grafana. Men jeg forst\u00e5r kun svagt, hvad der sker her. Jeg mener, selvf\u00f8lgelig forst\u00e5r jeg det, hvis man ser n\u00e6rmere p\u00e5 det, men antallet af parenteser kan straks neds\u00e6tte motivationen for at forst\u00e5, hvad der sker. Og hvorfor ikke g\u00f8re det enklere og mere forst\u00e5eligt?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/50e01e7f0c1d03965b028266130413f0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For eksempel p\u00e5 denne m\u00e5de, ved at fremh\u00e6ve v\u00e6sentlige ting eller dele i variabler. Og s\u00e5 udf\u00f8re sin grundl\u00e6ggende matematik. Det ligner allerede mere programmering, det er det, jeg gerne vil se i fremtiden i Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/81f957d89f97ebf686abdf969982d3ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her er et andet eksempel p\u00e5, hvordan vi kan g\u00f8re det endnu enklere, hvis vi allerede havde denne funktion ru, og den findes allerede i VictoriaMetrics. Og s\u00e5 kan du bare give det cachede v\u00e6rdi, som du har erkl\u00e6ret i CTE.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/415302741e14232228353db6ec57a2e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jeg har allerede talt om, hvor vigtigt det er at bruge det rigtige programmeringssprog. Og nok sker der nok noget unikt i hver virksomhed i Grafana. Og m\u00e5ske giver du ogs\u00e5 dine udviklere adgang til Grafana, og udviklerne laver noget unikt. Og de g\u00f8r det alle p\u00e5 forskellig vis. Jeg ville \u00f8nske, at de kunne g\u00f8re det mere ensartet og samlet i en f\u00e6lles standard.<\/p>\n<p><\/p>\n<p>Lad os sige, at du ikke bare har systemingeni\u00f8rer, m\u00e5ske har du ogs\u00e5 eksperter, devops eller SRE. M\u00e5ske har du eksperter, der ved, hvad overv\u00e5gning er, ved hvad Grafana er, det vil sige, at de har arbejdet med det i \u00e5revis, og de ved pr\u00e6cis, hvordan man g\u00f8r det rigtigt. Og de har allerede skrevet det 100 gange og forklaret det til alle, men af en eller anden grund lytter ingen.<\/p>\n<p><\/p>\n<p>Hvad nu hvis de kunne integrere disse viden direkte i Grafana, s\u00e5 andre brugere kunne genbruge funktionerne? Og hvis de skulle beregne procentdelen af ledig hukommelse, s\u00e5 ville de bare anvende funktionen. Hvad hvis skaberne af eksport\u00f8rer, sammen med deres produkt, ogs\u00e5 tilb\u00f8d et s\u00e6t funktioner til at arbejde med deres metrikker, fordi de ved pr\u00e6cis, hvad det er for metrikker, og hvordan man beregner dem korrekt?<\/p>\n<p><\/p>\n<p>Dette eksisterer faktisk ikke. Dette har jeg gjort selv. Det er underst\u00f8ttelse af biblioteker i Grafana. Lad os sige, at drengene, der lavede NodeExporter, gjorde det, jeg talte om. Og de tilb\u00f8d ogs\u00e5 et s\u00e6t funktioner. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det vil sige, det ser cirka s\u00e5dan ud. Du tilslutter dette bibliotek i Grafana, g\u00e5r ind i redigering, og her er det meget enkelt, hvordan man arbejder med denne metrik skrevet i JSON. Det er et s\u00e6t funktioner, deres beskrivelser og hvordan de pr\u00e6senteres.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/78a85dd219a421757807be895c173a39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jeg mener, det kunne v\u00e6re nyttigt, fordi s\u00e5 ville du bare skrive i Grafana. Og Grafana \"siger\" dig, at der er en s\u00e5dan funktion fra en s\u00e5dan biblioteker \u2013 lad os bruge den. Jeg synes, det ville v\u00e6re rigtig fedt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lidt om VictoriaMetrics. Vi laver mange interessante ting. L\u00e6s vores artikler om kompression, om vores konkurrencer med andre tidsserie-datakapplikationer, vores forklaring p\u00e5, hvordan man arbejder med PromQL, fordi der stadig er mange nybegyndere i dette, samt om vertikal skalerbarhed og vores modstand mod Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 fortolkning af Rom\u00e1n Khavronenkos foredrag\" src=\"\/wp-content\/uploads\/2020\/03\/562829a25ee6131c7eaed8c561c6927c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5l:<\/p>\n<p><\/p>\n<p><em>Jeg vil starte mit sp\u00f8rgsm\u00e5l med en simpel livshistorie. Da jeg f\u00f8rst begyndte at bruge Grafana, skrev jeg en meget overbevisende foresp\u00f8rgsel p\u00e5 fem linjer. Der kom en meget overbevisende graf ud af det. Denne graf var n\u00e6sten klar til produktion. Men ved n\u00e6rmere eftersyn viste det sig, at grafen viste absolut nonsens, som ikke havde noget forhold til virkeligheden, selvom tallene var inden for det omr\u00e5de, vi forventede at se. Mit sp\u00f8rgsm\u00e5l er: Vi har biblioteker, vi har funktioner, men hvordan skriver vi tests for Grafana? Du har skrevet en kompleks foresp\u00f8rgsel, som forretningsbeslutningen \u2013 at bestille en \u00e6gte servercontainer eller ikke g\u00f8re det \u2013 afh\u00e6nger af. Og hvordan ved vi, at funktionen, der tegner grafen, ligner sandheden? Tak.<\/em><\/p>\n<p><\/p>\n<p>Tak for sp\u00f8rgsm\u00e5let. Der er to dele. For det f\u00f8rste har jeg indtryk, baseret p\u00e5 min erfaring, at de fleste brugere, n\u00e5r de ser p\u00e5 deres grafer, ikke forst\u00e5r, hvad de viser. Af en eller anden grund er folk meget gode til at finde undskyldninger for enhver anomali, der opst\u00e5r p\u00e5 graferne, selvom det er en fejl i funktionen. Og den anden del \u2013 jeg mener, at brugen af s\u00e5danne funktioner ville passe meget bedre til at l\u00f8se dit problem, fremfor at hver af dine udviklere laver deres egen kapacitetsplanl\u00e6gning og er forkerte med en vis sandsynlighed.<\/p>\n<p><\/p>\n<p><em>Hvordan kan man teste?<\/em><\/p>\n<p><\/p>\n<p>Hvordan kan man teste? M\u00e5ske ikke muligt. <\/p>\n<p><\/p>\n<p><em>I form af en test i Grafana.<\/em><\/p>\n<p><\/p>\n<p>Hvad har Grafana med det at g\u00f8re? Grafana transmitterer denne foresp\u00f8rgsel direkte til datakilden.<\/p>\n<p><\/p>\n<p><em>Ved at tilf\u00f8je lidt i parametrene.<\/em><\/p>\n<p><\/p>\n<p>Nej, de tilf\u00f8jer ikke noget i Grafana. Der kan v\u00e6re GET-parametre, som f.eks. step. Det er ikke tydeligt angivet, men du kan overskrive det, du kan v\u00e6lge ikke at overskrive det, men det tilf\u00f8jes automatisk. Du skriver ikke tests her. Jeg mener, at man ikke b\u00f8r stole p\u00e5 Grafana som en sandhedskilde.<\/p>\n<p><\/p>\n<p><em>Tak for pr\u00e6sentationen! Tak for kompressionen! Du n\u00e6vnte mapping af variablen i grafen, at man ikke kan bruge en variabel i en variabel i Grafana. Forst\u00e5r du, hvad jeg mener?<\/em><\/p>\n<p><\/p>\n<p>Ja.<\/p>\n<p><\/p>\n<p><em>Det var oprindeligt et hovedbrud, da jeg ville lave en alert i Grafana. Og man skal lave en alert for hver enkelt v\u00e6rt. Den ting, du lavede, fungerer den til alerts i Grafana?<\/em><\/p>\n<p><\/p>\n<p>Hvis Grafana ikke henter variabler p\u00e5 en anden m\u00e5de, s\u00e5 ja, det vil fungere. Men mit r\u00e5d er at undg\u00e5 at bruge alerting i Grafana overhovedet, det er bedre at bruge alertmanager.<\/p>\n<p><\/p>\n<p><em>Ja, jeg bruger det, men det virkede bare lettere at konfigurere i Grafana, men tak for r\u00e5det!<\/em><\/p>\n<p>Kilde: <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 5.0.3 - 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;\" \/>\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\/da\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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;\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/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 afkodning af Roman Khavronenkos pr\u00e6sentation | ProHoster","description":"Jeg inviterer dig til at se fortolkningen af Rom\u00e1n Khavronenkos \"ExtendedPromQL\"-foredrag","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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;","og:url":"https:\/\/prohoster.info\/da\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/75585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=75585"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/75585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/75586"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=75585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=75585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=75585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}