{"id":52115,"date":"2019-11-01T00:00:00","date_gmt":"2019-10-31T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury"},"modified":"2020-02-18T13:59:47","modified_gmt":"2020-02-18T10:59:47","slug":"monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","title":{"rendered":"Monitoreo como servicio: sistema modular para arquitecturas de microservicios","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hoy en nuestro proyecto, adem\u00e1s del c\u00f3digo monol\u00edtico, funcionan decenas de microservicios. Cada uno de ellos requiere ser monitoreado. Hacer esto en tales vol\u00famenes por parte de ingenieros de DevOps es problem\u00e1tico. Hemos desarrollado un sistema de monitoreo que funciona como un servicio para los desarrolladores. Ellos pueden escribir m\u00e9tricas en el sistema de monitoreo, utilizarlas, construir tableros basados en ellas y agregar alertas que se activar\u00e1n al alcanzar valores umbral. De los ingenieros de DevOps, solo quedan la infraestructura y la documentaci\u00f3n. <\/p>\n<p>Esta publicaci\u00f3n es la transcripci\u00f3n de mi presentaci\u00f3n en nuestra <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/tomicro\">secci\u00f3n<\/a><\/noindex> en RIT++. Muchos nos pidieron que hici\u00e9ramos versiones textuales de las conferencias de all\u00ed. Si estuviste en la conferencia o viste el video, no encontrar\u00e1s nada nuevo. Y a los dem\u00e1s, bienvenidos a continuaci\u00f3n. Les contar\u00e9 c\u00f3mo llegamos a este sistema, c\u00f3mo funciona y c\u00f3mo planeamos actualizarlo. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/000b8fdc8fb16aa76ce545ff2aa4e767.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Pasado: esquemas y planes <\/h3>\n<p>\n\u00bfC\u00f3mo llegamos al sistema de monitoreo existente? Para responder a esta pregunta, debemos retroceder al a\u00f1o 2015. As\u00ed se ve\u00eda entonces: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/d955f9bcdb5f5a5a54720c77113ca85d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCont\u00e1bamos con alrededor de 24 nodos encargados del monitoreo. Aqu\u00ed hay un mont\u00f3n de diferentes cron jobs, scripts, demonios que monitorean algo de alguna manera, env\u00edan mensajes, realizan funciones. Pensamos que cuanto m\u00e1s avanz\u00e1ramos, menos viable ser\u00eda tal sistema. No ten\u00eda sentido desarrollarlo: era demasiado engorroso. <br \/>\nDecidimos elegir aquellos elementos de monitoreo que conservar\u00edamos y desarrollar, y aquellos de los que nos despedir\u00edamos. Resultaron ser 19. Solo quedaron Graphite, agregadores y Grafana como tablero. Pero, \u00bfc\u00f3mo se ver\u00e1 el nuevo sistema? As\u00ed: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/57d220113d0b76c05874b5d774bff8af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTenemos un almacenamiento de m\u00e9tricas: son Graphite, que estar\u00e1n basados en discos SSD r\u00e1pidos, y ciertos agregadores para m\u00e9tricas. Luego, Grafana para mostrar los tableros y Moira como herramienta de alertas. Tambi\u00e9n quer\u00edamos desarrollar un sistema para buscar anomal\u00edas. <\/p>\n<h3>Est\u00e1ndar: Monitoreo 2.0<\/h3>\n<p>\nAs\u00ed se ve\u00edan los planes en 2015. Pero necesit\u00e1bamos preparar no solo la infraestructura y el servicio, sino tambi\u00e9n la documentaci\u00f3n para ello. Desarrollamos un est\u00e1ndar corporativo que llamamos monitoreo 2.0. \u00bfCu\u00e1les eran los requisitos del sistema? <\/p>\n<ul>\n<li>disponibilidad continua; <\/li>\n<li>intervalo de almacenamiento de m\u00e9tricas = 10 segundos; <\/li>\n<li>almacenamiento estructurado de m\u00e9tricas y dashboards; <\/li>\n<li>SLA &gt; 99,99% <\/li>\n<li>recolecci\u00f3n de m\u00e9tricas de eventos a trav\u00e9s de UDP (!). <\/li>\n<\/ul>\n<p>\nNecesit\u00e1bamos UDP porque tenemos un gran flujo de tr\u00e1fico y eventos que generan m\u00e9tricas. Si escribi\u00e9ramos todas de inmediato en Graphite, el almacenamiento colapsar\u00eda. Tambi\u00e9n elegimos prefijos de primer nivel para todas las m\u00e9tricas. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/d24c4474b19b532a48cef4d4376287ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCada uno de los prefijos tiene alguna propiedad. Hay m\u00e9tricas para servidores, redes, contenedores, recursos, aplicaciones, etc. Se ha implementado un filtrado claro, estricto y tipificado, donde aceptamos m\u00e9tricas de primer nivel y las dem\u00e1s simplemente las descartamos. As\u00ed es como planeamos este sistema en 2015. \u00bfY ahora? <\/p>\n<h3>Actualidad: esquema de interacci\u00f3n de los componentes de monitoreo<\/h3>\n<p>\nPrimero monitoreamos aplicaciones: nuestro c\u00f3digo PHP, aplicaciones y microservicios; en resumen, todo lo que escriben nuestros desarrolladores. Todas las aplicaciones env\u00edan m\u00e9tricas a trav\u00e9s de UDP al agregador Brubeck (statsd, reescrito en C). Result\u00f3 ser el m\u00e1s r\u00e1pido seg\u00fan las pruebas sint\u00e9ticas. Y ya env\u00eda m\u00e9tricas agregadas a Graphite a trav\u00e9s de TCP. <\/p>\n<p>Tiene un tipo de m\u00e9tricas llamado temporizadores. Es una herramienta muy \u00fatil. Por ejemplo, para cada conexi\u00f3n de usuario con el servicio, env\u00edas a Brubeck una m\u00e9trica con el tiempo de respuesta. Llegaron un mill\u00f3n de respuestas, y el agregador produjo solo 10 m\u00e9tricas. Tienes la cantidad de usuarios, el tiempo de respuesta m\u00e1ximo, m\u00ednimo y promedio, la mediana y 4 percentiles. Luego los datos se transmiten a Graphite y los vemos todos en vivo. <\/p>\n<p>Tambi\u00e9n tenemos agregaci\u00f3n para m\u00e9tricas de hardware, software, m\u00e9tricas del sistema y nuestro antiguo sistema de monitoreo Munin (que estuvo en funcionamiento hasta 2015). Todo esto lo recopilamos a trav\u00e9s del demonio CollectD en C (que tiene una serie de plugins integrados, puede consultar todos los recursos del sistema de alojamiento en el que est\u00e1 instalado, solo tienes que especificar en la configuraci\u00f3n d\u00f3nde escribir los datos) y escribimos los datos en Graphite. Tambi\u00e9n admite plugins de Python y scripts de shell, as\u00ed que puedes crear tus soluciones personalizadas: CollectD recoger\u00e1 estos datos de un host local o remoto (supongamos que tienes Curl) y los enviar\u00e1 a Graphite. <\/p>\n<p>A continuaci\u00f3n, enviamos todas las m\u00e9tricas que hemos recopilado a Carbon-c-relay. Esta es una soluci\u00f3n de Carbon Relay de Graphite, ajustada en C. Es un enrutador que recopila todas las m\u00e9tricas que enviamos desde nuestros agregadores y las enruta a trav\u00e9s de los nodos. Tambi\u00e9n, en la etapa de enrutamiento, verifica la validez de las m\u00e9tricas. Primero, deben corresponder al esquema de prefijos que mencion\u00e9 antes y, segundo, deben ser v\u00e1lidas para Graphite. De lo contrario, se descartan. <\/p>\n<p>Luego, Carbon-c-relay env\u00eda las m\u00e9tricas al cl\u00faster de Graphite. Usamos Carbon-cache, reescrito en Go, como nuestro principal almacenamiento de m\u00e9tricas. Go-carbon, debido a su multitarea, supera con creces el rendimiento de Carbon-cache. Acepta datos y los escribe en discos utilizando el paquete whisper (el est\u00e1ndar, escrito en Python). Para leer datos de nuestros almacenes, utilizamos la API de Graphite. Funciona mucho m\u00e1s r\u00e1pido que el Graphite WEB est\u00e1ndar. \u00bfQu\u00e9 sucede con los datos despu\u00e9s? <\/p>\n<p>Pasamos a Grafana. Usamos nuestros cl\u00fasteres de Graphite como la fuente principal de datos, adem\u00e1s de que tenemos Grafana como interfaz web para mostrar m\u00e9tricas y construir paneles de control. Cada uno de nuestros servicios tiene su propio panel. Luego, construyen gr\u00e1ficos donde se muestran las m\u00e9tricas que registran desde sus aplicaciones. Adem\u00e1s de Grafana, tenemos SLAM. Este es un demonio en Python que calcula el SLA basado en los datos de Graphite. Como mencion\u00e9, tenemos decenas de microservicios, cada uno con sus propios requisitos. Con SLAM consultamos la documentaci\u00f3n y la comparamos con lo que hay en Graphite y evaluamos cu\u00e1n bien se cumplen los requisitos respecto a la disponibilidad de nuestros servicios. <\/p>\n<p>Avancemos: la alerta. Est\u00e1 organizada con un sistema robusto: Moira. Es independiente porque tiene su propio Graphite bajo el cap\u00f3. Desarrollada por el equipo de SKB \u00abKontur\u00bb, escrita en Python y Go, completamente de c\u00f3digo abierto. Moira recibe el mismo flujo que se dirige a los Graphites. Si por alguna raz\u00f3n su almacenamiento falla, su sistema de alertas seguir\u00e1 funcionando.<\/p>\n<p>Implementamos Moira en Kubernetes, utilizando un cl\u00faster de servidores Redis como base de datos principal. Como resultado, obtuvimos un sistema tolerante a fallos. Compara el flujo de m\u00e9tricas con una lista de disparadores: si no hay menciones, desecha la m\u00e9trica. De este modo, puede procesar gigabytes de m\u00e9tricas por minuto. <\/p>\n<p>Adem\u00e1s, lo conectamos a un LDAP corporativo, que permite a cada usuario del sistema corporativo crear notificaciones para los disparadores existentes (o nuevos). Dado que Moira incluye Graphite, admite todas sus funciones. Primero, tomas una l\u00ednea y la copias en Grafana. Observas c\u00f3mo se visualizan los datos en los gr\u00e1ficos. Luego, tomas esa misma l\u00ednea y la copias en Moira. Le agregas l\u00edmites y obtienes alertas. Para hacer todo esto, no necesitas ning\u00fan conocimiento espec\u00edfico. Moira puede enviar alertas por SMS, correo electr\u00f3nico, en Jira, Slack... Tambi\u00e9n admite la ejecuci\u00f3n de scripts personalizados. Cuando ocurre un disparador y est\u00e1 suscrita a un script o binario personalizado, lo ejecuta y le entrega JSON a trav\u00e9s de stdin. Por lo tanto, tu programa debe analizarlo. Lo que hagas con este JSON depende de ti. Puedes enviarlo a Telegram, abrir tareas en Jira, hacer lo que quieras. <\/p>\n<p>Adem\u00e1s, utilizamos un desarrollo propio para alertas: Imagotag. Adaptamos un panel usado normalmente para etiquetas de precios en tiendas a nuestras necesidades. Mostramos los disparadores de Moira en \u00e9l. Ah\u00ed se indica su estado y cu\u00e1ndo ocurrieron. Parte del equipo de desarrollo abandon\u00f3 las notificaciones en Slack y correo en favor de este panel. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/bcf454c96adaa0cff81f5e56db5b715c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY dado que somos una empresa progresista, tambi\u00e9n monitorizamos Kubernetes en este sistema. Lo integraron a trav\u00e9s de Heapster, que instalamos en el cl\u00faster. Este recolecta datos y los env\u00eda a Graphite. En consecuencia, el esquema se ve as\u00ed: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/cca0f2f9f590fc84609d48e52ebd0d21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Componentes de monitoreo<\/h3>\n<p>Aqu\u00ed tienes una lista de enlaces a los componentes que utilizamos para esta tarea. Todos son de c\u00f3digo abierto. <\/p>\n<h4>Graphite:<\/h4>\n<p><\/p>\n<ul>\n<li>go-carbon: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lomik\/go-carbon\">github.com\/lomik\/go-carbon<\/a><\/noindex><\/li>\n<li>whisper: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/graphite-project\/whisper\">github.com\/graphite-project\/whisper<\/a><\/noindex> <\/li>\n<li>graphite-api: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/brutasse\/graphite-api\">github.com\/brutasse\/graphite-api<\/a><\/noindex> <\/li>\n<\/ul>\n<h4>Carbon-c-relay: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grobian\/carbon-c-relay\">github.com\/grobian\/carbon-c-relay<\/a><\/noindex> <\/p>\n<h4>Brubeck: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">github.com\/github\/brubeck<\/a><\/noindex> <\/p>\n<h4>Collectd:<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/collectd.org\/\">collectd.org<\/a><\/noindex><\/p>\n<h4>Moira: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moira-alert\">github.com\/moira-alert<\/a><\/noindex> <\/p>\n<h4>Grafana: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">grafana.com<\/a><\/noindex> <\/p>\n<h4>Heapster: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/heapster\">github.com\/kubernetes\/heapster<\/a><\/noindex><\/p>\n<h3>Estad\u00edsticas<\/h3>\n<p>\nY aqu\u00ed hay algunos n\u00fameros sobre c\u00f3mo funciona nuestro sistema. <\/p>\n<h4>Agregador (brubeck)<\/h4>\n<p>\nN\u00famero de m\u00e9tricas: ~ 300 000 \/ seg<br \/>\nIntervalo de env\u00edo de m\u00e9tricas a Graphite: 30 seg<br \/>\nUso de recursos del servidor: ~ 6% CPU (se refiere a servidores completos); ~ 1Gb RAM; ~ 3 Mbps LAN<\/p>\n<h4>Graphite (go-carbon)<\/h4>\n<p>\nN\u00famero de m\u00e9tricas: ~ 1 600 000 \/ min<br \/>\nIntervalo de actualizaci\u00f3n de m\u00e9tricas: 30 seg<br \/>\nEsquema de almacenamiento de m\u00e9tricas: 30seg 35d, 5min 90d, 10min 365d (esto proporciona una comprensi\u00f3n de lo que sucede con el servicio a largo plazo) <br \/>\nUso de recursos del servidor: ~ 10% CPU; ~ 20Gb RAM; ~ 30 Mbps LAN<\/p>\n<h3>Flexibilidad<\/h3>\n<p>\nEn Avito valoramos mucho la flexibilidad en nuestro servicio de monitoreo. \u00bfPor qu\u00e9 es as\u00ed? En primer lugar, sus componentes son intercambiables: tanto los propios componentes como sus versiones. En segundo lugar, la mantenibilidad. Dado que todo el proyecto est\u00e1 construido sobre c\u00f3digo abierto, usted mismo puede modificar el c\u00f3digo, realizar cambios y puede implementar funciones que no est\u00e1n disponibles de manera predeterminada. Se utilizan stacks bastante comunes, principalmente Go y Python, por lo que es bastante sencillo hacerlo. <\/p>\n<p>Aqu\u00ed hay un ejemplo de un problema que realmente surgi\u00f3. Una m\u00e9trica en Graphite es un archivo. Tiene un nombre. El nombre del archivo = el nombre de la m\u00e9trica. Y hay una ruta hacia \u00e9l. Los nombres de los archivos en Linux est\u00e1n limitados a 255 caracteres. Y tenemos (como 'clientes internos') a personas del departamento de bases de datos. Nos dicen: \u201cQueremos monitorear nuestras consultas SQL. Y no son 255 caracteres, sino 8 MB cada una. Queremos mostrarlas en Grafana, ver los par\u00e1metros de esa consulta, y a\u00fan mejor, queremos ver el top de esas consultas. Ser\u00eda genial si se mostrara en tiempo real. Y a\u00fan mejor ser\u00eda incluirlas en alertas. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoreo como servicio: sistema modular para arquitecturas de microservicios\" src=\"\/wp-content\/uploads\/2019\/11\/e1136c7fd0b6156c0c3fd49bab54737e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ejemplo de consulta SQL tomada como ejemplo de <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/9.6\/queries-with\">el sitio postgrespro.ru<\/a><\/noindex> <\/i><\/p>\n<p>Levantamos un servidor Redis y nuestros plugins Collectd, que acceden a Postgres y recogen todos los datos, enviamos las m\u00e9tricas a Graphite. Pero reemplazamos el nombre de la m\u00e9trica por hashes. Este mismo hash lo enviamos a Redis como clave, y toda la consulta SQL como valor. Solo nos queda hacer que Grafana pueda acceder a Redis y obtener esta informaci\u00f3n. Abrimos la API de Graphite, ya que es la interfaz principal de interacci\u00f3n de todos los componentes de monitoreo con Graphite, y all\u00ed introducimos una nueva funci\u00f3n llamada aliasByHash() \u2014 recibimos el nombre de la m\u00e9trica de Grafana y lo utilizamos en la consulta a Redis como clave, obteniendo como respuesta el valor de la clave, que es nuestra \u201cconsulta SQL\u201d. As\u00ed, logramos mostrar en Grafana la consulta SQL, que te\u00f3ricamente no se pod\u00eda visualizar all\u00ed, junto con sus estad\u00edsticas (llamadas, filas, tiempo total, \u2026). <\/p>\n<h3>Resultados <\/h3>\n<p>\n<b>Disponibilidad.<\/b> Nuestro servicio de monitoreo est\u00e1 disponible 24\/7 desde cualquier aplicaci\u00f3n y cualquier c\u00f3digo. Si tienes acceso a los almacenes, puedes enviar datos al servicio. El lenguaje no importa, las soluciones no importan. Solo necesitas saber c\u00f3mo abrir un socket, enviar la m\u00e9trica y cerrar el socket. <\/p>\n<p><b>Confiabilidad.<\/b> Todos los componentes son tolerantes a fallos y manejan nuestras cargas de trabajo de manera eficiente. <\/p>\n<p><b>Bajo umbral de entrada.<\/b> Para usar este sistema, no necesitas aprender lenguajes de programaci\u00f3n ni consultas en Grafana. Simplemente abre tu aplicaci\u00f3n, introduces el socket que enviar\u00e1 m\u00e9tricas a Graphite, lo cierras, abres Grafana, creas paneles all\u00ed y observas el comportamiento de tus m\u00e9tricas, recibiendo notificaciones a trav\u00e9s de Moira.<\/p>\n<p><b>Autonom\u00eda.<\/b> Todo esto se puede hacer de forma independiente, sin ayuda de ingenieros DevOps. Y esto es un gran beneficio, porque puedes monitorear tu proyecto ahora mismo, sin necesidad de pedir ayuda \u2014 ni para comenzar a trabajar, ni para realizar cambios. <\/p>\n<h3>\u00bfA qu\u00e9 aspiramos? <\/h3>\n<p>\nTodo lo mencionado a continuaci\u00f3n no son solo pensamientos abstractos, sino a lo que se han dado al menos los primeros pasos. <\/p>\n<ol>\n<li>Detector de anomal\u00edas. Queremos implementar un servicio que vaya a nuestros almacenes de Graphite y verifique cada m\u00e9trica con diversos algoritmos. Ya tenemos algoritmos que queremos revisar, tenemos datos, y sabemos c\u00f3mo trabajar con ellos.\n<\/li>\n<li>Metadatos. Tenemos muchos servicios que cambian con el tiempo, al igual que las personas que trabajan con ellos. Mantener la documentaci\u00f3n manualmente no es una opci\u00f3n. Por lo tanto, ahora se integran metadatos en nuestros microservicios. Ah\u00ed se especifica qui\u00e9n lo desarroll\u00f3, los lenguajes con los que interact\u00faa, los requisitos de SLA, a d\u00f3nde y a qui\u00e9n enviar las notificaciones. Al desplegar el servicio, todos los datos de la entidad se crean autom\u00e1ticamente. Al final, obtienes dos enlaces: uno para los disparadores y otro para los tableros en Grafana.\n<\/li>\n<li>Monitoreo en cada hogar. Creemos que todos los desarrolladores deber\u00edan usar un sistema as\u00ed. De esta manera, siempre entiendes d\u00f3nde est\u00e1 tu tr\u00e1fico, qu\u00e9 le sucede, d\u00f3nde cae y d\u00f3nde tiene sus puntos d\u00e9biles. Si, por ejemplo, algo llega y colapsa tu servicio, no te enterar\u00e1s durante una llamada del gerente, sino por una alerta, y podr\u00e1s abrir los registros recientes y ver qu\u00e9 ocurri\u00f3.\n<\/li>\n<li>Alto rendimiento. Nuestro proyecto est\u00e1 en constante crecimiento y hoy procesa alrededor de 2,000,000 de valores de m\u00e9tricas por minuto. Hace un a\u00f1o, este indicador era de 500,000. Y el crecimiento contin\u00faa, lo que significa que en alg\u00fan momento Graphite (whisper) comenzar\u00e1 a sobrecargar mucho el subsistema de disco. Como ya mencion\u00e9, este sistema de monitoreo es bastante vers\u00e1til gracias a la intercambiabilidad de sus componentes. Algunos mantienen y ampl\u00edan constantemente su infraestructura espec\u00edficamente para Graphite, pero decidimos tomar otro camino: usar <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.yandex\/\">ClickHouse<\/a><\/noindex> como almacenamiento de nuestras m\u00e9tricas. Esta transici\u00f3n est\u00e1 casi completada, y pronto contar\u00e9 m\u00e1s en detalle c\u00f3mo se llev\u00f3 a cabo: cu\u00e1les fueron las dificultades y c\u00f3mo se superaron, c\u00f3mo se llev\u00f3 a cabo el proceso de migraci\u00f3n, describir\u00e9 los componentes elegidos como envoltura y sus configuraciones. \n<\/li>\n<\/ol>\n<p>\n\u00a1Gracias por su atenci\u00f3n! Hagan sus preguntas sobre el tema, intentar\u00e9 responder aqu\u00ed o en las siguientes publicaciones. Quiz\u00e1s alguien tenga experiencia construyendo un sistema de monitoreo similar o haciendo la transici\u00f3n a Clickhouse en una situaci\u00f3n similar: comp\u00e1rtanlo en los comentarios.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/335410\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b, [&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-52115","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\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\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\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\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\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\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=\"2019-10-31T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:59:47+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\udd47Monitoreo como servicio: sistema modular para arquitectura de microservicios | ProHoster","description":"Hoy en nuestro proyecto, adem\u00e1s del c\u00f3digo monol\u00edtico, funcionan decenas de microservicios. Cada uno de ellos requiere ser monitoreado. Hacer esto a gran escala por parte de ingenieros de DevOps es problem\u00e1tico.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","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\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster","og:description":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","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":"2019-10-31T21:00:00+00:00","article:modified_time":"2020-02-18T10:59:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52115","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":"2026-01-24 02:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:49:49","updated":"2026-01-24 02:30:22","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\/52115","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=52115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/52115\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=52115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=52115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=52115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}