{"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\/es\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","title":{"rendered":"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Le ofrezco conocer la transcripci\u00f3n del informe de Roman Javronenko \"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=\"Reproducir 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 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/54a175d9c74c90d9d313f8ff71476638.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Brevemente sobre m\u00ed. Me llamo Roman. Trabajo en CloudFlare y vivo en Londres. Pero tambi\u00e9n soy mantenedor de VictoriaMetrics.<br \/>\nY soy el autor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/clickhouse-grafana\">del plugin de ClickHouse<\/a><\/noindex> para Grafana y <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse-proxy<\/a><\/noindex> \u2013 es un peque\u00f1o proxy para ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fc1aa56b144def5db9fcee844d5016f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comenzaremos con la primera parte, titulada \"Dificultades de la traducci\u00f3n\", donde hablar\u00e9 sobre c\u00f3mo cualquier idioma, o incluso simplemente el lenguaje de comunicaci\u00f3n, es muy importante. Porque es la forma en que transfieres tus pensamientos a otra persona o a un sistema, c\u00f3mo formulas tu solicitud. La gente en internet discute sobre qu\u00e9 lenguaje es mejor: Java u otro. Para m\u00ed, he decidido que hay que elegir seg\u00fan la tarea, porque todo esto es espec\u00edfico.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ea21f52ba5c2d3507e0106715c4ab96d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Empecemos desde el principio. \u00bfQu\u00e9 es PromQL? PromQL es el lenguaje de consulta de Prometheus. As\u00ed es como formulamos consultas en Prometheus para obtener datos de series temporales.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/56b1ef4cc04defdffeea8b2666fdc354.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 son los datos de series temporales? Literalmente, son tres par\u00e1metros. <\/p>\n<p><\/p>\n<p>Son:<\/p>\n<p><\/p>\n<ul>\n<li>A qu\u00e9 estamos mirando. <\/li>\n<li>Cu\u00e1ndo lo estamos mirando.<\/li>\n<li>Y qu\u00e9 valor muestra. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/358a193e889204d28debe1b74b93df3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si miramos este gr\u00e1fico (este gr\u00e1fico es de mi tel\u00e9fono, que muestra la estad\u00edstica de mis pasos), aqu\u00ed podemos responder r\u00e1pidamente a estas preguntas. <\/p>\n<p><\/p>\n<p>Estamos viendo los pasos. Vemos el valor y vemos el tiempo cuando lo estamos observando. Es decir, mirando este gr\u00e1fico, es f\u00e1cil decir que el domingo camin\u00e9 alrededor de 15,000 pasos. Eso son datos de series temporales. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/859299ee9d25a3419c869b3ed6db6e72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahora, vamos a \"desglosar\" (convertir) esos datos en otro modelo de datos en forma de tabla. Aqu\u00ed tambi\u00e9n tenemos aquello en lo que estamos mirando. Aqu\u00ed a\u00f1ad\u00ed un poco de datos adicionales, que llamaremos metadatos, es decir, no fui yo, sino dos personas, digamos, Jay y Silent Bob. Esto es lo que estamos observando; lo que muestra y cu\u00e1ndo muestra este valor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/fd7b48ea3c25b57c13605e84c4a52a2c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAhora intentemos guardar todos estos datos en una base de datos. Para ello, he tomado la sintaxis de ClickHouse. Aqu\u00ed creamos una tabla llamada \"Steps\", es decir, lo que estamos mirando. Hay un tiempo, que es cuando lo estamos observando; qu\u00e9 muestra y algunos metadatos, donde almacenaremos qui\u00e9nes son: Jay y Silent Bob.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/bd01f9dc0b29d34aacbb8f012710a94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y para intentar visualizar todo esto, utilizaremos Grafana, porque, primero, es bonito.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9f573241e9ae32e31d6d0b879115970b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tambi\u00e9n utilizaremos este plugin. Hay dos razones para ello. La primera es porque yo lo escrib\u00ed. Y s\u00e9 lo dif\u00edcil que es extraer datos de series temporales de ClickHouse para mostrar en Grafana. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/29f2d72f9995afb54b23bb7b4230b840.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vamos a mostrarlos en Graph Panel. Este es el panel m\u00e1s popular en Grafana, que muestra la dependencia del valor en funci\u00f3n del tiempo, por lo que solo necesitamos dos par\u00e1metros.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d820f63944ce0112660337b44a6c1f36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEscribamos la consulta m\u00e1s sencilla: c\u00f3mo mostrar las estad\u00edsticas de pasos en Grafana, almacenando estos datos en ClickHouse, en la tabla que creamos. Escribimos esta simple consulta. Seleccionamos de pasos. Elegimos el valor y seleccionamos el tiempo de esos valores, es decir, los mismos tres par\u00e1metros de los que hablamos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ad7895105050178de5bc8a154da7e6e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y como resultado obtendremos este gr\u00e1fico. \u00bfAlguien sabe por qu\u00e9 se ve tan extra\u00f1o?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4a8108737e834cf35b7834be7b4db719.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Correcto, hay que ordenar por tiempo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d37343c7a6a811e2012f1cbae4b9a5d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y al final obtendremos uno mejor, pero todav\u00eda extra\u00f1o. \u00bfAlguien sabe por qu\u00e9? Correcto, hay dos participantes, y en Grafana estamos entregando dos series temporales, porque si revisamos el modelo de datos una vez m\u00e1s, cada serie temporal es una combinaci\u00f3n \u00fanica de nombre y todos los pares clave-valor de labels.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/f19bf1a9f43ae8de22af6bf7b494902f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por lo tanto, necesitamos elegir a una persona espec\u00edfica. Elegimos a Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b6a714d5d6ce4d4b27634da9414aa6f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y dibujamos una vez m\u00e1s. Ahora el gr\u00e1fico se asemeja a la realidad. Ahora es un gr\u00e1fico normal y todo funciona bien.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/2a93b4cd548239c9314c3283c5b9f488.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y probablemente sepas c\u00f3mo hacer algo similar, pero en Prometheus a trav\u00e9s de PromQL. Aproximadamente as\u00ed. Un poco m\u00e1s f\u00e1cil. Y adem\u00e1s, desglosaremos todo. Est\u00e1bamos tratando con Steps. Y filtramos por Jay. Aqu\u00ed no especificamos que necesitamos obtener el valor ni elegimos el tiempo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/5e080a1b88c156522af21bf00f3cd641.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahora intentemos calcular la velocidad de Jay o Silent Bob. En ClickHouse, tendremos que hacer runningDifference, es decir, calcular la diferencia entre pares de puntos y dividirlas por el tiempo para obtener la velocidad exacta. La consulta se ver\u00e1 aproximadamente as\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/13102b04ba4cf0ff9c955c36801044d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y mostrar\u00e1 valores como estos, es decir, aproximadamente 1.8 pasos por segundo realiza Silent Bob o Jay.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/1c328f99da6f160bdca23ab5f461bda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y en Prometheus tambi\u00e9n sabes c\u00f3mo hacerlo. Mucho m\u00e1s f\u00e1cil que antes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a7145785dee9fafcc8ab573e920cb88e.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Y para que esto sea igual de f\u00e1cil de hacer en Grafana, a\u00f1ad\u00ed un envoltorio que se parece mucho a PromQL. Se llama Rate Macros, o como quieras llamarlo. En Grafana, solo escribes \u00abrate\u00bb, pero en el fondo se transforma en una consulta muy extensa. No necesitas ni mirarla, est\u00e1 ah\u00ed, pero ahorras un mont\u00f3n de tiempo, porque escribir consultas SQL tan grandes siempre es costoso. Es f\u00e1cil equivocarse y luego no entender qu\u00e9 est\u00e1 pasando.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/511bb35469567b07412a10bb7c0b7312.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y esta es una consulta que ni siquiera cab\u00eda en una sola diapositiva y tuve que dividirla en dos columnas. Tambi\u00e9n es una consulta en ClickHouse que hace lo mismo que rate, pero para ambas series temporales: tanto para Silent Bob como para Jay, para que tengamos dos series temporales en el panel. Y esto ya es muy complicado, en mi opini\u00f3n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/c9c1e6b58672069370153a151dceef3d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y para Prometheus ser\u00e1 sum(rate). Para ClickHouse hice un macro separado que se llama RateColumns, que se ve como una consulta en Prometheus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9743c6a4b3de4aab7cfb5bd3fd50fcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vimos que PromQL es genial, pero, claro, tiene limitaciones.<\/p>\n<p><\/p>\n<p>Son:<\/p>\n<p><\/p>\n<ul>\n<li>SELECT limitado.<\/li>\n<li>JOINs limitados.<\/li>\n<li>Sin soporte para HAVING.<\/li>\n<\/ul>\n<p><\/p>\n<p>Y si has trabajado con esto durante mucho tiempo, sabes que a veces es muy dif\u00edcil hacer algo en PromQL, mientras que en SQL se puede hacer pr\u00e1cticamente todo, porque todas estas opciones que hemos discutido ahora se podr\u00edan hacer en SQL. \u00bfPero ser\u00eda conveniente usarlo? Y esto me lleva a pensar que el lenguaje m\u00e1s poderoso no siempre puede ser el m\u00e1s conveniente.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ec8786f1d72a1f8652fa631cdffc9c25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As\u00ed que a veces hay que elegir el lenguaje seg\u00fan las tareas. Es como la batalla de Batman contra Superman. Est\u00e1 claro que Superman es m\u00e1s fuerte, pero Batman logr\u00f3 derrotarlo porque es m\u00e1s pr\u00e1ctico y sab\u00eda exactamente lo que hac\u00eda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/59e5cb7e54ee14705a9e8a36db6f5541.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y la siguiente parte es Extending PromQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/b806acf0e6c7c416614d3fd49004b4be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una vez m\u00e1s sobre VictoriaMetrics. \u00bfQu\u00e9 es VictoriaMetrics? Es una base de datos de series temporales, es OpenSource, distribuimos sus versiones single y cluster. Seg\u00fan nuestras benchmarks, es lo m\u00e1s r\u00e1pido que hay en el mercado ahora y tambi\u00e9n en compresi\u00f3n, es decir, las personas reportan compresi\u00f3n de alrededor de 0.4 bytes por punto, mientras que con Prometheus es de 1.2-1.4. <\/p>\n<p><\/p>\n<p>No solo soportamos Prometheus. Tambi\u00e9n soportamos InfluxDB, Graphite, OpenTSDB.<\/p>\n<p><\/p>\n<p>Podemos \"escribir\" en nosotros, es decir, podemos trasladar datos antiguos. <\/p>\n<p><\/p>\n<p>Y tambi\u00e9n trabajamos perfectamente con Prometheus y Grafana, es decir, soportamos el motor PromQL. Y en Grafana, puedes simplemente cambiar el endpoint de Prometheus a VictoriaMetrics y todos tus dashboards funcionar\u00e1n como sol\u00edan hacerlo. <\/p>\n<p><\/p>\n<p>Pero puedes utilizar caracter\u00edsticas adicionales que ofrece VictoriaMetrics.<\/p>\n<p><\/p>\n<p>Repasaremos r\u00e1pidamente las funciones que hemos a\u00f1adido.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78e9c0ce91fad48ab859fc2cf06a0689.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Omitir el par\u00e1metro de intervalo \u2013 puedes omitir el intervalo de par\u00e1metros en Grafana. Cuando no desees obtener gr\u00e1ficos extra\u00f1os al hacer zoom in o zoom out en el panel, se recomienda usar la variable <code>$__interval<\/code>. Esta es una variable interna de Grafana y ella misma selecciona el rango de datos. Y VictoriaMetrics puede entender cu\u00e1l debe ser ese rango. No necesitar\u00e1s actualizar todas tus consultas. Ser\u00e1 mucho m\u00e1s sencillo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4094c7b8b5e6eef6134b5aa344ef7409.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La segunda funci\u00f3n es la referencia de intervalo. Puedes utilizar este intervalo en tus expresiones. Puedes multiplicar, dividir, pasar, referenciarlo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/967ca6166e588987bd69c1e1953dca31.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Luego est\u00e1 la familia de funciones de rollup. La funci\u00f3n de rollup transforma cualquier serie temporal en tres series temporales distintas: min, max y avg. Creo que es muy \u00fatil, porque a veces puede mostrar algunos outliers (anomal\u00edas) y imprecisiones. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/d5ff7d6f6ae8f7550434a3dbbca09b20.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y si simplemente haces irate o rate, probablemente puedes perder algunos casos en los que la serie temporal se comporta de manera diferente a lo que esperabas. Con esta funci\u00f3n es mucho m\u00e1s f\u00e1cil ver, por ejemplo, que el max es significativamente mayor que el avg.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/a4e9f0d246fa33459597f7140e09538c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A continuaci\u00f3n, la variable default. Default indica qu\u00e9 valor necesitamos mostrar en Grafana si no tenemos serie temporal en ese momento. \u00bfCu\u00e1ndo sucede esto? Por ejemplo, si est\u00e1s exportando alguna m\u00e9trica de errores. Y tienes una aplicaci\u00f3n tan genial que cuando inicias, no tienes errores e incluso no tienes errores durante las siguientes tres horas o un d\u00eda. Y tienes dashboards que muestran la relaci\u00f3n entre \u00e9xito y error. Y no te mostrar\u00e1n nada porque no tienes m\u00e9trica de error. Pero en default puedes especificar lo que quieras.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/cb4e23199194006186ac6907d2335cf6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Keep_last_Value \u2013 guarda el \u00faltimo valor de la m\u00e9trica si esta desaparece. Si Prometheus no la encuentra en el siguiente scrape despu\u00e9s de 5 minutos, aqu\u00ed recordaremos su \u00faltimo valor y tus gr\u00e1ficos no se romper\u00e1n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/ca202f8a70f071cbd85b33b98cd28bb5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Scrape_interval \u2013 muestra con qu\u00e9 frecuencia Prometheus recoge datos de tu m\u00e9trica, con qu\u00e9 frecuencia. Aqu\u00ed puedes ver saltos, por ejemplo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/9e9f43c7e9ef9a24dcc0b43673558046.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLabel replace \u2013 una funci\u00f3n popular. Pero creemos que es un poco complicada porque toma varios argumentos. Y no solo tienes que recordar 5 argumentos, sino tambi\u00e9n recordar su secuencia.<br \/>\n<img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/adfee335e9329f6b03d6f8a42ad8e7b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEntonces, \u00bfpor qu\u00e9 no simplificarlos? Es decir, dividir en funciones peque\u00f1as con una sintaxis clara.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/e928549205018e7405cc2a81970a8514.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y ahora, lo m\u00e1s interesante. \u00bfPor qu\u00e9 consideramos que esto es PromQL extendido? Porque soportamos Expresiones de Tabla Com\u00fan. Puedes escanear el c\u00f3digo QR (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL\">https:\/\/github.com\/VictoriaMetrics\/VictoriaMetrics\/wiki\/ExtendedPromQL<\/a><\/noindex>), ver enlaces con ejemplos, con un playground donde puedes ejecutar consultas directamente en VictoriaMetrics sin necesidad de instalarla, solo en el navegador.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/33259a4bcd1a92f2cab6e943b73502ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfY qu\u00e9 es esto? Esta consulta de arriba es una consulta bastante popular. Creo que en cualquier tablero de muchas empresas utilizas el mismo filtro para todo. As\u00ed suele ser. Pero cuando necesitas a\u00f1adir un nuevo filtro, tienes que actualizar cada panel, o descargar el tablero, abrirlo en JSON, hacer un buscar y reemplazar, lo que tambi\u00e9n toma tiempo. \u00bfPor qu\u00e9 no guardar ese valor en una variable y reutilizarlo? Me parece que es mucho m\u00e1s simple y claro.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/60aea73cf49934ef7d9a7928a8e2f8e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por ejemplo, cuando necesito actualizar filtros en Grafana en todas las consultas, y el tablero puede ser enorme o incluso pueden ser varios. \u00bfY c\u00f3mo quisiera resolver este problema en Grafana?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/7cf9eb13219bbd9a5d3240bdda1839a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Yo resuelvo este problema as\u00ed: hago commonFilter y defino ese filtro, y luego lo reutilizo en las consultas. Pero si ahora lo haces as\u00ed, no funcionar\u00e1, porque Grafana no te permite utilizar variables dentro de las variables de consulta. Y es un poco extra\u00f1o.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/0b7a40976cb3eeda370518a242f78708.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y por eso hice una variante que permite hacerlo. Y si te interesa o deseas esta funci\u00f3n, ap\u00f3yala o dale un dislike si no te gusta la idea. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grafana\/grafana\/pull\/16694\">https:\/\/github.com\/grafana\/grafana\/pull\/16694<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/68e3a408ff2b554cdfd61a2da4c75bc0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahora, sobre PromQL extendido. Aqu\u00ed definimos no solo una variable, sino una funci\u00f3n completa. Y la llamamos ru (uso de recursos). Esta funci\u00f3n toma recursos libres, limitaciones de recursos y un filtro. Parece que la sintaxis es bastante simple. Y es muy f\u00e1cil usar esta funci\u00f3n y calcular el porcentaje de memoria libre que tenemos. Es decir, cu\u00e1nta memoria tenemos, cu\u00e1l es la limitaci\u00f3n y c\u00f3mo filtrar. Esto resulta mucho m\u00e1s conveniente si escribes todo esto reutilizando los mismos filtros, ya que se convertir\u00eda en una gran consulta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/4ca66e18ac665fe1038493709530b82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y aqu\u00ed hay un ejemplo de una consulta muy, muy grande. Proviene del panel oficial de NodeExporter para Grafana. Pero no entiendo del todo qu\u00e9 est\u00e1 pasando aqu\u00ed. Es decir, entiendo si me detengo a mirar, pero la cantidad de par\u00e9ntesis puede desanimar a cualquiera de intentar entender lo que sucede. \u00bfPor qu\u00e9 no hacerlo m\u00e1s simple y comprensible?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/50e01e7f0c1d03965b028266130413f0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por ejemplo, as\u00ed, destacando cosas o partes significativas en variables. Y luego realizar tus c\u00e1lculos b\u00e1sicos. Esto se asemeja m\u00e1s a la programaci\u00f3n, algo que me gustar\u00eda ver en el futuro en Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/81f957d89f97ebf686abdf969982d3ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqu\u00ed hay un segundo ejemplo de c\u00f3mo podr\u00edamos hacerlo a\u00fan m\u00e1s sencillo, si ya tuvi\u00e9ramos esta funci\u00f3n ru, y ya est\u00e1 directamente en VictoriaMetrics. Entonces simplemente pasar\u00edas el valor almacenado que declaraste en CTE.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/415302741e14232228353db6ec57a2e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ya he mencionado lo importante que es utilizar el lenguaje de programaci\u00f3n adecuado. Y, probablemente, en cada empresa en Grafana hay algo \u00fanico. Seguramente tambi\u00e9n dan acceso a Grafana a sus desarrolladores, y los desarrolladores hacen algo diferente. Todos lo hacen de diferentes maneras. Y desear\u00eda que pudiera ser m\u00e1s uniforme, es decir, reducirlo a un est\u00e1ndar com\u00fan.<\/p>\n<p><\/p>\n<p>Supongamos que tienes no solo ingenieros de sistemas, tal vez incluso expertos, DevOps o SRE. Tal vez tengas expertos que saben lo que es la monitorizaci\u00f3n, saben lo que es Grafana, es decir, han trabajado con ello durante a\u00f1os y saben exactamente c\u00f3mo hacerlo bien. Ya lo han escrito 100 veces y se lo han explicado a todos, pero por alguna raz\u00f3n, nadie escucha.<\/p>\n<p><\/p>\n<p>\u00bfY qu\u00e9 pasar\u00eda si pudieran incorporar ese conocimiento directamente en Grafana para que otros usuarios pudieran reutilizar funciones? Y si tuvieran que calcular el porcentaje de memoria libre, simplemente aplicar\u00edan la funci\u00f3n. \u00bfQu\u00e9 pasar\u00eda si los creadores de los exportadores, junto con su producto, tambi\u00e9n proporcionaran un conjunto de funciones sobre c\u00f3mo trabajar con sus m\u00e9tricas, porque saben exactamente qu\u00e9 son esas m\u00e9tricas y c\u00f3mo contarlas correctamente?<\/p>\n<p><\/p>\n<p>Eso en realidad no existe. Esto lo hice yo mismo. Esto es soporte para bibliotecas en Grafana. Supongamos que los chicos que crearon NodeExporter hicieron lo que he mencionado. Y tambi\u00e9n proporcionaron un conjunto de funciones. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/755391ee41fd2abf4cb74fad17cecaf0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es decir, se ve algo as\u00ed. Conectas esta biblioteca en Grafana, accedes a la edici\u00f3n y aqu\u00ed est\u00e1 muy simple en JSON c\u00f3mo trabajar con esta m\u00e9trica. Es decir, un conjunto de funciones, su descripci\u00f3n y en qu\u00e9 se desarrollan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/78a85dd219a421757807be895c173a39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A mi parecer, esto podr\u00eda ser \u00fatil, porque entonces en Grafana simplemente escribir\u00edan as\u00ed. Y Grafana \"les dice\" que hay tal funci\u00f3n de tal biblioteca - vamos a usarla. Creo que eso ser\u00eda genial.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/6e6b2b459c574d95d56251cd5fae5586.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un poco sobre VictoriaMetrics. Hacemos muchas cosas interesantes. Lee nuestros art\u00edculos sobre compresi\u00f3n, sobre nuestras competiciones con otras aplicaciones de series temporales, nuestra explicaci\u00f3n sobre c\u00f3mo trabajar con PromQL, porque hay muchos principiantes en esto, as\u00ed como sobre escalabilidad vertical y sobre la competencia con Thanos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u00abExtendedPromQL\u00bb \u2014 transcripci\u00f3n de la presentaci\u00f3n de Roman Havronenko\" src=\"\/wp-content\/uploads\/2020\/03\/562829a25ee6131c7eaed8c561c6927c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Preguntas:<\/p>\n<p><\/p>\n<p><em>Empezar\u00e9 mi pregunta con una simple historia de vida. Cuando comenc\u00e9 a usar Grafana, escrib\u00ed una consulta muy convincente de 5 l\u00edneas. Al final, result\u00f3 ser un gr\u00e1fico muy convincente. Este gr\u00e1fico estuvo a punto de ir a producci\u00f3n. Pero al mirarlo de cerca, result\u00f3 que ese gr\u00e1fico muestra una absoluta tonter\u00eda que no tiene nada que ver con la realidad, aunque los n\u00fameros est\u00e1n dentro del rango que esper\u00e1bamos ver. Y mi pregunta es, tenemos bibliotecas, tenemos funciones, pero \u00bfc\u00f3mo escribimos pruebas para Grafana? Has escrito una consulta compleja de la que depende una decisi\u00f3n empresarial: pedir un contenedor real de servidores o no. Y, \u00bfc\u00f3mo sabemos que esta funci\u00f3n que dibuja el gr\u00e1fico se asemeja a la verdad? Gracias.<\/em><\/p>\n<p><\/p>\n<p>Gracias por la pregunta. Aqu\u00ed hay dos partes. La primera es que tengo la impresi\u00f3n, bas\u00e1ndome en mi experiencia, que la mayor\u00eda de los usuarios, cuando miran sus gr\u00e1ficos, no entienden lo que les est\u00e1n mostrando. De alguna manera, las personas son muy buenas para inventar una justificaci\u00f3n para cualquier anomal\u00eda que aparezca en los gr\u00e1ficos, incluso si es un error dentro de la funci\u00f3n. Y la segunda parte es que creo que usar este tipo de funciones ser\u00eda mucho m\u00e1s adecuado para resolver tu problema, en lugar de que cada uno de tus desarrolladores haga su planificaci\u00f3n de capacidad y se equivoque con alguna probabilidad.<\/p>\n<p><\/p>\n<p><em>\u00bfC\u00f3mo comprobar?<\/em><\/p>\n<p><\/p>\n<p>\u00bfC\u00f3mo comprobar? Probablemente, de ninguna manera. <\/p>\n<p><\/p>\n<p><em>En forma de prueba en Grafana.<\/em><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 tiene que ver Grafana? Grafana traduce esta consulta directamente en el DataSource.<\/p>\n<p><\/p>\n<p><em>Agregando un poco m\u00e1s en los par\u00e1metros.<\/em><\/p>\n<p><\/p>\n<p>No, en Grafana no se a\u00f1ade nada. Pueden haber par\u00e1metros GET, como, por ejemplo, step. No se especifica claramente, pero lo puedes sobrescribir, puedes no sobrescribirlo, pero se agrega autom\u00e1ticamente. Aqu\u00ed no vas a escribir pruebas. Creo que no vale la pena confiar aqu\u00ed en Grafana como una fuente de verdad.<\/p>\n<p><\/p>\n<p><em>\u00a1Gracias por la presentaci\u00f3n! \u00a1Gracias por la compresi\u00f3n! Mencionaste el mapeo de la variable en el gr\u00e1fico, que en Grafana no se puede usar una variable dentro de otra variable. \u00bfEntiendes de qu\u00e9 hablo?<\/em><\/p>\n<p><\/p>\n<p>S\u00ed.<\/p>\n<p><\/p>\n<p><em>Eso fue originalmente un dolor de cabeza, cuando quer\u00eda crear alertas en Grafana. Y all\u00ed necesitas hacer alertas para cada host por separado. Este truco que hiciste, \u00bffunciona para alertas en Grafana?<\/em><\/p>\n<p><\/p>\n<p>Si Grafana no accede a las variables de otra manera, entonces s\u00ed, funcionar\u00e1. Pero mi consejo es no usar alertas en Grafana en absoluto, es mejor que uses alertmanager.<\/p>\n<p><\/p>\n<p><em>S\u00ed, lo uso, pero simplemente me pareci\u00f3 m\u00e1s f\u00e1cil de configurar en Grafana, \u00a1gracias por el consejo!<\/em><\/p>\n<p>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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 descripci\u00f3n de la presentaci\u00f3n de Roman Khavronenko | ProHoster","description":"Les invito a revisar la transcripci\u00f3n de la presentaci\u00f3n de Roman Khavronenko \"ExtendedPromQL\"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/extendedpromql-rasshifrovka-doklada-romana-havronenko","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/75585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=75585"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/75585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/75586"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=75585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=75585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=75585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}