{"id":93294,"date":"2020-09-05T07:42:58","date_gmt":"2020-09-05T05:42:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi"},"modified":"2020-09-05T07:42:58","modified_gmt":"2020-09-05T05:42:58","slug":"logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","title":{"rendered":"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Analizaremos los fundamentos del registro en Docker y Kubernetes, y luego examinaremos dos herramientas que se pueden utilizar sin reservas en producci\u00f3n: Grafana Loki y el stack EFK (Elasticsearch + Fluent Bit + Kibana).<\/p>\n<p><\/p>\n<p><em>El material del art\u00edculo es un resumen de <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/nkmP0-EDb1A\">una conferencia abierta de la escuela \"Slyerm\".<\/a><\/noindex>Si hay inter\u00e9s y, a\u00fan m\u00e1s, la necesidad productiva, se puede completar la formaci\u00f3n; inscr\u00edbase en el curso sobre <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/Tinm9w\">Monitoreo y registro de la infraestructura en Kubernetes.<\/a><\/noindex>.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/565b51e95f609556ad38b9d294ef3f2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"logirovanie-v-docker\">Registro en Docker<\/h2>\n<p><\/p>\n<p>A nivel de Kubernetes, las aplicaciones se ejecutan en pods, pero a un nivel m\u00e1s bajo, de hecho, funcionan normalmente en Docker. Por lo tanto, es necesario configurar el registro de tal manera que se recojan los registros de los contenedores. Los contenedores son iniciados por Docker, por lo que debemos entender c\u00f3mo se estructura el registro a nivel de Docker.<\/p>\n<p><\/p>\n<p>Espero que cada lector sepa que los registros de la aplicaci\u00f3n deben escribirse en stdout\/stderr, y no dentro del contenedor. Docker Daemon agrega los registros, y trabaja precisamente con aquellos registros que se env\u00edan a stdout\/stderr. Adem\u00e1s, escribir registros dentro del contenedor conlleva problemas: el contenedor se hincha con el registro creciente (ya que probablemente no hay Logrotate dentro del contenedor), y Docker Daemon no est\u00e1 al tanto de este registro.<\/p>\n<p><\/p>\n<p>Docker tiene varios controladores de registro o complementos para la recolecci\u00f3n de registros de los contenedores. En la versi\u00f3n gratuita de Docker Community Edition (CE), hay menos controladores de registro que en la edici\u00f3n comercial Docker Enterprise Edition (EE).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/2b05602b54a9075f63713f72c7e74dfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>No he utilizado Docker EE en la pr\u00e1ctica: en Southbridge intentamos adherirnos a soluciones de c\u00f3digo abierto, y a los clientes la mayor\u00eda de las caracter\u00edsticas adicionales de Docker EE no les son necesarias. <\/p>\n<p><\/p>\n<p>Controladores de registro en Docker CE:<\/p>\n<p><\/p>\n<p><strong>local<\/strong> \u2014 registro de registros en archivos internos de Docker Daemon;<br \/>\n<strong>json-file<\/strong> \u2014 creaci\u00f3n de un json-log en la carpeta de cada contenedor;<br \/>\n<strong>journald<\/strong> \u2014 env\u00edo de registros a journald.<\/p>\n<p><\/p>\n<p>Los ajustes de registro en Docker se encuentran en el archivo daemon.json. <\/p>\n<p><\/p>\n<p>En el campo \u201clog-driver\u201d se indica el complemento y en el campo \u201clog-opts\u201d sus configuraciones. En el ejemplo anterior, se ha indicado el complemento \u201cjson-file\u201d, el l\u00edmite de tama\u00f1o del registro es \u201cmax-size\u201d: \u201c10m\u201d; el l\u00edmite en la cantidad de archivos (configuraciones de rotaci\u00f3n) es \u201cmax-file\u201d: \u201c3\u201d; as\u00ed como los valores que se adjuntar\u00e1n a los registros.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/0b86671ee8d3d009da29ba66bc29d4eb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Algunas configuraciones del controlador de registro se pueden establecer a trav\u00e9s de la utilidad de l\u00ednea de comando. Esto es \u00fatil si es necesario iniciar un contenedor separado con otro controlador de registro. <\/p>\n<p><\/p>\n<p>As\u00ed es como se ve el esquema de registro en Docker:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/a45d8e3044780a5b7f20d83e14545d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C\u00f3mo funciona el esquema: un controlador de logs, como json-file, crea archivos. Los recolectores de logs (Rsyslog, Fluentd, Logagent y otros) recogen estos archivos y los env\u00edan a almacenamiento en Elastic, Sematext u otros repositorios.<\/p>\n<p><\/p>\n<h2 id=\"osobennosti-logirovaniya-v-kubernetes\">Caracter\u00edsticas del registro en Kubernetes<\/h2>\n<p><\/p>\n<p>Simplificando, el esquema de registro en Kubernetes se ve as\u00ed: hay un pod, en el cual se ejecuta un contenedor, que env\u00eda logs a stdout\/stderr. Luego Docker crea un archivo y registra los logs, que a su vez puede rotar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/76e6fdbbb9f97851bfa95a7153d8c525.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Analicemos las caracter\u00edsticas del registro en Kubernetes.<\/p>\n<p><\/p>\n<p><strong>Conservar logs entre despliegues<\/strong>. Esta es una condici\u00f3n obligatoria para una correcta configuraci\u00f3n del registro. Si no se mantienen los registros entre despliegues, al salir una nueva versi\u00f3n de la aplicaci\u00f3n, los registros anteriores se sobrescribir\u00e1n, y reiniciar el contenedor tambi\u00e9n conllevar\u00e1 la p\u00e9rdida de registros. Kubernetes tiene una opci\u00f3n \u2014previous, que permite ver los registros de la aplicaci\u00f3n antes del \u00faltimo reinicio del Pod, pero no m\u00e1s all\u00e1.<\/p>\n<p><\/p>\n<p><strong>Agregando logs de todas las instancias<\/strong>. Si los microservicios est\u00e1n alojados en la nube, el proveedor de la nube es responsable del control del sistema. Si los microservicios est\u00e1n en hardware propio, adem\u00e1s de los logs de los contenedores, tambi\u00e9n es necesario recolectar los logs del sistema.<\/p>\n<p><\/p>\n<p>Antes no hab\u00eda herramientas adecuadas para recolectar logs tanto del sistema como de los microservicios. Por lo general, una herramienta recopilaba logs del sistema (por ejemplo, Rsyslog), y otra, los logs de Docker (como journal-bit con la configuraci\u00f3n del controlador de logs de Docker en journald). Intentamos usar journal-bit para recolectar logs tanto de los contenedores (en el controlador de logs de Docker se indicaba que era necesario escribir logs en journald) como del sistema (en CentOS 7 ya existen systemd y journald). Es una soluci\u00f3n funcional, pero no ideal. Si hay muchos logs, journal-bit comienza a tener lag, y se pierden mensajes.<\/p>\n<p><\/p>\n<p>Los experimentos continuaron, y se encontr\u00f3 otro m\u00e9todo. En CentOS 7, los logs del sistema principales (messages, audit, secure) se duplican en var-log en forma de archivos. Tambi\u00e9n se puede configurar Docker para que los logs se guarden en archivos json. Por lo tanto, se pueden recolectar juntos estos archivos de CentOS 7 y Docker.<\/p>\n<p><\/p>\n<p>Con el tiempo, la soluci\u00f3n ELK Stack se volvi\u00f3 popular. Es una combinaci\u00f3n de varias herramientas: Elasticsearch, Logstash y Kibana.<\/p>\n<p><\/p>\n<p>Elasticsearch almacena logs de contenedores, Logstash recolecta logs de las instancias, Kibana permite procesar los logs recibidos y crear gr\u00e1ficos a partir de ellos. Durante un tiempo, se utiliz\u00f3 activamente ELK Stack, pero, en mi opini\u00f3n, su tiempo est\u00e1 pasando. M\u00e1s adelante explicar\u00e9 por qu\u00e9.<\/p>\n<p><\/p>\n<p><strong>Agregar metadatos<\/strong>. Los pods, aplicaciones y contenedores pueden ejecutarse en cualquier lugar. Adem\u00e1s, una aplicaci\u00f3n puede tener m\u00faltiples instancias. Los registros se escriben en un formato \u00fanico, y necesitamos entender qu\u00e9 r\u00e9plica concreta est\u00e1 escribiendo, qu\u00e9 Pod lo est\u00e1 haciendo y en qu\u00e9 namespace se encuentra. Por eso es necesario agregar metadatos a los registros.<\/p>\n<p><\/p>\n<p><strong>Analizar registros<\/strong>. Es curioso, pero los costos de soporte del sistema de registro y monitoreo pueden superar los gastos de la aplicaci\u00f3n principal. Cuando tienes decenas y cientos de miles de registros por segundo, esto parece l\u00f3gico, pero a\u00fan as\u00ed hay que conocer el l\u00edmite. Una de las formas de encontrar ese l\u00edmite es mediante el an\u00e1lisis de registros. <\/p>\n<p><\/p>\n<p>Generalmente, no es necesario recopilar y almacenar todos los registros; solo se debe enviar al almacenamiento una parte, por ejemplo, los registros con estado \u00abwarning\u00bb o \u00aberror\u00bb. En el caso de registros de nginx o controladores de ingreso, solo se deben almacenar aquellos cuyo estado es diferente de 200. Pero este no es un consejo universal: si est\u00e1s construyendo de alguna manera un an\u00e1lisis basado en los registros de Nginx, evidentemente vale la pena recopilarlos. <\/p>\n<p><\/p>\n<p>No se recomienda filtrar registros sin pensar, porque los datos filtrados pueden ser insuficientes para un an\u00e1lisis adecuado. Por otro lado, tal vez el an\u00e1lisis deber\u00eda realizarse no a nivel de registro, sino a nivel de recopilaci\u00f3n de m\u00e9tricas. As\u00ed no tendr\u00e1s que almacenar cientos de miles de l\u00edneas con c\u00f3digo 200. Uno de los enfoques es obtener informaci\u00f3n sobre el tr\u00e1fico y errores desde las m\u00e9tricas de los controladores de ingreso. <\/p>\n<p><\/p>\n<p>En general, aqu\u00ed hay que pensar bien: qu\u00e9 quieres almacenar y durante cu\u00e1nto tiempo, porque de lo contrario surgir\u00eda una situaci\u00f3n en la que el sistema de registro consume m\u00e1s recursos que el proyecto principal.<\/p>\n<p><\/p>\n<p><strong>A\u00fan no hay una soluci\u00f3n est\u00e1ndar para el registro<\/strong>. A diferencia del monitoreo, donde hay una soluci\u00f3n predominante conocida como Prometheus, no existe un est\u00e1ndar en el registro. <\/p>\n<p><\/p>\n<p>En esta conferencia vamos a ver dos herramientas: una popular y la otra que est\u00e1 ganando popularidad. Adem\u00e1s de ellas, hay otras, pero no las abordaremos en este art\u00edculo.<\/p>\n<p><\/p>\n<p>Teniendo en cuenta todas las caracter\u00edsticas mencionadas anteriormente, el registro en Kubernetes se puede representar ahora en el siguiente esquema:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/81f4989c1fb7b1a4ac37524db76fd4e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Queda el registro del contenedor, la rotaci\u00f3n, pero aparece un agente recolector que recoge los registros y los env\u00eda para almacenamiento (en el esquema \u2014 en la Logging Backend). El agente funciona en cada nodo y, por lo general, est\u00e1 ejecut\u00e1ndose en Kubernetes.<\/p>\n<p><\/p>\n<p>Ahora, analicemos las herramientas para la gesti\u00f3n de registros.<\/p>\n<p><\/p>\n<h2 id=\"grafana-loki\">Grafana Loki<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/oss\/loki\/\">Grafana Loki<\/a><\/noindex> ha aparecido recientemente, pero ya se ha vuelto bastante conocido. Sus ventajas: se instala f\u00e1cilmente, consume pocos recursos, no requiere la instalaci\u00f3n de Elasticsearch, ya que almacena datos en una base de datos TSDB (base de datos de series temporales). En el art\u00edculo anterior mencion\u00e9 que Prometheus almacena datos en este tipo de base de datos, y esta es una de las numerosas similitudes entre ambos productos. Los desarrolladores incluso afirman que Loki es \"Prometheus para el mundo del registro\".<\/p>\n<p><\/p>\n<p>Una breve digresi\u00f3n sobre TSDB para quienes no leyeron <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/516748\/\">el art\u00edculo anterior<\/a><\/noindex>: TSDB se maneja muy bien para almacenar grandes cantidades de datos y series temporales, pero no est\u00e1 dise\u00f1ado para almacenamiento a largo plazo. Si por alguna raz\u00f3n necesitas conservar los registros por m\u00e1s de dos semanas, es mejor configurar su transferencia a otra base de datos.<\/p>\n<p><\/p>\n<p>Otra ventaja de Loki es que utiliza Grafana para la visualizaci\u00f3n de datos. Es muy conveniente: en Grafana podemos ver los datos de monitoreo y tambi\u00e9n, al conectar Loki, visualizar los registros. Se pueden crear gr\u00e1ficos a partir de los registros.<\/p>\n<p><\/p>\n<p>La arquitectura de Loki se ve aproximadamente as\u00ed: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/8e4ed48dbb84b7813b96728b9efddcec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con DaemonSet se despliega un agente en todos los servidores del cl\u00faster: Promtail o Fluent Bit. El agente recoge los registros. Loki los recoge y los almacena en su TSDB. A los registros se les a\u00f1aden autom\u00e1ticamente metadatos, lo que es conveniente: se pueden filtrar por Pods, namespaces, nombres de contenedores e incluso por etiquetas.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/docs\/loki\/latest\/installation\/\">Instrucciones para instalar Loki<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Loki funciona en la interfaz familiar de Grafana. Loki incluso tiene su propio lenguaje de consultas, llamado LogQL, que por su nombre y sintaxis se asemeja a PromQL en Prometheus. En la interfaz de Loki hay sugerencias para las consultas, por lo que no es necesario memorizarlas.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/docs\/loki\/latest\/logql\/\">Documentaci\u00f3n del lenguaje LogQL<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/acd3028fa181604be4523096d87e48cb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Loki en la interfaz de Grafana<\/em><\/p>\n<p><\/p>\n<p>Utilizando filtros, en Loki se pueden encontrar c\u00f3digos (\u201c400\u201d, \u201c404\u201d y cualquier otro); ver registros de toda la nodo; filtrar todos los registros que contengan la palabra \u201cerror\u201d. Si haces clic en un registro, se abrir\u00e1 una tarjeta con toda la informaci\u00f3n sobre el evento.<\/p>\n<p><\/p>\n<p>Loki cuenta con suficientes herramientas que permiten extraer los registros necesarios, aunque, sinceramente, t\u00e9cnicamente podr\u00edan ser m\u00e1s. Actualmente, Loki se est\u00e1 desarrollando activamente y ganando popularidad. <\/p>\n<p><\/p>\n<h2 id=\"elastic--fluent-bit--kibana-efk-stack\">Elastic + Fluent Bit + Kibana (EFK Stack)<\/h2>\n<p><\/p>\n<p>El stack EFK es una herramienta de registro m\u00e1s cl\u00e1sica y, a su vez, no menos popular. <\/p>\n<p><\/p>\n<p>Al principio del art\u00edculo se mencionaba ELK (Elasticsearch + Logstash + Kibana), pero este stack ha quedado obsoleto debido a un Logstash que no es muy eficiente y que adem\u00e1s consume muchos recursos. En su lugar, se comenz\u00f3 a usar el m\u00e1s liviano y eficiente Fluentd, y despu\u00e9s de un tiempo, se le uni\u00f3 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fluentbit.io\/manual\/about\/what-is-fluent-bit\">Fluent Bit<\/a><\/noindex> \u2014 un agente recolector a\u00fan m\u00e1s liviano y m\u00e1s eficiente. <\/p>\n<p><\/p>\n<p>Si los desarrolladores son de fiar, Fluent Bit es m\u00e1s de 100 veces mejor en rendimiento que Fluentd: \u00abdonde Fluentd consume 20 MB de RAM, Fluent Bit consumir\u00e1 150 KB\u00bb \u2014 cita directa de la documentaci\u00f3n. Con esto en mente, Fluent Bit ha comenzado a ser m\u00e1s utilizado.<\/p>\n<p><\/p>\n<p>Fluent Bit tiene menos capacidades que Fluentd, pero satisface las necesidades principales, por lo que principalmente utilizamos Fluent Bit.<\/p>\n<p><\/p>\n<p>El esquema de trabajo del stack EFK: el agente recolecta logs de todos los pods (generalmente, es un DaemonSet que se ejecuta en todos los servidores del cl\u00faster) y los env\u00eda al almacenamiento (Elasticsearch, PostgreSQL o Kafka). Kibana se conecta al almacenamiento y extrae toda la informaci\u00f3n necesaria.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/cd5101637d30ab1e5f019fa424147023.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/kibana\">Kibana<\/a><\/noindex> presenta la informaci\u00f3n en una interfaz web conveniente. Hay gr\u00e1ficos, filtros y mucho m\u00e1s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/523a219739b6e7641694b240c61a15d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con los logs se pueden crear completos dashboards.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/21b580f8b4871bdda64692563f53303e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"vozmozhnosti-fluent-bit\">Capacidades de Fluent Bit<\/h2>\n<p><\/p>\n<p>Dado que generalmente se ha o\u00eddo menos sobre Fluent Bit que sobre Logstash, lo examinaremos con m\u00e1s detalle. Fluent Bit se puede dividir l\u00f3gicamente en 6 m\u00f3dulos, a algunos de los cuales se les pueden a\u00f1adir plugins que ampl\u00edan las capacidades de Fluent Bit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Registro en Kubernetes: c\u00f3mo recopilar, almacenar, analizar y procesar logs\" src=\"\/wp-content\/uploads\/2020\/09\/f95a642aad7f5d291e05d8a17d1aaadc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>M\u00f3dulo Input<\/strong> recolecta logs de archivos, servicios systemd e incluso de tcp-socket (solo hay que indicar el endpoint, y Fluent Bit empezar\u00e1 a acceder a \u00e9l). Estas capacidades son suficientes para recolectar logs tanto del sistema como de contenedores.<\/p>\n<p><\/p>\n<p>En producci\u00f3n, usamos m\u00e1s a menudo los plugins <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/inputs\/tail\">tail<\/a><\/noindex> (se puede dirigir a una carpeta con logs) y <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/inputs\/systemd\">systemd<\/a><\/noindex> (se puede especificar de qu\u00e9 servicios recolectar logs).<\/p>\n<p><\/p>\n<p><strong>M\u00f3dulo Parser<\/strong> convierte los logs a un formato uniforme. Por defecto, los logs de Nginx son cadenas. Con un plugin, se puede transformar esta cadena en JSON: definir campos y sus valores. Trabajar con JSON es mucho m\u00e1s f\u00e1cil que con logs en texto plano, ya que permite una mayor flexibilidad en la clasificaci\u00f3n.<\/p>\n<p><\/p>\n<p><strong>M\u00f3dulo Filter<\/strong>. En este nivel, se filtran los logs innecesarios. Por ejemplo, solo se env\u00edan a almacenamiento los logs con el valor \"warning\" o con ciertas etiquetas. Los logs seleccionados se env\u00edan al b\u00fafer.<\/p>\n<p><\/p>\n<p><strong>M\u00f3dulo Buffer<\/strong>. Fluent Bit tiene dos tipos de b\u00fafer: b\u00fafer en memoria y b\u00fafer en disco. El b\u00fafer es un almacenamiento temporal para registros, necesario en caso de errores o fallos. A todos les gustar\u00eda ahorrar en RAM, por lo que generalmente se elige el b\u00fafer en disco. Pero hay que tener en cuenta que antes de ser enviados al disco, los registros se cargan en memoria.<\/p>\n<p><\/p>\n<p><strong>M\u00f3dulo Routing\/Output<\/strong> contiene reglas y direcciones para enviar registros. Como se mencion\u00f3 anteriormente, los registros se pueden enviar a Elasticsearch, PostgreSQL o, por ejemplo, Kafka. <\/p>\n<p><\/p>\n<p>Es interesante que desde Fluent Bit se pueden enviar registros a Fluentd. Dado que el primero es m\u00e1s ligero y menos funcional, se pueden recopilar registros y enviarlos a Fluentd, y all\u00ed, utilizando complementos adicionales, se pueden procesar y enviar a almacenes.<\/p>\n<p><\/p>\n<blockquote><p>Si planeas usar Elasticsearch...<\/p>\n<p>Por \u00faltimo, dos consejos para aquellos que planean usar Elasticsearch como almacenamiento de registros en producci\u00f3n. <\/p>\n<ol>\n<li>Configura alertas usando <noindex><a rel=\"nofollow\" href=\"https:\/\/elastalert.readthedocs.io\/en\/latest\/\">ElastAlert<\/a><\/noindex>. Este programa extrae de la corriente general de registros los mensajes importantes y genera alertas por email u otro canal. Sin embargo, no hace mucho se conoci\u00f3 <em><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Yelp\/elastalert\/issues\/2911\">la triste noticia de que el proyecto podr\u00eda dejar de existir pronto.<\/a><\/noindex><\/em>.<\/li>\n<li>Rotea los registros usando la aplicaci\u00f3n <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/client\/curator\/5.8\/index.html\">Curator<\/a><\/noindex> o mediante la API de Elasticsearch. Elastic, en general, est\u00e1 haciendo pasos significativos ahora para gestionar el ciclo de vida de los \u00edndices sin herramientas externas. En general, no tiene sentido mantener registros durante mucho tiempo: probablemente no se necesitar\u00e1 un registro despu\u00e9s de dos semanas; si es realmente cr\u00edtico, definitivamente habr\u00e1 sido procesado en ese tiempo. Como \u00faltimo recurso, los registros antiguos se pueden archivar y enviar a alg\u00fan lugar para almacenamiento a largo plazo. He escuchado sobre registros especiales que deben ser almacenados por ley durante hasta 5 a\u00f1os. Personalmente, no me he encontrado con eso, pero no considerar\u00eda esa informaci\u00f3n equivalente a los registros normales, y posiblemente incluso los almacenar\u00eda por separado.<\/li>\n<\/ol>\n<p>\n<\/p><\/blockquote>\n<p>Continuar\u00e1\u2026<\/p>\n<p><\/p>\n<p><em>Autor: Marcel Ibraev, administrador certificado de Kubernetes, ingeniero en la empresa <noindex><a rel=\"nofollow\" href=\"https:\/\/to.slurm.io\/TBhTzQ\">Southbridge<\/a><\/noindex>, orador y desarrollador de cursos <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/Tinm9w\">Slurm<\/a><\/noindex>.<\/em><\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/517636\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana). \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0432\u044b\u0436\u0438\u043c\u043a\u0430 \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u043b\u0435\u043a\u0446\u0438\u0438 \u0448\u043a\u043e\u043b\u044b \u00ab\u0421\u043b\u0451\u0440\u043c\u00bb. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0443\u0440\u0441 \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93295,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93294","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana)..\" \/>\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\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi\" \/>\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\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Kubernetes: \u043a\u0430\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c, \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana)..\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi\" \/>\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-09-05T05:42:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-05T05:42:58+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\udd47Registro en Kubernetes: c\u00f3mo recolectar, almacenar, analizar y procesar registros | ProHoster","description":"Analizaremos los fundamentos del registro en Docker y Kubernetes, y luego revisaremos dos herramientas que se pueden usar sin dudar en producci\u00f3n: Grafana Loki y la pila EFK (Elasticsearch + Fluent Bit + Kibana).","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","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\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Kubernetes: \u043a\u0430\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c, \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 | ProHoster","og:description":"\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana)..","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","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-09-05T05:42:58+00:00","article:modified_time":"2020-09-05T05:42:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93294","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 11:50:29","updated":"2022-09-27 18:43:48","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\/93294","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=93294"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/93294\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/93295"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=93294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=93294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=93294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}