{"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\/fr\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","title":{"rendered":"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Je vous propose de consulter le rapport de 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=\"Lire la vid\u00e9o\" 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 \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/54a175d9c74c90d9d313f8ff71476638.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En bref sur moi. Je m'appelle Roman. Je travaille chez CloudFlare, je vis \u00e0 Londres. Mais je suis aussi mainteneur de VictoriaMetrics.<br \/>\nEt je suis l'auteur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/clickhouse-grafana\">du plugin ClickHouse<\/a><\/noindex> pour Grafana et <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse-proxy<\/a><\/noindex> \u2013 c'est un petit proxy pour ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fc1aa56b144def5db9fcee844d5016f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous commencerons par la premi\u00e8re partie, intitul\u00e9e \u00ab Les difficult\u00e9s de traduction \u00bb, o\u00f9 je parlerai du fait que toute langue, ou m\u00eame simplement un moyen de communication, est tr\u00e8s important. Parce que c'est ainsi que vous transmettez vos pens\u00e9es \u00e0 une autre personne ou syst\u00e8me, comment vous formulez votre demande. Les gens sur Internet d\u00e9battent de la langue \u00e0 privil\u00e9gier \u2013 Java ou une autre. Pour moi, j'ai d\u00e9cid\u00e9 qu'il fallait choisir en fonction de la t\u00e2che, car tout cela est sp\u00e9cifique.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Commen\u00e7ons par le tout d\u00e9but. Qu'est-ce que PromQL ? PromQL \u2013 c'est le langage de requ\u00eate de Prometheus. C'est ainsi que nous formons des requ\u00eates dans Prometheus pour obtenir des donn\u00e9es de s\u00e9ries temporelles.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/56b1ef4cc04defdffeea8b2666fdc354.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Que sont les donn\u00e9es de s\u00e9ries temporelles ? Si l'on prend cela litt\u00e9ralement, ce sont trois param\u00e8tres. <\/p>\n<p><\/p>\n<p>C'est :<\/p>\n<p><\/p>\n<ul>\n<li>Ce que nous regardons. <\/li>\n<li>Quand nous le regardons.<\/li>\n<li>Et quelle valeur cela montre. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/358a193e889204d28debe1b74b93df3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si l'on regarde ce graphique (ce graphique est de mon t\u00e9l\u00e9phone montrant les statistiques de mes pas), on peut rapidement r\u00e9pondre \u00e0 ces questions. <\/p>\n<p><\/p>\n<p>Nous regardons les pas. Nous voyons la valeur et nous voyons le moment o\u00f9 nous regardons cela. C'est-\u00e0-dire qu'en regardant ce graphique, on peut facilement dire qu'oulundi, j'ai fait environ 15 000 pas. Ce sont des donn\u00e9es de s\u00e9ries temporelles. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Maintenant, transformons-les en un autre mod\u00e8le de donn\u00e9es sous forme de tableau. Ici, nous avons aussi ce \u00e0 quoi nous faisons attention. J'ai ajout\u00e9 quelques donn\u00e9es suppl\u00e9mentaires, que nous appellerons des m\u00e9tadonn\u00e9es, c'est-\u00e0-dire que ce n'est pas moi, mais deux personnes, disons Jay et Silent Bob, qui les ont fournies. Voici ce \u00e0 quoi nous pr\u00eatons attention ; ce que cela indique et quand \u00e7a montre cette valeur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMaintenant, essayons de stocker toutes ces donn\u00e9es dans une base de donn\u00e9es. \u00c0 titre d'exemple, j'ai pris la syntaxe de ClickHouse. Et ici nous cr\u00e9ons une table appel\u00e9e \u00ab Steps \u00bb, c'est-\u00e0-dire ce que nous regardons. Il y a le temps o\u00f9 nous le regardons ; ce que cela montre et quelques m\u00e9tadonn\u00e9es, o\u00f9 nous allons stocker qui c'est : Jay et Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/bd01f9dc0b29d34aacbb8f012710a94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et pour essayer de visualiser tout cela, nous utiliserons Grafana, car d'abord, c'est beau.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9f573241e9ae32e31d6d0b879115970b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous allons \u00e9galement utiliser ce plugin. Il y a deux raisons \u00e0 cela. La premi\u00e8re est que je l'ai \u00e9crit. Et je sais \u00e0 quel point il est difficile d'extraire des donn\u00e9es de s\u00e9ries temporelles de ClickHouse pour les afficher dans Grafana. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/29f2d72f9995afb54b23bb7b4230b840.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous allons les afficher dans le Graph Panel. C'est le panneau le plus populaire dans Grafana, qui montre la d\u00e9pendance d'une valeur par rapport au temps, donc nous avons seulement besoin de deux param\u00e8tres.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00c9crivons la requ\u00eate la plus simple : comment afficher les statistiques de pas dans Grafana, en conservant ces donn\u00e9es dans ClickHouse, dans la table que nous avons cr\u00e9\u00e9e. Et nous \u00e9crivons cette requ\u00eate simple. Nous s\u00e9lectionnons \u00e0 partir des pas. Nous choisissons la valeur et le moment de ces valeurs, c'est-\u00e0-dire les m\u00eames trois param\u00e8tres dont nous avons parl\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ad7895105050178de5bc8a154da7e6e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et nous obtiendrons un graphique semblable \u00e0 ceci. Qui sait pourquoi il est si \u00e9trange ?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est exact, il faut trier par temps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et au final, nous avons un graphique un peu mieux, mais toujours \u00e9trange. Qui sait pourquoi ? C'est vrai, il y a deux participants, et nous envoyons deux s\u00e9ries temporelles dans Grafana, parce que si nous examinons \u00e0 nouveau le mod\u00e8le de donn\u00e9es, chaque s\u00e9rie temporelle est une combinaison unique de nom et de toutes les paires cl\u00e9-valeur des labels.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/f19bf1a9f43ae8de22af6bf7b494902f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous devons donc choisir une personne sp\u00e9cifique. Nous choisissons Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b6a714d5d6ce4d4b27634da9414aa6f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et nous tra\u00e7ons \u00e0 nouveau. Maintenant, le graphique ressemble \u00e0 la r\u00e9alit\u00e9. C'est un graphique normal et tout fonctionne bien.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/2a93b4cd548239c9314c3283c5b9f488.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et, vous savez probablement comment faire \u00e0 peu pr\u00e8s la m\u00eame chose, mais dans Prometheus \u00e0 travers PromQL. \u00c0 peu pr\u00e8s comme \u00e7a. Un peu plus simple. Et nous allons d\u00e9composer le tout. Nous avons pris les pas. Et filtrer par Jay. Ici, nous ne sp\u00e9cifions pas que nous avons besoin de la valeur et nous ne choisissons pas le temps. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/5e080a1b88c156522af21bf00f3cd641.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Maintenant, essayons de calculer la vitesse de d\u00e9placement de Jay ou Silent Bob. Dans ClickHouse, nous devrons faire une runningDifference, c'est-\u00e0-dire calculer la diff\u00e9rence entre les paires de points et les diviser par le temps pour obtenir la vitesse exacte. La requ\u00eate ressemblera \u00e0 peu pr\u00e8s \u00e0 \u00e7a.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et cela montrera environ ces valeurs, c'est-\u00e0-dire que Silent Bob ou Jay font environ 1,8 pas par seconde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/1c328f99da6f160bdca23ab5f461bda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et dans Prometheus, vous savez aussi comment faire cela. C'est beaucoup plus simple qu'auparavant.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Pour rendre cela aussi simple \u00e0 faire dans Grafana, j'ai ajout\u00e9 un wrapper qui ressemble beaucoup \u00e0 PromQL. Il s'appelle Rate Macros ou comme vous voulez l'appeler. Dans Grafana, vous \u00e9crivez simplement \u00ab rate \u00bb, mais en profondeur, cela se transforme en une grosse requ\u00eate. Vous n'avez m\u00eame pas besoin de la regarder, elle est quelque part l\u00e0-bas, mais vous gagnez beaucoup de temps, car \u00e9crire de si grandes requ\u00eates SQL est toujours co\u00fbteux. Vous pouvez facilement faire une erreur et ensuite mettre du temps \u00e0 comprendre ce qui se passe.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et voici une requ\u00eate qui ne tenait m\u00eame pas sur une diapositive et j'ai d\u00fb la diviser en deux colonnes. C'est aussi une requ\u00eate dans ClickHouse, qui fait la m\u00eame chose que le rate, mais pour les deux s\u00e9ries temporelles : Silent Bob et Jay, afin que nous ayons deux s\u00e9ries temporelles sur notre panneau. Et cela devient d\u00e9j\u00e0 tr\u00e8s compliqu\u00e9, \u00e0 mon avis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et pour Prometheus, cela sera sum(rate). Pour ClickHouse, j'ai cr\u00e9\u00e9 un macro s\u00e9par\u00e9 appel\u00e9 RateColumns, qui ressemble \u00e0 une requ\u00eate dans Prometheus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9743c6a4b3de4aab7cfb5bd3fd50fcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons regard\u00e9 et il semble que PromQL soit tr\u00e8s \u00e9l\u00e9gant, mais il a bien s\u00fbr des limitations.<\/p>\n<p><\/p>\n<p>C'est :<\/p>\n<p><\/p>\n<ul>\n<li>SELECT limit\u00e9.<\/li>\n<li>JOINS limit\u00e9s.<\/li>\n<li>Pas de support HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>Et si vous avez travaill\u00e9 longtemps avec lui, vous savez qu'il est parfois tr\u00e8s difficile de faire quelque chose dans PromQL, alors qu'en SQL, on peut pratiquement tout faire, car toutes ces options dont nous avons parl\u00e9 peuvent \u00eatre r\u00e9alis\u00e9es en SQL. Mais serait-ce pratique \u00e0 utiliser ? Cela me fait penser que le langage le plus puissant n'est pas toujours le plus facile \u00e0 utiliser.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ec8786f1d72a1f8652fa631cdffc9c25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est pourquoi il faut parfois choisir le langage en fonction des t\u00e2ches. C'est comme le combat entre Batman et Superman. Il est \u00e9vident que Superman est plus fort, mais Batman a r\u00e9ussi \u00e0 le vaincre parce qu'il est plus pratique et savait exactement ce qu'il faisait.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et la prochaine partie concerne l'extension de PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b806acf0e6c7c416614d3fd49004b4be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Encore une fois sur VictoriaMetrics. Qu'est-ce que VictoriaMetrics ? C'est une base de donn\u00e9es de s\u00e9ries temporelles, elle est en OpenSource, nous distribuons ses versions single et cluster. Selon nos benchmarks, elle est la plus rapide sur le march\u00e9 actuel et au niveau de la compression, c'est similaire, c'est-\u00e0-dire que des utilisateurs rapportent une compression d'environ 0,4 octet par point, tandis que pour Prometheus, c'est de 1,2 \u00e0 1,4. <\/p>\n<p><\/p>\n<p>Nous ne supportons pas seulement Prometheus. Nous supportons InfluxDB, Graphite, OpenTSDB.<\/p>\n<p><\/p>\n<p>Nous pouvons \"\u00e9crire\" en nous, c'est-\u00e0-dire transf\u00e9rer des donn\u00e9es anciennes. <\/p>\n<p><\/p>\n<p>Et nous travaillons aussi parfaitement avec Prometheus et Grafana, c'est-\u00e0-dire que nous supportons le moteur PromQL. Et dans Grafana, vous pouvez simplement changer l'endpoint Prometheus en VictoriaMetrics et tous vos tableaux de bord fonctionneront comme avant. <\/p>\n<p><\/p>\n<p>Mais vous pouvez \u00e9galement utiliser des fonctionnalit\u00e9s suppl\u00e9mentaires que VictoriaMetrics offre.<\/p>\n<p><\/p>\n<p>Nous passerons rapidement en revue les fonctions que nous avons ajout\u00e9es.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78e9c0ce91fad48ab859fc2cf06a0689.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Omettre le param\u00e8tre d'intervalle \u2013 vous pouvez passer le param\u00e8tre d'intervalle dans Grafana. Lorsque vous ne voulez pas obtenir de graphiques \u00e9tranges lors du zoom avant\/arri\u00e8re dans le panneau, il est recommand\u00e9 d'utiliser la variable <code>$__interval<\/code>. C'est une variable interne de Grafana et elle choisit elle-m\u00eame la plage de donn\u00e9es. VictoriaMetrics peut \u00e9galement comprendre quelle devrait \u00eatre cette plage. Vous n'avez donc pas besoin de mettre \u00e0 jour toutes vos requ\u00eates. Ce sera beaucoup plus simple.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4094c7b8b5e6eef6134b5aa344ef7409.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La deuxi\u00e8me fonction est la r\u00e9f\u00e9rence d'intervalle. Vous pouvez utiliser cet intervalle dans vos expressions. Vous pouvez le multiplier, le diviser, le passer, le r\u00e9f\u00e9rencer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/967ca6166e588987bd69c1e1953dca31.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, il y a la famille des fonctions rollup. Les fonctions rollup transforment n'importe quelle s\u00e9rie temporelle en trois s\u00e9ries temporelles distinctes : min, max et avg. Je trouve cela tr\u00e8s pratique, car cela peut parfois r\u00e9v\u00e9ler des anomalies. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d5ff7d6f6ae8f7550434a3dbbca09b20.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et si vous faites simplement irate ou rate, vous pourriez probablement manquer certains cas o\u00f9 la s\u00e9rie temporelle se comporte diff\u00e9remment de ce que vous aviez pr\u00e9vu. Avec cette fonction, il est beaucoup plus facile de voir, par exemple, que le max est tr\u00e8s \u00e9loign\u00e9 de l'avg.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, il y a la variable par d\u00e9faut. Par d\u00e9faut, cela signifie quelle valeur nous devons afficher dans Grafana lorsque nous n'avons pas de s\u00e9rie temporelle pour le moment. Quand cela se produit ? Supposons que vous exportiez une certaine m\u00e9trique sur les erreurs. Et vous avez une application si g\u00e9niale que lorsque vous l'avez lanc\u00e9e, vous n'avez aucune erreur et m\u00eame pas d'erreurs lors des trois premi\u00e8res heures ou m\u00eame d'un jour. Et vous avez des tableaux de bord qui montrent le rapport entre le succ\u00e8s et l'erreur. Et ils ne vous montreront rien, car vous n'avez pas de m\u00e9trique d'erreur. Mais dans les valeurs par d\u00e9faut, vous pouvez indiquer n'importe quoi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de 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 conserve la derni\u00e8re valeur de la m\u00e9trique si elle dispara\u00eet. Si Prometheus ne la trouve pas au prochain scrape pendant 5 minutes, alors ici nous m\u00e9moriserons sa derni\u00e8re valeur et vos graphiques ne seront pas \u00e0 nouveau cass\u00e9s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de 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 indique \u00e0 quelle fr\u00e9quence Prometheus collecte des donn\u00e9es sur votre m\u00e9trique, \u00e0 quelle fr\u00e9quence. Ici, vous pouvez voir des \u00e9checs, par exemple. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLabel replace \u2013 une fonction populaire. Mais nous trouvons qu'elle est un peu complexe, car elle prend de nombreux arguments. Vous devez non seulement vous rappeler 5 arguments, mais aussi vous souvenir de leur ordre.<br \/>\n<img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAlors, pourquoi ne pas les simplifier ? C'est-\u00e0-dire, les d\u00e9composer en petites fonctions avec une syntaxe claire.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/e928549205018e7405cc2a81970a8514.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et maintenant, la partie int\u00e9ressante. Pourquoi consid\u00e9rons-nous que cela est un PromQL \u00e9tendu ? Parce que nous supportons les expressions de table communes. Vous pouvez scanner le QR code (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL\">https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL<\/a><\/noindex>), consulter les liens avec des exemples, avec un playground o\u00f9 vous pouvez ex\u00e9cuter des requ\u00eates directement dans VictoriaMetrics sans l'installer, simplement dans votre navigateur.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Qu'est-ce que cela signifie ? Cette requ\u00eate ci-dessus est une requ\u00eate assez populaire. Je pense que dans n'importe quel tableau de bord de nombreuses entreprises, vous utilisez le m\u00eame filtre pour tout. G\u00e9n\u00e9ralement, c'est ainsi. Mais quand vous devez ajouter un nouveau filtre, vous devez mettre \u00e0 jour chaque panneau ou t\u00e9l\u00e9charger le tableau de bord, l'ouvrir en JSON, faire une recherche et remplacer, ce qui prend aussi du temps. Pourquoi ne pas conserver cette valeur dans une variable et la r\u00e9utiliser ? Cela me semble beaucoup plus simple et compr\u00e9hensible.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Par exemple, quand je dois mettre \u00e0 jour les filtres dans Grafana dans toutes les requ\u00eates, et que le tableau de bord peut \u00eatre immense ou qu'il peut m\u00eame y en avoir plusieurs. Et comment aimerais-je r\u00e9soudre ce probl\u00e8me dans Grafana ?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je r\u00e9sous ce probl\u00e8me comme \u00e7a : je cr\u00e9e un commonFilter et j'y d\u00e9finis ce filtre, puis je le r\u00e9utilise dans les requ\u00eates. Mais si vous faites de m\u00eame maintenant, cela ne fonctionnera pas, car Grafana ne vous permet pas d'utiliser des variables \u00e0 l'int\u00e9rieur des variables de requ\u00eates. Et c'est un peu \u00e9trange.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/0b7a40976cb3eeda370518a242f78708.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est pourquoi j'ai \u00e9labor\u00e9 une variante qui le permet. Si cela vous int\u00e9resse ou si vous souhaitez cette fonctionnalit\u00e9, alors soutenez ou n'aimez pas, si cette id\u00e9e ne vous convient pas. <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 \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, parlons de PromQL \u00e9tendu. Ici, nous d\u00e9finissons non seulement une variable, mais carr\u00e9ment une fonction. Nous l'appelons ru (utilisation des ressources). Cette fonction accepte les ressources libres, les limites de ressources et un filtre. La syntaxe est plut\u00f4t simple. Et il est tr\u00e8s facile d'utiliser cette fonction et de calculer le pourcentage de m\u00e9moire libre disponible pour nous. C'est-\u00e0-dire, combien de m\u00e9moire nous avons, quelle est la limite et comment filtrer. Cela semble beaucoup plus pratique, si vous \u00e9criviez tout cela en r\u00e9utilisant les m\u00eames filtres, car cela se transformerait en une grosse requ\u00eate.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4ca66e18ac665fe1038493709530b82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voici un exemple d'une requ\u00eate tr\u00e8s complexe. Elle provient du tableau de bord officiel de NodeExporter pour Grafana. Mais je comprends mal ce qui se passe ici. Autrement dit, bien s\u00fbr, je comprends si je m'y attarde, mais le nombre de parenth\u00e8ses peut rapidement diminuer la motivation \u00e0 comprendre ce qui se passe ici. Alors, pourquoi ne pas le rendre plus simple et plus clair ?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/50e01e7f0c1d03965b028266130413f0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Par exemple, comme cela, en mettant en valeur des \u00e9l\u00e9ments ou des parties dans des variables. Et ensuite, effectuer vos op\u00e9rations de base. Cela ressemble d\u00e9j\u00e0 davantage \u00e0 de la programmation, c'est ce que j'aimerais voir \u00e0 l'avenir dans Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/81f957d89f97ebf686abdf969982d3ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voici un second exemple, comment nous pourrions rendre cela encore plus simple, si nous avions d\u00e9j\u00e0 cette fonction ru, qui existe d\u00e9j\u00e0 dans VictoriaMetrics. Et vous transmettez simplement la valeur mise en cache que vous avez d\u00e9clar\u00e9e dans le CTE.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/415302741e14232228353db6ec57a2e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J'ai d\u00e9j\u00e0 mentionn\u00e9 \u00e0 quel point il est important d'utiliser le bon langage de programmation. Et probablement, dans chaque entreprise, il se passe quelque chose de diff\u00e9rent dans Grafana. Vous donnez probablement encore acc\u00e8s \u00e0 Grafana \u00e0 vos d\u00e9veloppeurs, qui font des choses \u00e0 leur mani\u00e8re. Et tous le font diff\u00e9remment. J'aimerais qu'on parvienne \u00e0 un certain standard.<\/p>\n<p><\/p>\n<p>Supposons que vous n'ayez pas seulement des ing\u00e9nieurs syst\u00e8mes, peut-\u00eatre avez-vous m\u00eame des experts, des devops ou des SRE. Peut-\u00eatre avez-vous des experts qui savent ce qu'est la surveillance, savent ce qu'est Grafana, c'est-\u00e0-dire qu'ils y travaillent depuis des ann\u00e9es et qu'ils savent exactement comment faire correctement. Ils l'ont d\u00e9j\u00e0 \u00e9crit 100 fois et ont tout expliqu\u00e9, mais personne ne semble les \u00e9couter.<\/p>\n<p><\/p>\n<p>Et si ces connaissances pouvaient \u00eatre directement int\u00e9gr\u00e9es dans Grafana, pour que d'autres utilisateurs puissent r\u00e9utiliser les fonctions ? Et si vous deviez calculer le pourcentage de m\u00e9moire libre, vous appliqueriez simplement la fonction. Que se passerait-il si les cr\u00e9ateurs d'exporteurs fournissaient \u00e9galement un ensemble de fonctions sur la fa\u00e7on de travailler avec leurs m\u00e9triques, car ils savent exactement ce que c'est que ces m\u00e9triques et comment les calculer correctement ?<\/p>\n<p><\/p>\n<p>Ce concept n'existe pas vraiment. C'est quelque chose que j'ai cr\u00e9\u00e9 moi-m\u00eame. Cela concerne le support des biblioth\u00e8ques dans Grafana. Par exemple, les personnes qui ont cr\u00e9\u00e9 NodeExporter ont r\u00e9alis\u00e9 ce dont je parle. Et elles ont \u00e9galement fourni un ensemble de fonctions. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cela ressemble \u00e0 peu pr\u00e8s \u00e0 \u00e7a. Vous connectez cette biblioth\u00e8que dans Grafana, vous entrez en mode \u00e9dition et il est tr\u00e8s simple de voir dans le JSON comment travailler avec cette m\u00e9trique. C'est-\u00e0-dire un ensemble de fonctions, leur description et la fa\u00e7on dont elles se d\u00e9ploient.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78a85dd219a421757807be895c173a39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je pense que cela pourrait \u00eatre utile, parce qu'alors, dans Grafana, vous pourriez simplement \u00e9crire comme \u00e7a. Et Grafana vous \"dit\" qu'il existe une telle fonction dans une telle biblioth\u00e8que \u2013 utilisons-la. Je pense que ce serait vraiment g\u00e9nial.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un peu sur VictoriaMetrics. Nous faisons beaucoup de choses int\u00e9ressantes. Lisez nos articles sur la compression, nos comp\u00e9titions avec d'autres applications de s\u00e9ries temporelles, notre explication sur comment travailler avec PromQL, car il y a encore beaucoup de d\u00e9butants, ainsi que sur la scalabilit\u00e9 verticale et notre affrontement avec Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2013 d\u00e9chiffrage du rapport de Roman Khavronenko\" src=\"\/wp-content\/uploads\/2020\/03\/562829a25ee6131c7eaed8c561c6927c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Questions :<\/p>\n<p><\/p>\n<p><em>Je vais commencer ma question par une simple histoire de vie. Lorsque j'ai commenc\u00e9 \u00e0 utiliser Grafana pour la premi\u00e8re fois, j'ai \u00e9crit une requ\u00eate tr\u00e8s convaincante de cinq lignes. Au final, j'ai obtenu un graphique tr\u00e8s convaincant. Ce graphique a presque \u00e9t\u00e9 mis en production. Mais en y regardant de plus pr\u00e8s, il s'est av\u00e9r\u00e9 que ce graphique affichait des absurdit\u00e9s absolues, qui n'avaient rien \u00e0 voir avec la r\u00e9alit\u00e9, bien que les chiffres soient dans la plage que nous esp\u00e9rions voir. Et ma question est la suivante. Nous avons des biblioth\u00e8ques, nous avons des fonctions, mais comment \u00e9crivons-nous des tests pour Grafana ? Vous avez \u00e9crit une requ\u00eate complexe, sur laquelle d\u00e9pend une d\u00e9cision commerciale - passer une commande pour un v\u00e9ritable conteneur de serveurs ou non. Et comment savons-nous que cette fonction, qui dessine le graphique, ressemble \u00e0 la v\u00e9rit\u00e9. Merci.<\/em><\/p>\n<p><\/p>\n<p>Merci pour votre question. Il y a deux parties. D'une part, je remarque, d'apr\u00e8s ma pratique, que la plupart des utilisateurs, lorsqu'ils regardent leurs graphiques, ne comprennent pas ce qu'ils montrent. Les gens sont \u00e9tonnamment dou\u00e9s pour inventer des excuses pour toute anomalie qui se produit sur les graphiques, m\u00eame s'il s'agit d'une erreur dans la fonction. D'autre part, je pense que l'utilisation de telles fonctions conviendrait beaucoup mieux \u00e0 la solution de votre probl\u00e8me, au lieu que chacun de vos d\u00e9veloppeurs effectue son propre plan de capacit\u00e9 et se trompe avec une certaine probabilit\u00e9.<\/p>\n<p><\/p>\n<p><em>Comment v\u00e9rifier ?<\/em><\/p>\n<p><\/p>\n<p>Comment v\u00e9rifier ? Probablement pas moyen. <\/p>\n<p><\/p>\n<p><em>Sous forme de test dans Grafana.<\/em><\/p>\n<p><\/p>\n<p>Quel rapport avec Grafana ? Grafana transmet cette requ\u00eate directement au DataSource.<\/p>\n<p><\/p>\n<p><em>En ajoutant un peu aux param\u00e8tres.<\/em><\/p>\n<p><\/p>\n<p>Non, rien n'est ajout\u00e9 dans Grafana. Il peut y avoir des param\u00e8tres GET, comme par exemple step. Il n'est pas clairement sp\u00e9cifi\u00e9, mais vous pouvez le red\u00e9finir, ou ne pas le red\u00e9finir, mais il est ajout\u00e9 automatiquement. Vous ne pouvez pas \u00e9crire de tests ici. Je pense qu'il ne faut pas compter sur Grafana comme source de v\u00e9rit\u00e9.<\/p>\n<p><\/p>\n<p><em>Merci pour la pr\u00e9sentation ! Merci pour la compression ! Vous avez mentionn\u00e9 le mappage des variables dans le graphique, \u00e0 savoir qu'il n'est pas possible d'utiliser une variable dans une autre variable dans Grafana. Comprenez-vous de quoi je parle ?<\/em><\/p>\n<p><\/p>\n<p>Oui.<\/p>\n<p><\/p>\n<p><em>C'\u00e9tait \u00e0 l'origine un v\u00e9ritable casse-t\u00eate lorsque je voulais cr\u00e9er une alerte dans Grafana. Et il faut faire des alertes pour chaque h\u00f4te s\u00e9par\u00e9ment. Cette fonction que vous avez r\u00e9alis\u00e9e fonctionne-t-elle pour les alertes dans Grafana ?<\/em><\/p>\n<p><\/p>\n<p>Si Grafana ne traite pas les variables d'une autre mani\u00e8re, alors oui, cela fonctionnera. Mais mon conseil est de ne pas utiliser l'alerte dans Grafana du tout, il vaut mieux utiliser alertmanager.<\/p>\n<p><\/p>\n<p><em>Oui, je l'utilise, mais c'est juste que cela m'a sembl\u00e9 plus facile \u00e0 configurer dans Grafana, mais merci pour le conseil !<\/em><\/p>\n<p>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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 d\u00e9cryptage de la pr\u00e9sentation de Roman Khavronenko | ProHoster","description":"Je vous propose de d\u00e9couvrir l'analyse du rapport de Roman Khavronenko \"ExtendedPromQL\"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/75585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=75585"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/75585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/75586"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=75585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=75585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=75585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}