{"id":56049,"date":"2020-02-04T00:00:00","date_gmt":"2020-02-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere"},"modified":"2020-02-18T14:04:13","modified_gmt":"2020-02-18T11:04:13","slug":"highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>La pr\u00f3xima conferencia HighLoad++ se llevar\u00e1 a cabo el 6 y 7 de abril de 2020 en San Petersburgo. Detalles y entradas. <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">en el enlace<\/a><\/noindex>. HighLoad++ Mosc\u00fa 2018. Sala \u00abMosc\u00fa\u00bb. 9 de noviembre, 15:00. Tes\u00eds y <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">presentaci\u00f3n<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Monitoreo \u2014 en l\u00ednea y anal\u00edtica.<br \/>\n* Principales limitaciones de la plataforma ZABBIX.<br \/>\n* Soluci\u00f3n para escalar el almacenamiento de an\u00e1lisis.<br \/>\n* Optimizaci\u00f3n del servidor ZABBIX.<br \/>\n* Optimizaci\u00f3n de la interfaz de usuario.<br \/>\n* Experiencia operativa del sistema bajo cargas superiores a 40k NVPS.<br \/>\n* Resumen breve.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Mikhail Makurov (en adelante \u2013 MM):<\/b> \u2013 \u00a1Hola a todos!<\/p>\n<p><b>Maxim Chernetsov (en adelante \u2013 MC):<\/b> \u2013 \u00a1Buenos d\u00edas!<\/p>\n<p><b>MM:<\/b> \u2013 Perm\u00edtanme presentar a Maxim. Max es un ingeniero talentoso, el mejor especialista en redes que conozco. Maxim se encarga de las redes y servicios, su desarrollo y operaci\u00f3n.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 Y me gustar\u00eda hablar de Mikhail. Mikhail es un desarrollador en C. Ha escrito varias soluciones de alto rendimiento para el procesamiento de tr\u00e1fico para nuestra empresa. Vivimos y trabajamos en los Urales, en la ciudad de hombres duros, Cheli\u00e1binsk, en la empresa \u2018Intersvyaz\u2019. Nuestra empresa es un proveedor de servicios de internet y televisi\u00f3n por cable para un mill\u00f3n de personas en 16 ciudades.<\/p>\n<p><b>MM:<\/b> \u2013 Y vale la pena decir que \u2018Intersvyaz\u2019 es mucho m\u00e1s que un simple proveedor; es una empresa de TI. La mayor\u00eda de nuestras soluciones son desarrolladas por nuestro departamento de TI.<\/p>\n<p><b>A:<\/b> desde servidores que procesan tr\u00e1fico, hasta el centro de atenci\u00f3n y la aplicaci\u00f3n m\u00f3vil. En el departamento de TI hay alrededor de 80 personas con competencias muy diversas.<\/p>\n<h3>Sobre Zabbix y su arquitectura<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Ahora intentar\u00e9 establecer un r\u00e9cord personal y explicar en un minuto qu\u00e9 es Zabbix (en adelante \u2013 \u2018Zabbix\u2019).<\/p>\n<p>\u2018Zabbix\u2019 se posiciona como un sistema de monitoreo \u2018listo para usar\u2019 a nivel empresarial. Tiene muchas funciones que simplifican la vida: reglas avanzadas de escalamiento, API para integraci\u00f3n, agrupamiento y auto-descubrimiento de hosts y m\u00e9tricas. \u2018Zabbix\u2019 cuenta con lo que se denomina herramientas de escalabilidad \u2013 proxies. \u2018Zabbix\u2019 es un sistema de c\u00f3digo abierto.<\/p>\n<p>Breve descripci\u00f3n de la arquitectura. Se puede decir que est\u00e1 compuesta por tres componentes:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Servidor. Escrito en C. Con un procesamiento y transferencia de informaci\u00f3n entre hilos bastante complejos. Todo el procesamiento ocurre all\u00ed: desde la recepci\u00f3n hasta el almacenamiento en la base de datos.<\/li>\n<li>Todos los datos se almacenan en la base de datos. \u2018Zabbix\u2019 soporta MySQL, PostgreSQL y Oracle.<\/li>\n<li>La interfaz web est\u00e1 escrita en PHP. En la mayor\u00eda de los sistemas, se suministra con el servidor Apache, pero funciona de manera m\u00e1s eficiente en combinaci\u00f3n con nginx + php.<\/li>\n<\/ul>\n<p>\nHoy queremos contarles una historia de la vida de nuestra empresa relacionada con 'Zabbix'...<\/p>\n<h3>Historia de la vida de la empresa 'Intersvyaz'. \u00bfQu\u00e9 tenemos y qu\u00e9 necesitamos?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hace 5 o 6 meses. Una vez despu\u00e9s del trabajo...<\/i><\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Misha, hola! Me alegra haberte atrapado, tengo algo de qu\u00e9 hablar. Nuevamente tuvimos problemas con el monitoreo. Durante una gran emergencia, todo se ralentizaba y no hab\u00eda informaci\u00f3n sobre el estado de la red. Lamentablemente, esto ya ha ocurrido antes. Necesito tu ayuda. \u00a1Hagamos que nuestro monitoreo funcione en cualquier circunstancia!<\/p>\n<p><b>MM:<\/b> \u2013 Pero primero sincroniz\u00e9monos. No he mirado eso en un par de a\u00f1os. Seg\u00fan recuerdo, abandonamos Nagios y pasamos a 'Zabbix' hace unos 8 a\u00f1os. Y ahora tenemos, parece, 6 servidores potentes y alrededor de una decena de proxies. \u00bfEstoy confundido?<\/p>\n<p><b>MC:<\/b> \u2013 Casi. 15 servidores, algunos de los cuales son m\u00e1quinas virtuales. Lo m\u00e1s importante es que esto no nos salva en el momento en que m\u00e1s lo necesitamos. Cada vez que hay una emergencia, los servidores se ralentizan y no se ve nada. Hemos intentado optimizar la configuraci\u00f3n, pero no proporciona una mejora de rendimiento \u00f3ptima.<\/p>\n<p><b>MM:<\/b> \u2013 Entiendo. \u00bfHan revisado algo, han encontrado algo en el diagn\u00f3stico?<\/p>\n<p><b>MC:<\/b> \u2013 Lo primero con lo que tenemos que lidiar es con la base de datos. MySQL ya est\u00e1 constantemente cargado, almacenando nuevas m\u00e9tricas, y cuando 'Zabbix' comienza a generar un mont\u00f3n de eventos, la base literalmente se sumerge en s\u00ed misma durante varias horas. Ya te he hablado sobre la optimizaci\u00f3n de la configuraci\u00f3n, pero este a\u00f1o actualizamos el hardware: los servidores tienen m\u00e1s de cien gigas de memoria y arreglos de discos en RAID SSD, no tiene sentido aumentar eso linealmente. \u00bfQu\u00e9 haremos?<\/p>\n<p><b>MM:<\/b> \u2013 Entiendo. De hecho, MySQL es una base de datos LTP. Parece que ya no es adecuada para almacenar un archivo de m\u00e9tricas de nuestro tama\u00f1o. Vamos a averiguarlo.<\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Vamos!<\/p>\n<h3>Integraci\u00f3n de Zabbix y Clickhouse como resultado del hackathon.<\/h3>\n<p>\nDespu\u00e9s de un tiempo, obtuvimos datos interesantes:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa mayor parte del espacio en nuestra base estaba ocupada por el archivo de m\u00e9tricas y menos del 1 % se utilizaba para configuraciones, plantillas y ajustes. Para ese momento, ya llev\u00e1bamos m\u00e1s de un a\u00f1o utilizando una soluci\u00f3n de Big Data basada en Clickhouse. La direcci\u00f3n a seguir era evidente para nosotros. En nuestro 'Hackathon' de primavera, escrib\u00ed una integraci\u00f3n de Zabbix con Clickhouse para el servidor y el frontend. En ese momento, Zabbix ya contaba con soporte para ElasticSearch, y decidimos compararlos.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Comparaci\u00f3n entre Clickhouse y Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> Para la comparaci\u00f3n, generamos una carga similar a la que proporcionaba el servidor Zabbix y observamos c\u00f3mo se comportaban los sistemas. Escrib\u00edamos datos en bloques de 1000 filas, utilizando CURL. Supon\u00edamos de antemano que Clickhouse ser\u00eda m\u00e1s eficiente para el perfil de carga que genera Zabbix. Los resultados superaron nuestras expectativas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn condiciones id\u00e9nticas, Clickhouse escrib\u00eda tres veces m\u00e1s datos en las pruebas. Ambas sistemas consum\u00edan recursos de manera muy eficiente al leer datos. Sin embargo, ElasticSearch requer\u00eda una cantidad considerable de CPU para escribir:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn resumen, Clickhouse super\u00f3 con creces a ElasticSearch en consumo de CPU y velocidad. Gracias a la compresi\u00f3n de datos, Clickhouse utiliza 11 veces menos espacio en disco y realiza aproximadamente 30 veces menos operaciones de disco:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> S\u00ed, la gesti\u00f3n del subsistema de disco en Clickhouse est\u00e1 implementada de manera muy eficiente. Se pueden utilizar enormes discos SATA para bases de datos y obtener velocidades de escritura de cientos de miles de filas por segundo. El sistema soporta sharding y replicaci\u00f3n 'de caja', y es bastante f\u00e1cil de configurar. Estamos m\u00e1s que satisfechos con su funcionamiento durante un a\u00f1o.<\/p>\n<p>Para optimizar recursos, se puede instalar Clickhouse junto a la base de datos principal existente, ahorrando as\u00ed una gran cantidad de tiempo de CPU y operaciones en disco. Hemos trasladado el archivo de m\u00e9tricas a los cl\u00fasteres de Clickhouse ya existentes:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHemos aliviado tanto la base de datos MySQL principal que pudimos combinarla en una sola m\u00e1quina con el servidor Zabbix y prescindir de un servidor dedicado para MySQL.<\/p>\n<h3>\u00bfC\u00f3mo funciona el polling en Zabbix?<\/h3>\n<p>\n<i>Hace 4 meses<\/i><\/p>\n<p><b>MM:<\/b> Bueno, \u00bfse pueden olvidar los problemas con la base de datos?<\/p>\n<p><b>MC:<\/b> \u00a1Exacto! Otra tarea que necesitamos resolver es la lenta recopilaci\u00f3n de datos. Ahora nuestros 15 servidores proxy est\u00e1n sobrecargados con procesos SNMP y polling. Y no hay m\u00e1s remedio que seguir instalando nuevos servidores.<\/p>\n<p><b>MM:<\/b> \u2013 Genial. Pero primero cu\u00e9ntame, \u00bfc\u00f3mo funciona el polling en 'Zabbix'?<\/p>\n<p><b>MC:<\/b> \u2013 En resumen, hay 20 tipos de m\u00e9tricas y una docena de formas de obtenerlas. 'Zabbix' puede recopilar datos ya sea en modo 'solicitud \u2013 respuesta', o esperar nuevos datos a trav\u00e9s de la 'Interfaz Trapper'.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCabe mencionar que en la versi\u00f3n original de 'Zabbix' este m\u00e9todo (Trapper) es el m\u00e1s r\u00e1pido. <\/p>\n<p>Existen servidores proxy para distribuci\u00f3n de carga:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLos proxies pueden realizar las mismas funciones de recopilaci\u00f3n que el servidor 'Zabbix', recibiendo tareas de \u00e9l y enviando las m\u00e9tricas recopiladas a trav\u00e9s de la interfaz Trapper. Este es el m\u00e9todo recomendado oficialmente para la distribuci\u00f3n de carga. Adem\u00e1s, los proxies son \u00fatiles para monitorear infraestructuras remotas que operan a trav\u00e9s de NAT o en canales lentos:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 La arquitectura est\u00e1 clara. Necesitamos ver el c\u00f3digo fuente...<\/p>\n<p><i>Un par de d\u00edas despu\u00e9s<\/i><\/p>\n<h3>Historia de c\u00f3mo nmap y fping ganaron<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Parece que he encontrado algo.<\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Cu\u00e9ntame!<\/p>\n<p><b>MM:<\/b> \u2013 He descubierto que, al verificar la disponibilidad, 'Zabbix' comprueba un m\u00e1ximo de 128 hosts a la vez. Intent\u00e9 aumentar esta cifra a 500 y elimin\u00e9 el intervalo entre paquetes en su ping, lo que duplic\u00f3 el rendimiento. Pero me gustar\u00eda n\u00fameros a\u00fan mayores.<\/p>\n<p><b>MC:<\/b> \u2013 En mi experiencia, a veces tengo que verificar la disponibilidad de miles de hosts, y no he encontrado nada m\u00e1s r\u00e1pido que nmap. Estoy seguro de que es el m\u00e9todo m\u00e1s r\u00e1pido. \u00a1Prob\u00e9moslo! Necesitamos aumentar significativamente el n\u00famero de hosts por iteraci\u00f3n.<\/p>\n<p><b>MM:<\/b> \u2013 \u00bfVerificar m\u00e1s de quinientos? \u00bf600?<\/p>\n<p><b>MC:<\/b> \u2013 Al menos un par de miles.<\/p>\n<p><b>MM:<\/b> \u2013 De acuerdo. Lo m\u00e1s importante que quer\u00eda mencionar: encontr\u00e9 que la mayor\u00eda del polling en 'Zabbix' se realiza de manera sincr\u00f3nica. Necesitamos transformarlo a un modo as\u00edncrono. Entonces podremos aumentar radicalmente el n\u00famero de m\u00e9tricas que los pollers recopilan, especialmente si aumentamos la cantidad de m\u00e9tricas por iteraci\u00f3n.<\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Genial! \u00bfY cu\u00e1ndo?<\/p>\n<p><b>MM:<\/b> \u2013 Como siempre, ayer.<\/p>\n<p><b>MC:<\/b> \u2013 Comparamos ambas versiones de fping y nmap:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn un gran n\u00famero de hosts, nmap result\u00f3 ser hasta cinco veces m\u00e1s eficiente de lo esperado. Dado que nmap solo verifica la disponibilidad y el tiempo de respuesta, trasladamos el conteo de p\u00e9rdidas a los disparadores y significamos redujimos los intervalos de verificaci\u00f3n de disponibilidad. Encontramos que el n\u00famero \u00f3ptimo de hosts para nmap est\u00e1 en torno a las 4,000 por iteraci\u00f3n. Nmap nos permiti\u00f3 reducir el uso de CPU para las verificaciones de disponibilidad en tres veces y acortar el intervalo de 120 segundos a 10.<\/p>\n<h3>Optimizaci\u00f3n del sondeo<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Luego nos ocupamos de los sondeadores. Principalmente nos interesaba la recopilaci\u00f3n SNMP y los agentes. En \u00abZabbix\u00bb, el sondeo se realiza de manera sincr\u00f3nica y se han tomado medidas especiales para aumentar la eficiencia del sistema. En modo sincr\u00f3nico, la falta de disponibilidad de hosts provoca una degradaci\u00f3n significativa del sondeo. Existe todo un sistema de estados, hay procesos especiales, los llamados sondeadores no disponibles, que solo operan con hosts inalcanzables:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste es un comentario que demuestra la matriz de estados, toda la complejidad del sistema de transiciones que se requiere para que el sistema siga siendo eficiente. Adem\u00e1s, el propio sondeo sincr\u00f3nico es bastante lento:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor eso, miles de hilos de sondeadores en una decena de proxies no pudieron recopilar la cantidad necesaria de datos. La implementaci\u00f3n as\u00edncrona no solo resolvi\u00f3 los problemas con la cantidad de hilos, sino que tambi\u00e9n simplific\u00f3 significativamente el sistema de estados de hosts inaccesibles, porque con cualquier n\u00famero chequeado en una iteraci\u00f3n de sondeo, el tiempo de espera m\u00e1ximo era de 1 timeout:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAdicionalmente, modificamos y perfeccionamos el sistema de sondeo para consultas SNMP. La cuesti\u00f3n es que la mayor\u00eda no pueden responder a m\u00faltiples consultas SNMP al mismo tiempo. Por eso creamos un modo h\u00edbrido en el que el sondeo SNMP de un mismo host se realiza de manera as\u00edncrona:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsto se hace para todo un grupo de hosts. Este modo no es m\u00e1s lento que uno completamente as\u00edncrono, ya que la consulta de una centena y media de valores SNMP sigue siendo mucho m\u00e1s r\u00e1pida que 1 timeout.<\/p>\n<p>Nuestros experimentos mostraron que el n\u00famero \u00f3ptimo de consultas en una iteraci\u00f3n es aproximadamente 8,000 en el sondeo SNMP. En total, la transici\u00f3n al modo as\u00edncrono permiti\u00f3 aumentar la productividad del sondeo 200 veces, en varios cientos de veces.<\/p>\n<p><b>MC:<\/b> Las optimizaciones de polling recibidas mostraron que no solo podemos deshacernos de todos los proxies, sino tambi\u00e9n reducir los intervalos de muchas comprobaciones, y los proxies dejar\u00e1n de ser necesarios como forma de dividir la carga.<\/p>\n<p><i>Hace aproximadamente tres meses<\/i><\/p>\n<h3>\u00a1Cambia la arquitectura, aumenta la carga!<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Bueno, Max, \u00bfes hora de pasar a producci\u00f3n? Necesito un servidor potente y un buen ingeniero.<\/p>\n<p><b>MC:<\/b> \u2013 Bien, lo planificaremos. Ya era hora de avanzar del estancamiento de 5 mil m\u00e9tricas por segundo.<\/p>\n<p><i>Ma\u00f1ana despu\u00e9s de la actualizaci\u00f3n<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, nos hemos actualizado, pero hasta la ma\u00f1ana hemos vuelto atr\u00e1s... Adivina, \u00bfqu\u00e9 velocidad hemos logrado alcanzar?<\/p>\n<p><b>MM:<\/b> \u2013 M\u00e1ximo 20 mil.<\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Aj\u00e1, 25! Desafortunadamente, estamos donde comenzamos.<\/p>\n<p><b>MM:<\/b> \u2013 \u00bfY por qu\u00e9 es eso? \u00bfHan realizado alg\u00fan diagn\u00f3stico?<\/p>\n<p><b>MC:<\/b> \u2013 S\u00ed, por supuesto. Aqu\u00ed, por ejemplo, un top interesante:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Vamos a verlo. Veo que hemos probado una enorme cantidad de hilos de polling:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPero al mismo tiempo no pudimos utilizar el sistema ni a la mitad:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY el rendimiento total es bastante peque\u00f1o, alrededor de 4 mil m\u00e9tricas por segundo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00bfHay algo m\u00e1s?<\/p>\n<p><b>MC:<\/b> \u2013 S\u00ed, strace de uno de los pollers:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Aqu\u00ed se ve claramente que el proceso de polling est\u00e1 esperando \"sem\u00e1foros\". Estas son bloqueos:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 No entiendo.<\/p>\n<p><b>MM:<\/b> \u2013 Mira, esto parece una situaci\u00f3n cuando un mont\u00f3n de hilos intenta trabajar con recursos que solo puede manejar uno a la vez. Entonces, todo lo que pueden hacer es compartir ese recurso en el tiempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY la producci\u00f3n total al trabajar con tal recurso est\u00e1 limitada por la velocidad de un solo n\u00facleo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsta clase de problemas se puede resolver de dos maneras.<\/p>\n<p>Mejorar el hardware de la m\u00e1quina, pasando a n\u00facleos m\u00e1s r\u00e1pidos:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO cambiar la arquitectura y al mismo tiempo \u2013 la carga:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 A prop\u00f3sito, en la m\u00e1quina de prueba usaremos menos n\u00facleos que en la de producci\u00f3n, \u00a1pero ser\u00e1n alrededor de 1.5 veces m\u00e1s r\u00e1pidos por frecuencia por n\u00facleo!<\/p>\n<p><b>MM:<\/b> \u2013 \u00bfEntendido? Hay que revisar el c\u00f3digo del servidor.<\/p>\n<h3>El camino de los datos en el servidor Zabbix<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Para entenderlo, empezamos a analizar c\u00f3mo se transmiten los datos dentro del servidor \"Zabbix\":<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00bfGenial la imagen, verdad? Vamos a recorrerla paso a paso para aclarar m\u00e1s o menos. Hay hilos y servicios responsables de la recopilaci\u00f3n de datos:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLas m\u00e9tricas recopiladas se env\u00edan a trav\u00e9s de un socket al Preprocessor manager, donde se almacenan en una cola:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl \"Preprocessor manager\" env\u00eda los datos a sus trabajadores, quienes ejecutan instrucciones de preprocesamiento y los devuelven a trav\u00e9s del mismo socket:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDespu\u00e9s de esto, el gestor de preprocesador los guarda en la memoria cach\u00e9 del historial:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDesde all\u00ed, los recogen los sincronizadores de historial, que realizan muchas funciones: por ejemplo, calcular disparadores, llenar la memoria cach\u00e9 de valores y, lo m\u00e1s importante, guardar m\u00e9tricas en el almacenamiento de historial. En general, el proceso es complicado y bastante confuso.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Lo primero que vimos fue que la mayor\u00eda de los flujos compiten por lo que se llama 'cach\u00e9 de configuraci\u00f3n' (un \u00e1rea de memoria donde se almacenan todas las configuraciones del servidor). Especialmente muchas bloqueos son causados por los flujos responsables de la extracci\u00f3n de datos:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026ya que en la configuraci\u00f3n se almacenan no solo m\u00e9tricas con sus par\u00e1metros, sino tambi\u00e9n colas de las que los sondeadores toman informaci\u00f3n sobre qu\u00e9 hacer a continuaci\u00f3n. Cuando hay muchos sondeadores y uno bloquea la configuraci\u00f3n, los dem\u00e1s esperan respuestas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Los sondeadores no deben competir<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor lo tanto, lo primero que hicimos fue dividir la cola en 4 partes y permitir a los sondeadores bloquear estas colas, estas partes, simult\u00e1neamente en condiciones seguras:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsto elimin\u00f3 la competencia por la cach\u00e9 de configuraci\u00f3n, y la velocidad de los sondeadores aument\u00f3 significativamente. Pero luego nos encontramos con que el gestor de preprocesador comenz\u00f3 a acumular cola de tareas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>El gestor de preprocesador debe ser capaz de priorizar<\/h3>\n<p>\nEsto ocurr\u00eda en casos en los que le faltaba rendimiento. Entonces, lo \u00fanico que pod\u00eda hacer era acumular solicitudes de procesos de recolecci\u00f3n de datos y apilarlas en el b\u00fafer hasta que consum\u00eda toda la memoria y fallaba:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara resolver este problema, a\u00f1adimos un segundo socket, que fue dedicado especialmente a los trabajadores:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe este modo, el gestor de preprocesador obtuvo la posibilidad de priorizar su trabajo y, en caso de expansi\u00f3n del b\u00fafer, ralentizar la extracci\u00f3n, dando a los trabajadores la oportunidad de recoger ese b\u00fafer:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLuego descubrimos que una de las razones de la ralentizaci\u00f3n eran los propios trabajadores, ya que compet\u00edan por un recurso completamente irrelevante para su trabajo. Esta problem\u00e1tica la presentamos como una correcci\u00f3n de errores, y en nuevas versiones de 'Zabbix' ya est\u00e1 resuelta:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Aumentamos la cantidad de sockets \u2013 obtenemos resultados<\/h3>\n<p>\nLuego, el propio gestor de preprocesador se convirti\u00f3 en un cuello de botella, ya que es un solo hilo. Se limitaba por la velocidad del n\u00facleo, alcanzando una velocidad m\u00e1xima de aproximadamente 70 mil m\u00e9tricas por segundo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor eso hicimos cuatro, con cuatro conjuntos de sockets y trabajadores:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY esto permiti\u00f3 aumentar la velocidad a aproximadamente 130 mil m\u00e9tricas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa no linealidad del crecimiento se explica porque hubo competencia por el cach\u00e9 de historia. Cuatro administradores de preprocesadores y sincronizadores de historia compitieron por \u00e9l. En ese momento, est\u00e1bamos obteniendo en la m\u00e1quina de prueba aproximadamente 130 mil m\u00e9tricas por segundo, utilizando alrededor del 95 % de la CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Hace aproximadamente 2,5 meses<\/i><\/p>\n<h3>Renunciar a snmp-community aument\u00f3 los NVPs en una vez y media<\/h3>\n<p>\n<b>MM:<\/b> \u2013 \u00a1Max, necesito una nueva m\u00e1quina de prueba! Ya no cabemos en la actual.<\/p>\n<p><b>MC:<\/b> \u2013 \u00bfY qu\u00e9 hay ahora?<\/p>\n<p><b>MM:<\/b> \u2013 Ahora \u2013 130k NVPs y el procesador 'en la estanter\u00eda'.<\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Vaya! \u00a1Incre\u00edble! Espera, tengo dos preguntas. Seg\u00fan mis c\u00e1lculos, nuestra necesidad es de alrededor de 15-20 mil m\u00e9tricas por segundo. \u00bfPor qu\u00e9 necesitamos m\u00e1s?<\/p>\n<p><b>MM:<\/b> \u2013 Queremos llevar el asunto hasta el final. Queremos ver cu\u00e1nto podemos sacar de este sistema.<\/p>\n<p><b>MC:<\/b> \u2013 Pero\u2026<\/p>\n<p><b>MM:<\/b> \u2013 Pero para el negocio es in\u00fatil.<\/p>\n<p><b>MC:<\/b> \u2013 Entendido. Y la segunda pregunta: \u00bfpodremos mantener lo que hay ahora por nuestra cuenta, sin ayuda del desarrollador?<\/p>\n<p><b>MM:<\/b> \u2013 No lo creo. Cambiar el manejo de la cach\u00e9 de configuraci\u00f3n es un problema. Afecta los cambios en la mayor\u00eda de los flujos y es bastante complicado de mantener. Probablemente ser\u00e1 muy dif\u00edcil de soportar.<\/p>\n<p><b>MC:<\/b> \u2013 Entonces necesitamos alguna alternativa.<\/p>\n<p><b>MM:<\/b> \u2013 Hay una opci\u00f3n. Podemos cambiar a n\u00facleos r\u00e1pidos, al mismo tiempo que renunciamos al nuevo sistema de bloqueo. Aun as\u00ed obtendremos un rendimiento de 60-80 mil m\u00e9tricas. Y podremos dejar todo el resto del c\u00f3digo. ClickHouse y la sondeo as\u00edncrono funcionar\u00e1n. Y ser\u00e1 f\u00e1cil de mantener.<\/p>\n<p><b>MC:<\/b> \u2013 \u00a1Maravilloso! Propongo detenernos aqu\u00ed.<\/p>\n<p>Despu\u00e9s de optimizar la parte del servidor, finalmente pudimos implementar el nuevo c\u00f3digo en producci\u00f3n. Renunciamos a parte de los cambios en favor de la transici\u00f3n a una m\u00e1quina con n\u00facleos r\u00e1pidos y minimizamos la cantidad de cambios en el c\u00f3digo. Tambi\u00e9n simplificamos la configuraci\u00f3n y, en la medida de lo posible, nos deshicimos de los macros en los elementos de datos, ya que son fuentes de bloqueos adicionales.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor ejemplo, renunciar al macro snmp-community, que se encuentra com\u00fanmente en la documentaci\u00f3n y ejemplos, nos permiti\u00f3 acelerar los NVPs aproximadamente en 1,5 veces.<\/p>\n<p><i>Despu\u00e9s de dos d\u00edas en producci\u00f3n<\/i><\/p>\n<h3>Eliminamos las ventanas emergentes de historia de incidentes<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Misha, hemos estado usando el sistema durante dos d\u00edas, y todo funciona. \u00a1Pero solo cuando todo est\u00e1 en funcionamiento! Tuvimos trabajos de mantenimiento con la migraci\u00f3n de un segmento de red bastante grande, y nuevamente verificamos manualmente qu\u00e9 hab\u00eda funcionado y qu\u00e9 no.<\/p>\n<p><b>MM:<\/b> \u2013 \u00a1No puede ser! Verificamos todo 10 veces. El servidor maneja incluso la incomunicaci\u00f3n total de la red de inmediato.<\/p>\n<p><b>MC:<\/b> \u2013 Lo entiendo todo: el servidor, la base, top, austat, los registros \u2013 todo r\u00e1pido... Pero estamos mirando la interfaz web, y all\u00ed el procesador est\u00e1 \"en el estante\" en el servidor y esto:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Entiendo. Vamos a revisar la web. Descubrimos que en situaciones con un gran n\u00famero de incidentes activos, la mayor\u00eda de los widgets operativos comenzaban a funcionar muy lentamente:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa causa de esto fue la generaci\u00f3n de ventanas emergentes con el historial de incidentes, que se generan para cada elemento en la lista. Por lo tanto, renunciamos a la generaci\u00f3n de estas ventanas (comentamos 5 l\u00edneas en el c\u00f3digo), y esto resolvi\u00f3 nuestros problemas.<\/p>\n<p>El tiempo de carga de los widgets, incluso en condiciones de total inaccesibilidad, se redujo de varios minutos a unos aceptables para nosotros 10-15 segundos, y el historial todav\u00eda se puede ver con un clic en el tiempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Despu\u00e9s del trabajo. Hace 2 meses.<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, \u00bfte vas? Necesitamos hablar.<\/p>\n<p><b>MM:<\/b> \u2013 No ten\u00eda planes. \u00bfAlgo m\u00e1s con Zabbix?<\/p>\n<p><b>MC:<\/b> \u2013 No, tranquilo. Solo quer\u00eda decir: \u00a1todo funciona, gracias! Yo invito a una cerveza.<\/p>\n<h3>Zabbix es efectivo<\/h3>\n<p>\n\u00abZabbix\u00bb es un sistema y funci\u00f3n bastante vers\u00e1til y completo. Se puede utilizar para instalaciones peque\u00f1as \"listo para usar\", pero a medida que crecen las necesidades, es necesario optimizarlo. Para almacenar un gran archivo de m\u00e9tricas, usa un almacenamiento adecuado:<\/p>\n<ul>\n<li>puedes usar herramientas integradas en forma de integraci\u00f3n con \u00abElasticsearch\u00bb o exportaci\u00f3n de historia a archivos de texto (disponible desde la cuarta versi\u00f3n);<\/li>\n<li>puedes aprovechar nuestra experiencia e integraci\u00f3n con \u00abClickHouse\u00bb.<\/li>\n<\/ul>\n<p>\nPara un aumento dr\u00e1stico en la velocidad de recolecci\u00f3n de m\u00e9tricas, rec\u00f3gelas mediante m\u00e9todos as\u00edncronos y env\u00edalas a trav\u00e9s de la interfaz del trapper al servidor \u00abZabbix\u00bb; o puedes usar un parche para la asincron\u00eda de los pollers de \u00abZabbix\u00bb.<\/p>\n<p>Zabbix est\u00e1 escrito en C y es bastante eficiente. Sin embargo, algunas limitaciones arquitect\u00f3nicas permiten aumentar su rendimiento y, seg\u00fan nuestra experiencia, obtener m\u00e1s de 100 mil m\u00e9tricas en una m\u00e1quina de un solo procesador.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>El famoso parche Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Quiero a\u00f1adir un par de puntos. Todo el informe actual, todas las pruebas y cifras se han presentado para la configuraci\u00f3n que utilizamos. En ella estamos recolectando aproximadamente 20 mil m\u00e9tricas por segundo. Si intentas entender si esto funcionar\u00e1 para ti, puedes compararlo. Lo que se ha comentado hoy est\u00e1 disponible en GitHub como un parche: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/miklert\/zabbix\">github.com\/miklert\/zabbix<\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl parche incluye:<\/p>\n<ul>\n<li>integraci\u00f3n completa con ClickHouse (tanto para el servidor Zabbix como para el frontend);<\/li>\n<li>soluciones a problemas con el gestor de preprocesadores;<\/li>\n<li>polling as\u00edncrono.<\/li>\n<\/ul>\n<p>\nEl parche es compatible con toda la versi\u00f3n 4, incluyendo lts. Es probable que funcione con pocos cambios en la versi\u00f3n 3.4.<\/p>\n<p>Gracias por su atenci\u00f3n.<\/p>\n<h3>Preguntas<\/h3>\n<p>\nPregunta de la audiencia (A): \u2013 \u00a1Buenos d\u00edas! Por favor, d\u00edganme, \u00bftienen planes de interactuar intensamente con el equipo de Zabbix o ellos con ustedes, para que esto no sea un parche, sino un comportamiento normal de Zabbix?<\/p>\n<p><b>MM:<\/b> \u2013 S\u00ed, nos comprometemos a hacer algunos cambios. Algunas cosas quedar\u00e1n como un parche.<\/p>\n<p><b>A:<\/b> \u2013 \u00a1Muchas gracias por la excelente presentaci\u00f3n! Por favor, d\u00edganme, despu\u00e9s de aplicar el parche, \u00bfseguir\u00e1 habiendo soporte por parte de Zabbix y c\u00f3mo se podr\u00e1 actualizar a versiones m\u00e1s altas? \u00bfHabr\u00e1 posibilidad de actualizar Zabbix despu\u00e9s de su parche a 4.2, 5.0?<\/p>\n<p><b>MM:<\/b> \u2013 No puedo decir nada sobre el soporte. Si yo fuera soporte t\u00e9cnico de Zabbix, probablemente dir\u00eda que no, porque es c\u00f3digo externo. En cuanto a la base de c\u00f3digo 4.2, nuestra posici\u00f3n es la siguiente: \u00abNos adaptaremos con el tiempo y actualizaremos a la siguiente versi\u00f3n\u00bb. Por lo tanto, durante un tiempo publicaremos parches para versiones actualizadas. Ya he comentado en la presentaci\u00f3n: la cantidad de cambios con las versiones sigue siendo bastante peque\u00f1a. Creo que la migraci\u00f3n de 3.4 a 4 nos tom\u00f3, parece, unos 15 minutos. Hubo algunos cambios, pero no muy importantes.<\/p>\n<p><b>A:<\/b> \u2013 Entonces, \u00bfplanean mantener su parche y se puede instalar sin problemas en producci\u00f3n, recibiendo actualizaciones de alguna manera?<\/p>\n<p><b>MM:<\/b> \u2013 Lo recomendamos encarecidamente. Esto resuelve muchos problemas.<\/p>\n<p><b>MC:<\/b> Me gustar\u00eda enfatizar una vez m\u00e1s que los cambios que no afectan la arquitectura y no est\u00e1n relacionados con bloqueos o colas son modulares, se encuentran en m\u00f3dulos separados. Incluso de forma independiente, con cambios menores, se pueden mantener con bastante facilidad.<\/p>\n<p><b>MM:<\/b> Si te interesan los detalles, 'ClickHouse' utiliza lo que se llama una biblioteca de historia. Est\u00e1 desacoplada: es una copia del soporte de 'Elasticsearch', es decir, es configurable. El polling solo cambia los pollers. Creemos que esto funcionar\u00e1 durante mucho tiempo.<\/p>\n<p><b>A:<\/b> Muchas gracias. \u00bfPodr\u00edas decirme si hay alguna documentaci\u00f3n sobre los cambios realizados?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS en un servidor\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> La documentaci\u00f3n es el parche. Obviamente, con la introducci\u00f3n de 'ClickHouse' y nuevos tipos de pollers, surgen nuevas opciones de configuraci\u00f3n. En el enlace de la \u00faltima diapositiva hay una breve descripci\u00f3n de c\u00f3mo usarlo.<\/p>\n<h3>Sobre la sustituci\u00f3n de fping por nmap<\/h3>\n<p>\n<b>A:<\/b> \u00bfC\u00f3mo lo implementaron al final? \u00bfPuedes dar ejemplos concretos: son strapppers y un script externo? \u00bfQu\u00e9 comprueba tan r\u00e1pido una cantidad tan enorme de hosts? \u00bfC\u00f3mo obtienen estos hosts? \u00bfHay que alimentarlos a nmap, conseguirlos de alguna parte, almacenarlos, ejecutar algo...?<\/p>\n<p><b>MM:<\/b> Genial. \u00a1Muy buena pregunta! La idea es esta. Modificamos la biblioteca (ICMP ping, parte de 'Zabbix') para las verificaciones ICMP, donde se especifica la cantidad de paquetes: uno (1), y el c\u00f3digo intenta usar nmap. Es decir, esto se convierte en un trabajo interno de 'Zabbix', se ha convertido en un trabajo interno del ping. En consecuencia, no se requiere ninguna sincronizaci\u00f3n ni uso de trapper. Se hizo de forma consciente para mantener el sistema \u00edntegro y no ocuparnos de la sincronizaci\u00f3n de dos sistemas de bases: qu\u00e9 verificar, subir a trav\u00e9s del poller, y si nuestra carga no se rompi\u00f3... Es mucho m\u00e1s simple.<\/p>\n<p><b>A:<\/b> \u00bfEsto tambi\u00e9n funciona para proxies?<\/p>\n<p><b>MM:<\/b> S\u00ed, pero no lo hemos probado. El c\u00f3digo de polling es el mismo en 'Zabbix' y en el servidor. Deber\u00eda funcionar. Una vez m\u00e1s, subrayo: el rendimiento del sistema es tal que no necesitamos proxies.<\/p>\n<p><b>MC:<\/b> La respuesta correcta a la pregunta es: \"\u00bfPara qu\u00e9 necesitas un proxy en este sistema?\" Solo por el NAT o para monitorear a trav\u00e9s de alg\u00fan canal lento...<\/p>\n<p><b>A:<\/b> \u00bfEst\u00e1s utilizando 'Zabbix' como alertador, si entend\u00ed correctamente? \u00bfO los gr\u00e1ficos (donde est\u00e1 la capa de archivo) se han trasladado a otro sistema, como Grafana? \u00bfO no utilizan esta funcionalidad?<\/p>\n<p><b>MM:<\/b> \u2013 Quiero enfatizar nuevamente: hemos realizado una integraci\u00f3n completa. Estamos vertiendo el historial en \u00abClickHouse\u00bb, pero hemos modificado el frontend de PHP. El frontend de PHP se conecta a \u00abClickHouse\u00bb y genera todos los gr\u00e1ficos desde all\u00ed. Al mismo tiempo, si soy honesto, tenemos una parte que construye a partir del mismo \u00abClickHouse\u00bb, utilizando los mismos datos de \u00abZabbix\u00bb para otras sistemas de visualizaci\u00f3n gr\u00e1fica.<\/p>\n<p><b>MC:<\/b> \u2013 Incluido en \u00abGrafana\u00bb.<\/p>\n<h3>\u00bfC\u00f3mo se tom\u00f3 la decisi\u00f3n de asignar recursos?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Comparta un poco de la cocina interna. \u00bfC\u00f3mo se tom\u00f3 la decisi\u00f3n de que era necesario destinar recursos a una revisi\u00f3n significativa del producto? Esto, en general, implica ciertos riesgos. Y d\u00edgame, por favor, en el contexto de que planean mantener nuevas versiones: \u00bfc\u00f3mo se justifica esta decisi\u00f3n desde el punto de vista de la gesti\u00f3n?<\/p>\n<p><b>MM:<\/b> \u2013 Parece que no contamos muy bien la dramatizaci\u00f3n de la historia. Nos encontramos en una situaci\u00f3n en la que hab\u00eda que hacer algo, y seguimos, esencialmente, con dos equipos paralelos:<\/p>\n<ul>\n<li>Uno se encarg\u00f3 de lanzar el sistema de monitoreo con nuevos m\u00e9todos: monitoreo como servicio, un conjunto est\u00e1ndar de soluciones de c\u00f3digo abierto que combinamos y luego intentamos adaptar el proceso de negocio para trabajar con el nuevo sistema de monitoreo.<\/li>\n<li>Paralelamente, tuvimos un programador entusiasta que trabaj\u00f3 en esto (sobre s\u00ed mismo). Result\u00f3 que \u00e9l gan\u00f3.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 \u00bfY cu\u00e1l es el tama\u00f1o del equipo?<\/p>\n<p><b>MC:<\/b> \u2013 Aqu\u00ed est\u00e1n frente a ustedes.<\/p>\n<p><b>A:<\/b> \u2013 Entonces, \u00bfcomo siempre se necesita un apasionado?<\/p>\n<p><b>MM:<\/b> \u2013 No s\u00e9 qu\u00e9 es un apasionado.<\/p>\n<p><b>A:<\/b> \u2013 En este caso, aparentemente, usted. Muchas gracias, ustedes son geniales.<\/p>\n<p><b>MM:<\/b> \u2013 Gracias.<\/p>\n<h3>Sobre los parches para Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Para un sistema que utiliza proxies (por ejemplo, en algunos sistemas distribuidos), \u00bfes posible adaptar su soluci\u00f3n y parchar, digamos, a los pollers, proxies y parcialmente el preprocesador de \u00abZabbix\u00bb; y su interacci\u00f3n? \u00bfEs posible optimizar los desarrollos existentes para un sistema con varios proxies?<\/p>\n<p><b>MM:<\/b> \u2013 S\u00e9 que el servidor de \u00abZabbix\u00bb se compila con la ayuda de proxies (se compila y se obtiene c\u00f3digo). No hemos verificado esto en producci\u00f3n. No estoy seguro de ello, pero creo que el preprocesador-gestor no se utiliza en el proxy. La tarea del proxy es tomar un conjunto de m\u00e9tricas de \u00abZabbix\u00bb, espelearlas (tambi\u00e9n guarda la configuraci\u00f3n, la base de datos local) y devolverlas al servidor de \u00abZabbix\u00bb. El preprocesamiento lo realizar\u00e1 luego el servidor mismo, cuando lo reciba.<\/p>\n<p>El inter\u00e9s por los proxies es comprensible. Vamos a comprobarlo. Es un tema interesante.<\/p>\n<p><b>A:<\/b> \u2013 La idea era esta: si se pueden parchear los pollers, se pueden parchear para proxies y adaptar la interacci\u00f3n con el servidor, y el preprocesador solo para esos fines se adapta en el servidor.<\/p>\n<p><b>MM:<\/b> \u2013 Creo que es a\u00fan m\u00e1s simple. Tom\u00e1is el c\u00f3digo, aplic\u00e1is el parche, luego configur\u00e1is como necesit\u00e9is \u2013 constru\u00eds proxies (por ejemplo, con ODBC) y distribu\u00eds el c\u00f3digo parcheado por los sistemas. Donde sea necesario, constru\u00eds proxies, donde sea necesario, servidores.<\/p>\n<p><b>A:<\/b> \u2013 \u00bfNo ser\u00e1 necesario parchear adicionalmente la transmisi\u00f3n de proxies al servidor?<\/p>\n<p><b>MC:<\/b> \u2013 No, es est\u00e1ndar.<\/p>\n<p><b>MM:<\/b> \u2013 En realidad, no se mencion\u00f3 una de las ideas. Siempre hemos mantenido el equilibrio entre una explosi\u00f3n de ideas y la cantidad de cambios, y la facilidad de soporte.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"3yRt9jSwrlg\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/3yRt9jSwrlg\/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><\/p>\n<h3>Un poco de publicidad \ud83d\ude42<\/h3>\n<p>\nGracias por permanecer con nosotros. \u00bfTe gustan nuestros art\u00edculos? \u00bfQuieres ver m\u00e1s contenido interesante? Ap\u00f3yanos haciendo un pedido o recomendando a tus conocidos, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS en la nube para desarrolladores desde $4.99<\/a><\/noindex>, <b>un an\u00e1logo \u00fanico de servidores entry-level que hemos dise\u00f1ado para Ti:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toda la verdad sobre VPS (KVM) E5-2697 v3 (6 n\u00facleos) 10GB DDR4 480GB SSD 1Gbps desde $19, o c\u00f3mo dividir correctamente un servidor?<\/a><\/noindex> (disponibles opciones con RAID1 y RAID10, hasta 24 n\u00facleos y hasta 40GB DDR4).<\/p>\n<p><b>\u00bfDell R730xd a mitad de precio en el centro de datos Equinix Tier IV en \u00c1msterdam?<\/b> Solo aqu\u00ed <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB desde $199<\/a><\/noindex> \u00a1en los Pa\u00edses Bajos! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 \u00a1desde $99!<\/b><\/b> Lee sobre c\u00f3mo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Construir infraestructura de clase empresarial usando servidores Dell R730xd E5-2650 v4 que cuestan 9000 euros a un precio asequible?<\/a><\/noindex><br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/486540\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. HighLoad++ Moscow 2018. \u0417\u0430\u043b \u00ab\u041c\u043e\u0441\u043a\u0432\u0430\u00bb. 9 \u043d\u043e\u044f\u0431\u0440\u044f, 15:00. \u0422\u0435\u0437\u0438\u0441\u044b \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f. * \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u2014 \u043e\u043d\u043b\u0430\u0439\u043d \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430. * \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b ZABBIX. * \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438. * \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 ZABBIX. * \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f UI. * \u041e\u043f\u044b\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-56049","post","type-post","status-publish","format-standard","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=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\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\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\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\udd47HighLoad++, \u041c\u0438\u0445\u0430\u0438\u043b \u041c\u0430\u043a\u0443\u0440\u043e\u0432, \u041c\u0430\u043a\u0441\u0438\u043c \u0427\u0435\u0440\u043d\u0435\u0446\u043e\u0432 (\u0418\u043d\u0442\u0435\u0440\u0441\u0432\u044f\u0437\u044c): Zabbix, 100kNVPS \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\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-02-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:13+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\udd47HighLoad++, Mikhail Makurov, Maxim Chernetcov (Intersvyaz): Zabbix, 100kNVPS en un solo servidor | ProHoster","description":"La pr\u00f3xima conferencia HighLoad++ se llevar\u00e1 a cabo el 6 y 7 de abril de 2020 en San Petersburgo. Detalles y entradas en el enlace.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","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\udd47HighLoad++, \u041c\u0438\u0445\u0430\u0438\u043b \u041c\u0430\u043a\u0443\u0440\u043e\u0432, \u041c\u0430\u043a\u0441\u0438\u043c \u0427\u0435\u0440\u043d\u0435\u0446\u043e\u0432 (\u0418\u043d\u0442\u0435\u0440\u0441\u0432\u044f\u0437\u044c): Zabbix, 100kNVPS \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 | ProHoster","og:description":"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","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-02-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56049","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 19:31:44","updated":"2022-09-30 17:33:39","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\/56049","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=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}