{"id":11816,"date":"2021-09-01T00:00:17","date_gmt":"2021-09-01T07:00:17","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=11816"},"modified":"2025-06-13T21:33:25","modified_gmt":"2025-06-14T04:33:25","slug":"fluent-bit-tips-tricks-log-forwarding-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","title":{"rendered":"11 Ejemplos de Fluent Bit, Consejos y Trucos para Log Forwarding con Couchbase"},"content":{"rendered":"<p><strong>Reenv\u00edo y procesamiento de registros con Couchbase<\/strong> es m\u00e1s f\u00e1cil que nunca.<\/p>\n<p>Disponemos de soporte para <a href=\"https:\/\/docs.couchbase.com\/operator\/2.2\/whats-new.html?ref=blog#log-forwarding-and-audit-log-management\" target=\"_blank\" rel=\"noopener\">reenv\u00edo de registros y gesti\u00f3n de registros de auditor\u00eda para Couchbase Autonomous Operator (es decir, Kubernetes)<\/a> y para <a href=\"https:\/\/www.couchbase.com\/blog\/es\/using-fluent-bit-for-log-forwarding-processing-with-couchbase-server\/?ref=blog\" target=\"_blank\" rel=\"noopener\">despliegues on-prem de Couchbase Server<\/a>. En ambos casos, el procesamiento de los registros se realiza mediante <a href=\"https:\/\/fluentbit.io\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Bits fluidos<\/a>.<\/p>\n<p>\u00bfPor qu\u00e9 elegimos Fluent Bit? Los usuarios de Couchbase necesitan registros en un formato com\u00fan con configuraci\u00f3n din\u00e1mica, y quer\u00edamos utilizar un est\u00e1ndar de la industria con una sobrecarga m\u00ednima. Fluent Bit fue una elecci\u00f3n natural.<\/p>\n<p>Este art\u00edculo cubre consejos y trucos para aprovechar al m\u00e1ximo el uso de Fluent Bit para el reenv\u00edo de logs con Couchbase. Utilizar\u00e9 el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/cloud\/kubernetes\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Operador aut\u00f3nomo de Couchbase<\/a> en mis ejemplos de despliegue. (Tambi\u00e9n voy a presentar una inmersi\u00f3n m\u00e1s profunda de este post en <a href=\"https:\/\/fluentconna21.sched.com\/event\/mEE3\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">la pr\u00f3xima FluentCon<\/a>.)<\/p>\n<p>Antes de Fluent Bit, los formatos de registro de Couchbase variaban en m\u00faltiples archivos. A continuaci\u00f3n se muestra una sola l\u00ednea de cuatro archivos de registro diferentes:<\/p>\n<pre>2021-03-09T17:32:25.520+00:00 DEBU CBAS.util.MXHelper [main] ignoring exception calling RuntimeMXBean.getBootClassPath; returning null\r\njava.lang.UnsupportedOperationException: Boot class path mechanism is not supported\r\n\tat sun.management.RuntimeImpl.getBootClassPath(Unknown Source) ~[?:?]\r\n\tat org.apache.hyracks.util.MXHelper.getBootClassPath(MXHelper.java:111) [hyracks-util.jar:6.6.0-7909]\r\n<\/pre>\n<pre>{\"bucket\":\"default\",\"description\":\"The specified bucket was selected\",\"id\":20492,\"name\":\"select bucket\",\"peername\":\"127.0.0.1:56021\",\"real_userid\":{\"domain\":\"local\",\"user\":\"@ns_server\"},\"sockname\":\"127.0.0.1:11209\",\"timestamp\":\"2021-03-09T20:12:17.445039Z\"}\r\n[ns_server:warn,2021-03-09T17:31:55.401Z,babysitter_of_ns_1@cb.local:ns_crash_log&lt;0.102.0&gt;:ns_crash_log:read_crash_log:148]Couldn't load crash_log from \/opt\/couchbase\/var\/lib\/couchbase\/logs\/crash_log_v2.bin (perhaps it's first startup): {error,\r\n                                                                                                                   enoent}\r\n<\/pre>\n<pre>[error_logger:info,2021-03-09T17:31:55.401Z,babysitter_of_ns_1@cb.local:error_logger&lt;0.32.0&gt;:ale_error_logger_handler:do_log:203]\r\n=========================PROGRESS REPORT=========================\r\n          supervisor: {local,ns_babysitter_sup}\r\n<\/pre>\n<pre>127.0.0.1 - @ [09\/Mar\/2021:17:32:02 +0000] \"RPCCONNECT \/goxdcr-cbauth HTTP\/1.1\" 200 0 - Go-http-client\/1.1\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Con la actualizaci\u00f3n a Fluent Bit, ahora puede transmitir en directo las siguientes vistas de registros <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/logging\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">la arquitectura de registro est\u00e1ndar de Kubernetes<\/a> que tambi\u00e9n significa <a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/dashboards\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">integraci\u00f3n sencilla con los cuadros de mando de Grafana<\/a> y otras herramientas est\u00e1ndar del sector. A continuaci\u00f3n se muestra una captura de pantalla tomada de <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/tools\/loki-stack\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">la pila Loki de ejemplo que tenemos en el repositorio Fluent Bit<\/a>.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/loki-stack-couchbase-fluent-bit-repo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11824\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/loki-stack-couchbase-fluent-bit-repo.png\" alt=\"The Loki stack from the Couchbase Fluent Bit repo\" width=\"1000\" height=\"913\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo-300x274.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo-768x701.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/loki-stack-couchbase-fluent-bit-repo-20x18.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Tanto si eres nuevo en Fluent Bit como si eres un profesional experimentado, espero que este art\u00edculo te ayude a navegar por las complejidades de su uso para el procesamiento de logs con Couchbase.<\/p>\n<h2>\u00bfCu\u00e1l es su principal duda o reto con Fluent Bit?<\/h2>\n<p>Vaya directamente a su problema o pregunta particular con Fluent Bit utilizando los enlaces de abajo o despl\u00e1cese m\u00e1s abajo para leer todos los consejos y trucos.<\/p>\n<p><strong><a href=\"#what-is-fluent-bit\">\u00bfQu\u00e9 es (y por qu\u00e9) Fluent Bit?<\/a><\/strong><\/p>\n<p><strong>\u00bfC\u00f3mo puedo hacer preguntas, obtener orientaci\u00f3n o aportar sugerencias sobre Fluent Bit?<\/strong> <a href=\"#engage-oss-community\">Participar y contribuir a la comunidad OSS<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo puedo averiguar qu\u00e9 est\u00e1 fallando en Fluent Bit?<\/strong> <a href=\"#debugging\">Utiliza el <code>stdout<\/code> y aumente el nivel de registro al depurar<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo puedo saber si mi analizador sint\u00e1ctico est\u00e1 fallando?<\/strong> <a href=\"#parsing\">Si ve la opci\u00f3n por defecto <code>registro<\/code> en el registro, sabr\u00e1 que el an\u00e1lisis ha fallado.<\/a>.<\/p>\n<p><strong>\u00bfPor qu\u00e9 no funciona mi analizador regex?<\/strong> <a href=\"#multi-line-parsing\">Verificar y simplificar, en particular para el an\u00e1lisis sint\u00e1ctico multil\u00ednea.<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo puedo restringir un campo (por ejemplo, el nivel de registro) a valores conocidos?<\/strong> <a href=\"#filtering\">Limite y normalice los valores de salida con algunos filtros sencillos<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo a\u00f1ado informaci\u00f3n opcional que podr\u00eda no estar presente?<\/strong> <a href=\"#filtering-options\">Utiliza el <code>modificador_registro<\/code> filtro - no el <code>modificar<\/code> filtro - si desea incluir informaci\u00f3n opcional<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo identifico qu\u00e9 plugin o filtro est\u00e1 activando una m\u00e9trica o un mensaje de registro?<\/strong> <a href=\"#aliases\">Utilizar alias<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo puedo realizar un tratamiento especial o a medida (por ejemplo, una redacci\u00f3n parcial)?<\/strong> <a href=\"#lua-filter\">Usa el filtro Lua: \u00a1Puede hacerlo todo!<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo compruebo mis cambios o verifico si una nueva versi\u00f3n sigue funcionando?<\/strong> <a href=\"#testing\">Realizaci\u00f3n de pruebas de regresi\u00f3n automatizadas<\/a>.<\/p>\n<p><strong>\u00bfC\u00f3mo pruebo cada parte de mi configuraci\u00f3n?<\/strong> <a href=\"#testing-separation\">Separe su configuraci\u00f3n en trozos m\u00e1s peque\u00f1os (ventaja adicional: esto permite una reutilizaci\u00f3n personalizada m\u00e1s sencilla).<\/a>.<\/p>\n<p><strong><a href=\"#red-hat-openshift\">\u00bfC\u00f3mo utilizo Fluent Bit con Red Hat OpenShift?<\/a><\/strong><\/p>\n<p>Respondo a estas y otras muchas preguntas en el siguiente art\u00edculo. Entremos en materia.<\/p>\n<h2 id=\"what-is-fluent-bit\">\u00bfQu\u00e9 es (y por qu\u00e9) Fluent Bit?<\/h2>\n<p>\u00bfQu\u00e9 es Fluent Bit? <a href=\"https:\/\/docs.fluentbit.io\/manual\/about\/fluentd-and-fluent-bit\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Fluent Bit es la hermana m\u00e1s delicada de Fluentd<\/a>que son <a href=\"https:\/\/www.cncf.io\/about\/who-we-are\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Fundaci\u00f3n para la Computaci\u00f3n Nativa en la Nube (CNCF)<\/a> proyectos de la organizaci\u00f3n Fluent.<\/p>\n<p>Fluent Bit consume esencialmente varios tipos de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/input\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">entrada<\/a>, aplica un <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/parser\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">tuber\u00eda<\/a> de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/filter\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">procesamiento<\/a> a esa entrada y, a continuaci\u00f3n, admite <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/router\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">enrutamiento<\/a> esos datos a m\u00faltiples tipos de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/output\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">puntos finales<\/a>.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/fluent-bit-data-routing-diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11821\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/fluent-bit-data-routing-diagram.png\" alt=\"Architecture diagram of data routing using Fluent Bit\" width=\"1000\" height=\"380\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram-300x114.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram-768x292.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-data-routing-diagram-20x8.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>En lo que respecta a Fluentd frente a Fluent Bit, este \u00faltimo es una mejor opci\u00f3n que Fluentd para tareas m\u00e1s sencillas, especialmente cuando s\u00f3lo necesita <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/tutorial-couchbase-log-forwarding.html?ref=blog\" target=\"_blank\" rel=\"noopener\">reenv\u00edo de registros con un procesamiento m\u00ednimo<\/a> y nada m\u00e1s complejo.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11819\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit.png\" alt=\"An architecture diagram of log forwarding with Couchbase and Fluent Bit\" width=\"1000\" height=\"695\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit-300x209.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit-768x534.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/architecture-diagram-log-forwarding-with-couchbase-fluent-bit-20x14.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Hab\u00edamos evaluado otras opciones antes de Fluent Bit, como Logstash, Promtail y rsyslog, pero finalmente nos decidimos por Fluent Bit por varias razones. En primer lugar, es una soluci\u00f3n OSS respaldada por el CNCF y ya se utiliza ampliamente en proveedores locales y en la nube. En segundo lugar, es ligera y tambi\u00e9n se ejecuta en OpenShift. En tercer lugar, y lo m\u00e1s importante, cuenta con amplias opciones de configuraci\u00f3n para que puedas <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/howto-couchbase-log-forwarding.html?ref=blog\" target=\"_blank\" rel=\"noopener\">apuntar a cualquier punto final que necesites<\/a>.<\/p>\n<p>(V\u00e9ase <a href=\"https:\/\/www.couchbase.com\/blog\/es\/using-fluent-bit-for-log-forwarding-processing-with-couchbase-server\/?ref=blog\" target=\"_blank\" rel=\"noopener\">mi anterior art\u00edculo sobre Fluent Bit<\/a> o <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/concept-couchbase-logging.html?ref=blog#log-forwarding\" target=\"_blank\" rel=\"noopener\">la documentaci\u00f3n detallada sobre el env\u00edo de registros<\/a> para m\u00e1s informaci\u00f3n).<\/p>\n<h2 id=\"engage-oss-community\">Consejo #1: Conectar con la comunidad OSS<\/h2>\n<p>Mi primera recomendaci\u00f3n para utilizar Fluent Bit es contribuir y comprometerse con su comunidad de c\u00f3digo abierto.<\/p>\n<p>Casi todo lo que aparece en este art\u00edculo es reutilizado descaradamente de otros, ya sea de <a href=\"https:\/\/fluent-all.slack.com\/archives\/C0CTQGHKJ\" target=\"_blank\" rel=\"noopener\">el Slack fluido<\/a>, entradas de blog, <a href=\"https:\/\/github.com\/kubesphere-retired\/fluent-bit\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Repositorios de GitHub<\/a> o similares. Al mismo tiempo, he contribuido con varios analizadores sint\u00e1cticos que construimos para Couchbase <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/commit\/02bf11d07f12ab47054ca37f02f19eefb8f7058c\" target=\"_blank\" rel=\"noopener\">volver al repositorio oficial<\/a>y espero haber planteado algunas cuestiones \u00fatiles.<\/p>\n<p>La comunidad OSS de Fluent Bit es muy activa. Sus responsables se comunican regularmente, corrigen problemas y sugieren soluciones. Por ejemplo, <a href=\"https:\/\/youtube.com\/playlist?list=PLj6h78yzYM2N3nytAN_8shp-4MNm_nPga\" target=\"_blank\" rel=\"noopener\">FluentCon EU 2021<\/a> gener\u00f3 muchas sugerencias y comentarios \u00fatiles sobre nuestro uso de Fluent Bit que hemos integrado en versiones posteriores. (<a href=\"https:\/\/events.linuxfoundation.org\/fluentcon-north-america\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">FluentCon<\/a> suele coincidir con los eventos de la KubeCon).<\/p>\n<h2 id=\"debugging\">Consejo #2: Depurar cuando todo est\u00e1 roto<\/h2>\n<p>En los canales de Slack de la comunidad de Fluent Bit, las preguntas m\u00e1s comunes son sobre c\u00f3mo depurar las cosas cuando no funcionan. Mis dos recomendaciones aqu\u00ed son:<\/p>\n<ol>\n<li><strong>Utiliza el <code>stdout<\/code> plugin.<\/strong><\/li>\n<li><strong>Aumente el nivel de registro para Fluent Bit.<\/strong><\/li>\n<\/ol>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Mi primera sugerencia ser\u00eda simplificar. La mayor\u00eda de los usuarios de Fluent Bit est\u00e1n tratando de plomada registros en una pila m\u00e1s grande, por ejemplo, Elastic-Fluentd-Kibana (EFK) o... <a href=\"https:\/\/grafana.com\/products\/enterprise\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Prometheus-Loki-Grafana<\/a> (PLG). Para empezar, no mires lo que te dicen Kibana o Grafana hasta que hayas eliminado todos los posibles problemas de fontaner\u00eda en tu pila de elecci\u00f3n.<\/p>\n<p><a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/outputs\/standard-output\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Utiliza el <code>stdout<\/code> plugin<\/a> para determinar qu\u00e9 cree Fluent Bit que es la salida. Luego, itere hasta que obtenga la salida m\u00faltiple de Fluent Bit que esperaba. Es mucho m\u00e1s f\u00e1cil empezar aqu\u00ed que lidiar con todas las partes m\u00f3viles de una pila EFK o PLG.<\/p>\n<p>Mi segundo consejo para depurar es <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/configuring-fluent-bit\/classic-mode\/configuration-file#config_section\" target=\"_blank\" rel=\"noopener\">subir el nivel de registro<\/a>. Este paso hace obvio lo que Fluent Bit est\u00e1 intentando encontrar y\/o analizar. En muchos casos, al aumentar el nivel de registro se ponen de manifiesto soluciones sencillas, como problemas de permisos o una ruta o comod\u00edn incorrectos.<\/p>\n<h3 id=\"helm\">Consideraciones para las comprobaciones de salud de Helm<\/h3>\n<p>Si utiliza Helm, active el servidor HTTP para las comprobaciones de estado si ha habilitado esas sondas.<\/p>\n<p>Helm es buena para una instalaci\u00f3n sencilla, pero como es una herramienta gen\u00e9rica, debe asegurarse de que su configuraci\u00f3n de Helm sea aceptable. Si habilita las sondas de comprobaci\u00f3n de estado en Kubernetes, tambi\u00e9n deber\u00e1 habilitar el punto final para ellas en la configuraci\u00f3n de Fluent Bit.<\/p>\n<p>Las versiones m\u00e1s recientes de Fluent Bit tienen <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/monitoring#health-check-for-fluent-bit\" target=\"_blank\" rel=\"noopener\">un chequeo espec\u00edfico<\/a> (que tambi\u00e9n utilizaremos en la pr\u00f3xima versi\u00f3n del Operador Aut\u00f3nomo Couchbase).<\/p>\n<h2 id=\"parsing\">Consejo #3: Convertir el agua en vino con el an\u00e1lisis sint\u00e1ctico<\/h2>\n<p>Normalmente, querr\u00e1s analizar tus registros despu\u00e9s de leerlos. Yo utilizo <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/inputs\/tail\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">el plugin de entrada de cola<\/a> para convertir datos no estructurados en datos estructurados (por <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/key-concepts#structured-messages\" target=\"_blank\" rel=\"noopener\">la terminolog\u00eda oficial<\/a>).<\/p>\n<h3 id=\"parsing-failure\">El fracaso no es una opci\u00f3n<\/h3>\n<p>Cuando se trata de solucionar problemas de Fluent Bit, un punto clave que hay que recordar es que <strong>si falla el an\u00e1lisis sint\u00e1ctico, obtendr\u00e1 la siguiente salida<\/strong>. El analizador sint\u00e1ctico de Fluent Bit proporciona toda la l\u00ednea de registro como un \u00fanico registro. Esto es una buena caracter\u00edstica de Fluent Bit, ya que nunca se pierde informaci\u00f3n y una herramienta diferente siempre puede volver a analizarla.<\/p>\n<p>One helpful trick here is to ensure you never have the default `log` key in the record after parsing. If you see the `log` key, then you know that parsing has failed. It&#8217;s not always obvious otherwise.<\/p>\n<h3 id=\"multi-line-parsing\">Consejo #4: You Can't Handle the Truth (Multi-Line Parsing)<\/h3>\n<p><a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/configuring-fluent-bit\/multiline-parsing\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">An\u00e1lisis sint\u00e1ctico multil\u00ednea<\/a> es una caracter\u00edstica clave de Fluent Bit. Algunos registros son producidos por procesos Erlang o Java que lo utilizan ampliamente.<\/p>\n<p>En <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit#parsing\" target=\"_blank\" rel=\"noopener\">objetivo con an\u00e1lisis sint\u00e1ctico multil\u00ednea<\/a> is to do an initial pass to extract a common set of information. For Couchbase logs, we settled on every log entry having a `timestamp`, `level` and `message` (with `message` being fairly open, since it contained anything not captured in the first two).<\/p>\n<p>El nombre del archivo de registro tambi\u00e9n se utiliza como parte de <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/key-concepts#tag\" target=\"_blank\" rel=\"noopener\">la etiqueta Fluent Bit<\/a>. Hemos implementado esta pr\u00e1ctica porque es posible que desee <a href=\"https:\/\/docs.fluentbit.io\/manual\/concepts\/data-pipeline\/router\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">enrutar diferentes registros a destinos separados<\/a>por ejemplo <a href=\"https:\/\/cloud.google.com\/architecture\/exporting-stackdriver-logging-for-security-and-access-analytics\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">el registro de auditor\u00eda<\/a> tiende a ser <a href=\"https:\/\/nvlpubs.nist.gov\/nistpubs\/Legacy\/SP\/nistspecialpublication800-92.pdf?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">un requisito de seguridad<\/a>:<\/p>\n<pre>    @include \/fluent-bit\/etc\/fluent-bit.conf\r\n    [OUTPUT] \r\n        Name                         s3\r\n        Match                        couchbase.log.audit\r\n        ...\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Como se ha indicado anteriormente (y <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/tutorial-couchbase-log-forwarding.html?ref=blog#example-amazon-s3\" target=\"_blank\" rel=\"noopener\">con m\u00e1s detalle aqu\u00ed<\/a>), este c\u00f3digo sigue enviando todos los registros a la salida est\u00e1ndar de forma predeterminada, pero tambi\u00e9n env\u00eda los registros de auditor\u00eda a AWS S3.<\/p>\n<p>Veamos otro ejemplo de an\u00e1lisis sint\u00e1ctico multil\u00ednea con este tutorial (y <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/1.1.0\/conf\/couchbase\/in-erlang-multiline-log.conf\" target=\"_blank\" rel=\"noopener\">en GitHub aqu\u00ed<\/a>):<\/p>\n<pre>[INPUT]\r\n    Name tail\r\n    Alias erlang_tail\r\n    # ^See note 1 below\r\n    Path ${COUCHBASE_LOGS}\/babysitter.log,${COUCHBASE_LOGS}\/couchdb.log,${COUCHBASE_LOGS}\/debug.log,${COUCHBASE_LOGS}\/json_rpc.log,${COUCHBASE_LOGS}\/metakv.log,${COUCHBASE_LOGS}\/ns_couchdb.log,${COUCHBASE_LOGS}\/reports.log\r\n    Multiline On\r\n    Parser_Firstline couchbase_erlang_multiline\r\n    Refresh_Interval 10\r\n    # ^See note 2\r\n    Skip_Long_Lines On\r\n    # ^See note 3\r\n    Skip_Empty_Lines On\r\n    # ^See note 4\r\n    Path_Key filename\r\n    # ^See note 5\r\n    # We want to tag with the name of the log so we can easily send named logs to different output destinations.\r\n    # This requires a bit of regex to extract the info we want.\r\n    Tag couchbase.log.\r\n    Tag_Regex ${COUCHBASE_LOGS}\/(?[^.]+).log$\r\n    # ^See note 6\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><strong>Notas:<\/strong><br \/>\n[1] Especifica un alias para este plugin de entrada. Esto es muy \u00fatil si algo tiene un problema o para realizar un seguimiento de las m\u00e9tricas.<br \/>\n[2] La lista de registros se actualiza cada 10 segundos para recoger los nuevos.<br \/>\n[3] Si llega a una l\u00ednea larga, esto la omitir\u00e1 en lugar de detener cualquier otra entrada. Recuerde que Fluent Bit comenz\u00f3 como una soluci\u00f3n embebida, por lo que una gran cantidad de soporte de l\u00edmites est\u00e1ticos est\u00e1 en su lugar por defecto.<br \/>\n[4] Una adici\u00f3n reciente a la versi\u00f3n 1.8 fue la posibilidad de omitir las l\u00edneas vac\u00edas. Esta opci\u00f3n est\u00e1 activada para reducir el ruido y garantizar que las pruebas automatizadas sigan pasando.<br \/>\n[5] Aseg\u00farese de a\u00f1adir la etiqueta Fluent Bit filename en el registro. Esto es \u00fatil para filtrar.<br \/>\n[6] Etiqueta por nombre de fichero. En este caso usamos una regex para extraer el nombre del archivo ya que estamos trabajando con m\u00faltiples archivos.<\/p>\n<p>Una recomendaci\u00f3n obvia es asegurarse de que su regex funciona mediante pruebas. Puede utilizar una herramienta en l\u00ednea como:<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li><a href=\"https:\/\/rubular.com\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Rubular<\/a><\/li>\n<li><a href=\"https:\/\/regex101.com\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">RegEx101<\/a><\/li>\n<li><a href=\"https:\/\/cloud.calyptia.com\/#\/regex\" target=\"_blank\" rel=\"noopener\">Calyptia<\/a> (Calyptia tambi\u00e9n dispone de una herramienta de visualizaci\u00f3n, y he <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/1.1.0\/tools\/flatten-config.sh\" target=\"_blank\" rel=\"noopener\">una secuencia de comandos para tratar los archivos incluidos para raspar todo en un solo archivo pasable<\/a>.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Es importante tener en cuenta que, como siempre, existen aspectos espec\u00edficos en el motor regex utilizado por Fluent Bit, por lo que, en \u00faltima instancia, tambi\u00e9n deber\u00e1 realizar pruebas all\u00ed. Por ejemplo, aseg\u00farese de que <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/parsers\/regular-expression\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">nombrar adecuadamente los grupos<\/a> (s\u00f3lo alfanum\u00e9rico m\u00e1s gui\u00f3n bajo, sin guiones), ya que de lo contrario podr\u00eda causar problemas.<\/p>\n<p><strong>Sugerencia: Si la expresi\u00f3n regular no funciona, a pesar de que <em>debe<\/em> - simplificar las cosas hasta que lo haga.<\/strong><\/p>\n<p>El ejemplo anterior de analizador sint\u00e1ctico multil\u00ednea de Fluent Bit manejaba los mensajes Erlang, que ten\u00edan este aspecto:<\/p>\n<pre>[ns_server:info,2021-03-09T17:31:55.351Z,babysitter_of_ns_1@cb.local:&lt;0.92.0&gt;:ns_babysitter:init_logging:136]Brought up babysitter logging\r\n[ns_server:debug,2021-03-09T17:31:55.373Z,babysitter_of_ns_1@cb.local:&lt;0.92.0&gt;:dist_manager:configure_net_kernel:293]Set net_kernel vebosity to 10 -&gt; 0\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Este fragmento s\u00f3lo muestra mensajes de una l\u00ednea por motivos de brevedad, pero tambi\u00e9n hay mensajes de <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/test\/logs\/babysitter.log#L2-L34\" target=\"_blank\" rel=\"noopener\">ejemplos grandes de varias l\u00edneas<\/a> en las pruebas. Recuerde que <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/parsers-couchbase.conf#L70\" target=\"_blank\" rel=\"noopener\">el analizador sint\u00e1ctico busca los corchetes<\/a> para indicar el inicio de cada mensaje de registro, posiblemente de varias l\u00edneas:<\/p>\n<pre>[PARSER]\r\n    Name         couchbase_erlang_multiline\r\n    Format       regex\r\n    Regex        \\[(?\\w+):(?\\w+),(?\\d+-\\d+-\\d+T\\d+:\\d+:\\d+.\\d+Z),(?.*)$\r\n    Time_Key     timestamp\r\n    Time_Format  %Y-%m-%dT%H:%M:%S.%L\r\n    Time_Keep    On\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<h3 id=\"timestamp\">Complicaciones y consideraciones sobre el an\u00e1lisis de marcas de tiempo<\/h3>\n<p>Unfortunately, you can&#8217;t have a full regex for the `timestamp` field. If you have varied datetime formats, it will be hard to cope. For example, you can find <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/test\/logs\/eventing.log#L2-L3\" target=\"_blank\" rel=\"noopener\">los siguientes formatos de fecha y hora<\/a> <em>dentro del mismo archivo de registro:<\/em><\/p>\n<pre>2021-03-09T17:32:15.545+00:00 [INFO] Using ... \r\n2021\/03\/09 17:32:15 audit: ...\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>En el momento del lanzamiento de la versi\u00f3n 1.7, no hab\u00eda una buena manera de analizar los formatos de fecha y hora en una sola pasada. As\u00ed que para los registros de Couchbase, dise\u00f1amos Fluent Bit para ignorar cualquier fallo al analizar la marca de tiempo del registro y s\u00f3lo usamos la hora de an\u00e1lisis como valor para Fluent Bit. La hora real no es vital, y deber\u00eda ser lo suficientemente cercana.<\/p>\n<p>El an\u00e1lisis multiformato en la serie Fluent Bit 1.8 deber\u00eda ser capaz de soportar un mejor an\u00e1lisis de marcas de tiempo. Pero en el momento de escribir esto, Couchbase a\u00fan no utiliza esta funcionalidad. El siguiente fragmento muestra un ejemplo de an\u00e1lisis multiformato:<\/p>\n<pre># Cope with two different log formats, e.g.:\r\n# 2021\/03\/09 17:32:15 cbauth: ...\r\n# 2021-03-09T17:32:15.303+00:00 [INFO] ...\r\n# https:\/\/rubular.com\/r\/XUt7xQqEJnrF2M\r\n[PARSER]\r\n    Name         couchbase_simple_log_mixed\r\n    Format       regex\r\n    Regex        ^(?\\d+(-|\/)\\d+(-|\/)\\d+(T|\\s+)\\d+:\\d+:\\d+(\\.\\d+(\\+|-)\\d+:\\d+|))\\s+((\\[)?(?\\w+)(\\]|:))(?.*)$\r\n    Time_Key     timestamp\r\n    Time_Keep    On\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Otra cosa que hay que tener en cuenta es que las pruebas de regresi\u00f3n automatizadas son imprescindibles.<\/p>\n<h2 id=\"filtering\">Tip #5: Bateo de Oro con Filtraci\u00f3n<\/h2>\n<p>Soy un gran fan de <a href=\"https:\/\/grafana.com\/docs\/loki\/latest\/installation\/helm\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">la pila Loki\/Grafana<\/a>por lo que lo utilic\u00e9 ampliamente cuando probaba el reenv\u00edo de registros con Couchbase.<\/p>\n<p>Un problema con la versi\u00f3n original del contenedor Couchbase era que los niveles de registro no estaban estandarizados: pod\u00edas obtener cosas como <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/test\/logs\/eventing.log#L1-L2\" target=\"_blank\" rel=\"noopener\">`INFO`, `Info`, `info`<\/a> con diferentes casos o <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/logs\/analytics_debug.log#L2\" target=\"_blank\" rel=\"noopener\">DEBU, depurar, etc.<\/a> con diferentes cadenas reales para el mismo nivel. Esta falta de estandarizaci\u00f3n dificultaba la visualizaci\u00f3n y el filtrado en Grafana (o la herramienta que elijas) sin un procesamiento adicional.<\/p>\n<p>Basado en una sugerencia de un usuario de Slack, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/1.1.0\/conf\/couchbase\/filter-handle-levels.conf\" target=\"_blank\" rel=\"noopener\">He a\u00f1adido algunos filtros que restringen efectivamente todos los diversos niveles en un nivel utilizando la siguiente enumeraci\u00f3n<\/a>: `UNKNOWN`, `DEBUG`, `INFO`, `WARN`, `ERROR`. These Fluent Bit filters first start with the various corner cases and are then applied to make all levels consistent.<\/p>\n<p>Funciona de la siguiente manera: Cada vez que un campo <code>fijo<\/code> a un valor conocido, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/couchbase\/filter-handle-levels.conf#L8-L9\" target=\"_blank\" rel=\"noopener\">se a\u00f1ade una clave temporal adicional<\/a> a la misma. Esta clave temporal la excluye de cualquier otra coincidencia en este conjunto de filtros. La direcci\u00f3n <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/couchbase\/filter-handle-levels.conf#L75-L80\" target=\"_blank\" rel=\"noopener\">se retira la llave temporal<\/a> al final. Vea a continuaci\u00f3n un ejemplo:<\/p>\n<pre>[FILTER]\r\n    Name        modify\r\n    Alias       handle_levels_uppercase_error_modify\r\n    Match       couchbase.log.*\r\n    Condition   Key_value_matches                               level               (?i:ERRO\\w*)\r\n    Set         level                                           ERROR\r\n    # Make sure we don't re-match it\r\n    Condition   Key_value_does_not_equal                        __temp_level_fixed  Y\r\n    Set         __temp_level_fixed                              Y\r\n\u2026\r\n# Remove all \"temp\" vars here\r\n[FILTER]\r\n    Name           modify\r\n    Alias          handle_levels_remove_temp_vars_modify\r\n    Match          couchbase.log.*\r\n    Remove_regex   __temp_.+\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Al final, el conjunto restringido de salida es mucho m\u00e1s f\u00e1cil de usar.<\/p>\n<h3 id=\"filtering-options\">Consejo #6: C\u00f3mo a\u00f1adir informaci\u00f3n opcional<\/h3>\n<p>Una cosa que probablemente querr\u00e1s incluir en tus logs de Couchbase son datos extra si est\u00e1n disponibles.<\/p>\n<p>Para mis propios proyectos, utilic\u00e9 inicialmente <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/modify\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">el bit de fluidez <code>modificar<\/code> filtro<\/a> to add extra keys to the record. However, if certain variables weren&#8217;t defined then the `modify` filter would exit.<\/p>\n<p>M\u00e1s tarde descubr\u00ed que <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/record-modifier\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">utilizar el <code>modificador_registro<\/code> filtro<\/a> en su lugar. Este filtro le avisa si una variable no est\u00e1 definida, por lo que puede utilizarlo con un superconjunto de la informaci\u00f3n que desea incluir.<\/p>\n<p>En resumen: <strong>If you want to add optional information to your log forwarding, use `record_modifier` instead of `modify`.<\/strong><\/p>\n<p>I&#8217;ve included an example of `record_modifier` below:<\/p>\n<pre>[FILTER]\r\n    Name record_modifier\r\n    Alias common_info_modifier\r\n    Match couchbase.log.*\r\n    Record hostname ${HOSTNAME}\r\n    Record logshipper couchbase.sidecar.fluentbit\r\n    # These should be built into the container\r\n    Record couchbase.logging.version ${COUCHBASE_FLUENTBIT_VERSION}\r\n    Record fluentbit.version ${FLUENTBIT_VERSION}\r\n    # The following are set by the operator from the pod meta-data, they may not exist on normal containers\r\n    Record pod.namespace ${POD_NAMESPACE}\r\n    Record pod.name ${POD_NAME}\r\n    Record pod.uid ${POD_UID}\r\n    # The following come from kubernetes annotations and labels set as env vars so also may not exist\r\n    Record couchbase.cluster ${couchbase_cluster}\r\n    Record couchbase.operator.version ${operator.couchbase.com\/version}\r\n    Record couchbase.server.version ${server.couchbase.com\/version}\r\n    Record couchbase.node ${couchbase_node}\r\n    Record couchbase.node-config ${couchbase_node_conf}\r\n    Record couchbase.server ${couchbase_server}\r\n    # These are config dependent so will trigger a failure if missing but this can be ignored\r\n    Record couchbase.analytics ${couchbase_service_analytics}\r\n    Record couchbase.data ${couchbase_service_data}\r\n    Record couchbase.eventing ${couchbase_service_eventing}\r\n    Record couchbase.index ${couchbase_service_index}\r\n    Record couchbase.query ${couchbase_service_query}\r\n    Record couchbase.search ${couchbase_service_search}\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Tambi\u00e9n utilizo <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/nest\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">el filtro Nest<\/a> to consolidate all the `couchbase.*` and `pod.*` information into nested JSON structures for output. By using the Nest filter, all downstream operations are simplified because the Couchbase-specific information is in a single nested structure, rather than having to parse the whole log record for everything. This is similar for pod information, which might be missing for on-premise information.<\/p>\n<h3 id=\"aliases\">Consejo #7: Utilice alias<\/h3>\n<p>Otro consejo valioso que ya habr\u00e1s notado en los ejemplos hasta ahora: <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/monitoring#configuring-aliases\" target=\"_blank\" rel=\"noopener\">utilizar alias<\/a>.<\/p>\n<p>Cuando utiliza un alias para un filtro espec\u00edfico (o entrada\/salida), tiene un nombre legible en sus registros y m\u00e9tricas de Fluent Bit en lugar de un n\u00famero que es dif\u00edcil de descifrar. Le recomiendo que cree un proceso de nomenclatura de alias seg\u00fan la ubicaci\u00f3n y la funci\u00f3n del archivo.<\/p>\n<p>La documentaci\u00f3n de Fluent Bit le muestra <a href=\"https:\/\/docs.fluentbit.io\/manual\/administration\/monitoring#metrics-examples\" target=\"_blank\" rel=\"noopener\">c\u00f3mo acceder a las m\u00e9tricas en formato Prometheus<\/a> con varios ejemplos.<\/p>\n<p>Running with the Couchbase Fluent Bit image shows the following output instead of just `tail.0`, `tail.1` or similar with the filters:<\/p>\n<pre># HELP fluentbit_filter_drop_records_total Fluentbit metrics.\r\n# TYPE fluentbit_filter_drop_records_total counter\r\nfluentbit_filter_drop_records_total{name=\"common_info_modifier\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"couchbase_common_info_nest\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_filenames_add_missing_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_add_info_missing_level_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_add_unknown_missing_level_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_check_for_incorrect_level\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_remove_temp_vars_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_debug_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_error_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_info_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_levels_uppercase_warn_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_filename_in_log_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_message_unknown_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_msg_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_tail_filename_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"handle_logfmt_ts_modify\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"parser.16\"} 0 1629194033696\r\nfluentbit_filter_drop_records_total{name=\"pod_common_info_nest\"} 0 1629194033696\r\n# HELP fluentbit_input_bytes_total Number of input bytes.\r\n# TYPE fluentbit_input_bytes_total counter\r\nfluentbit_input_bytes_total{name=\"audit_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"erlang_tail\"} 691360 1629194033696\r\nfluentbit_input_bytes_total{name=\"http_tail\"} 4302 1629194033696\r\nfluentbit_input_bytes_total{name=\"java_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"memcached_tail\"} 10623 1629194033696\r\nfluentbit_input_bytes_total{name=\"prometheus_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"rebalance_process_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"simple_mixed_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"simple_tail\"} 0 1629194033696\r\nfluentbit_input_bytes_total{name=\"xdcr_tail\"} 26544 1629194033696\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Y si algo va mal en los registros, no tienes que perder tiempo averiguando qu\u00e9 plugin puede haber causado un problema bas\u00e1ndote en su ID num\u00e9rico.<\/p>\n<h3>Otra consideraci\u00f3n con los alias<\/h3>\n<p>Si usas Loki, como yo, puede que te encuentres con otro problema con los alias.<\/p>\n<p>En mi caso, estaba filtrando el archivo de registro utilizando el nombre del archivo. Mientras que el plugin tail rellena autom\u00e1ticamente el nombre de archivo, desafortunadamente incluye el campo <em>ruta completa<\/em> del nombre del archivo. Pero Grafana muestra s\u00f3lo la primera parte de la cadena de nombre de archivo hasta que se recorta, lo que es particularmente poco \u00fatil ya que todos los registros est\u00e1n en la misma ubicaci\u00f3n de todos modos.<\/p>\n<p>El resultado final es una experiencia frustrante, como puedes ver a continuaci\u00f3n.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-full-path-filename.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11822\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-full-path-filename.png\" alt=\"Full path filenames in the Loki log browser\" width=\"566\" height=\"607\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename.png 566w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename-280x300.png 280w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename-300x322.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-full-path-filename-20x20.png 20w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Para resolver este problema, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/conf\/couchbase\/filter-handle-filenames.conf#L1-L9\" target=\"_blank\" rel=\"noopener\">He a\u00f1adido un filtro adicional que proporciona un nombre de archivo abreviado y mantiene el original tambi\u00e9n<\/a>. Este filtro requiere un analizador sint\u00e1ctico sencillo, que he incluido a continuaci\u00f3n:<\/p>\n<pre>[PARSER]\r\n    Name couchbase_filename_shortener\r\n    Format regex\r\n    Regex ^(?.*)\/(?.*)$\r\n\r\n[FILTER]\r\n    Name parser\r\n    Match couchbase.log.*\r\n    Key_Name filename\r\n    Parser couchbase_filename_shortener\r\n    # Do not overwrite original field\r\n    Preserve_Key On\r\n    # Keep everything else\r\n    Reserve_Data On\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>With this parser in place, you get a simple filter with entries like `audit.log`, `babysitter.log`, etc. instead of full-path prefixes like `\/opt\/couchbase\/var\/lib\/couchbase\/logs\/`.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-parsed-filename.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11823\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/Loki-log-browser-parsed-filename.png\" alt=\"Parsed filenames in the Loki log browser\" width=\"713\" height=\"645\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-parsed-filename.png 713w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-parsed-filename-300x271.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/Loki-log-browser-parsed-filename-20x18.png 20w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<h2 id=\"lua-filter\">Consejo #8: Filtro Lua: Todo tu (sof\u00e1)base nos pertenece<\/h2>\n<p>El bit de fluidez <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/filters\/lua\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">Filtro Lua<\/a> puede resolver pr\u00e1cticamente todos los problemas. Pero la cuesti\u00f3n es, <em>\u00bfDeber\u00eda?<\/em><\/p>\n<p>La imagen de Couchbase Fluent Bit <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/7816874dac068b6f8ab6609fe211e27fd5972652\/redaction\/redaction.lua#L48\" target=\"_blank\" rel=\"noopener\">incluye un poco de c\u00f3digo Lua<\/a> para <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/tutorial-couchbase-log-forwarding.html?ref=blog#log-redaction-in-flight\" target=\"_blank\" rel=\"noopener\">soporte de redacci\u00f3n mediante hashing para campos espec\u00edficos en los registros de Couchbase<\/a>. El objetivo de esta redacci\u00f3n es reemplazar datos identificables con un hash que pueda ser correlacionado a trav\u00e9s de los registros para prop\u00f3sitos de depuraci\u00f3n sin filtrar la informaci\u00f3n original. Usando un filtro Lua, Couchbase redacta los registros en vuelo mediante un hash SHA-1 del contenido de todo lo que est\u00e9 rodeado de etiquetas .. en el mensaje de registro.<\/p>\n<p>En la FluentCon EU de este a\u00f1o, <a href=\"https:\/\/youtu.be\/aj3jj6ayomg\" target=\"_blank\" rel=\"noopener\">Mike Marshall present\u00f3 algunas sugerencias para utilizar filtros Lua con Fluent Bit.<\/a> incluyendo <a href=\"https:\/\/fluentconeu21.sched.com\/event\/iKok\" target=\"_blank\" rel=\"noopener\">un Lua especial <code>te<\/code> filtro<\/a> que te permite pinchar en varios puntos de tu pipeline para ver qu\u00e9 est\u00e1 pasando. Se trata de un filtro gen\u00e9rico que vuelca todos los pares clave-valor en ese punto del proceso, lo que resulta \u00fatil para crear una vista del antes y el despu\u00e9s de un campo concreto.<\/p>\n<h2 id=\"testing\">Consejo #9: Probar, probar y volver a probar<\/h2>\n<p>Dadas todas estas capacidades, la configuraci\u00f3n de Couchbase Fluent Bit es muy amplia. Echa un vistazo a la siguiente imagen que muestra la configuraci\u00f3n de la versi\u00f3n 1.1.0 utilizando el visualizador de Calyptia.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11820\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram.png\" alt=\"An architecture diagram of the Couchbase Fluent Bit configuration\" width=\"1000\" height=\"594\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram.png 1000w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram-300x178.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram-768x456.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/couchbase-fluent-bit-configuration-arch-diagram-20x12.png 20w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Dado el tama\u00f1o de esta configuraci\u00f3n, el equipo de Couchbase ha hecho muchas pruebas para asegurarse de que todo se comporta como se espera. De todas esas pruebas, he creado <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/test\/logs\" target=\"_blank\" rel=\"noopener\">conjuntos de ejemplos de mensajes problem\u00e1ticos y los distintos formatos de cada archivo de registro<\/a> para usar como <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/main\/test\/run-tests.sh\" target=\"_blank\" rel=\"noopener\">un conjunto de pruebas automatizadas con los resultados esperados<\/a>. Tambi\u00e9n constru\u00ed un contenedor de pruebas que ejecuta todas estas pruebas; es un contenedor de producci\u00f3n con scripts y datos de prueba superpuestos. A medida que el equipo encuentre nuevos problemas, ampliar\u00e9 los casos de prueba.<\/p>\n<p>Estas herramientas tambi\u00e9n le ayudan a realizar pruebas para mejorar el rendimiento. Por ejemplo, si est\u00e1 <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/conf\/couchbase\/filter-handle-filenames.conf#L1-L9\" target=\"_blank\" rel=\"noopener\">acortar el nombre del archivo<\/a>puede utilizar estas herramientas para verlo directamente y confirmar que funciona correctamente.<\/p>\n<h3 id=\"testing-separation\">Consejo #10: Separe sus \u00e1reas de preocupaci\u00f3n<\/h3>\n<p>Cada parte de <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/conf\/couchbase\" target=\"_blank\" rel=\"noopener\">la configuraci\u00f3n de Couchbase Fluent Bit se divide en un archivo separado<\/a>. Hay un archivo por cada plugin de cola, un archivo para cada conjunto de filtros comunes, y uno para cada plugin de salida. Lo he dise\u00f1ado de esta manera por dos razones principales:<\/p>\n<ol>\n<li>Reutilizaci\u00f3n sencilla de distintas configuraciones<\/li>\n<li>Pruebas<\/li>\n<\/ol>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Couchbase provides a default configuration, but you&#8217;ll likely want to tweak what logs you want parsed and how. You can just `@include` the specific part of <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/tools\/loki-stack\/fluent-bit.conf\" target=\"_blank\" rel=\"noopener\">la configuraci\u00f3n que desea<\/a>Por ejemplo, si s\u00f3lo desea el an\u00e1lisis y la salida de los registros de auditor\u00eda, puede incluir s\u00f3lo eso. No hay necesidad de escribir la configuraci\u00f3n directamente, lo que le ahorra esfuerzo en el aprendizaje de todas las opciones y reduce los errores.<\/p>\n<p>Esta configuraci\u00f3n dividida tambi\u00e9n simplifica las pruebas automatizadas. Por ejemplo, puede <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/main\/test\/run-tests.sh#L173-L186\" target=\"_blank\" rel=\"noopener\">incluya la configuraci\u00f3n de cola y, a continuaci\u00f3n, a\u00f1ada un <code>leer_desde_cabeza<\/code> para que lea todas las entradas<\/a>. He mostrado esto a continuaci\u00f3n<\/p>\n<pre>cat &gt; \"$testConfig\" &lt;&lt; __FB_EOF\r\n@include \/fluent-bit\/test\/conf\/test-service.conf\r\n\r\n# Now we include the configuration we want to test which should cover the logfile as well.\r\n# We cannot exit when done as this then pauses the rest of the pipeline so leads to a race getting chunks out.\r\n# https:\/\/github.com\/fluent\/fluent-bit\/issues\/3274\r\n# Instead we rely on a timeout ending the test case.\r\n@include $i\r\n    Read_from_head On\r\n\r\n@include \/fluent-bit\/test\/conf\/test-filters.conf\r\n@include \/fluent-bit\/test\/conf\/test-output.conf\r\n__FB_EOF\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Una advertencia: <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/run-tests.sh#L89\" target=\"_blank\" rel=\"noopener\">aseg\u00farese de probar tambi\u00e9n la configuraci\u00f3n global<\/a>. Hace poco me encontr\u00e9 con un <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/issues\/3858\" target=\"_blank\" rel=\"noopener\">problema por un error tipogr\u00e1fico en el nombre del include<\/a> when used in the overall configuration. Adding a call to `&#8211;dry-run` picked this up in automated testing, as shown below:<\/p>\n<pre>if \"${COUCHBASE_LOGS_BINARY}\" --dry-run --config=\"$i\"; then\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Esto valida que la configuraci\u00f3n es lo suficientemente correcta como para pasar las comprobaciones est\u00e1ticas. Tenga en cuenta que a\u00fan puede haber fallos durante el tiempo de ejecuci\u00f3n cuando se cargan determinados plugins con esa configuraci\u00f3n. En esos casos, aumentar el nivel de registro normalmente ayuda (ver Consejo #2 m\u00e1s arriba).<\/p>\n<h3>Esperar lo inesperado durante las pruebas<\/h3>\n<p>When you&#8217;re testing or troubleshooting in Fluent Bit, it&#8217;s important to remember that every log message should contain certain fields (like `message`, `level`, and `timestamp`) and not others (like `log`).<\/p>\n<p>Esta distinci\u00f3n es especialmente \u00fatil cuando se quiere probar con una nueva entrada de registro pero no se dispone de una salida dorada con la que comparar. Por ejemplo, si est\u00e1 probando <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/1.1.0\/tools\/integration-test\" target=\"_blank\" rel=\"noopener\">una nueva versi\u00f3n de Couchbase Server<\/a> y est\u00e1 produciendo registros ligeramente diferentes. Mi recomendaci\u00f3n es <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/run-tests.sh#L58-L78\" target=\"_blank\" rel=\"noopener\">utilizar el <code>Espere<\/code> plugin para salir cuando se encuentra una condici\u00f3n de fallo y desencadenar un fallo de la prueba de esa manera<\/a>.<\/p>\n<p><strong>Lamentablemente <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/issues\/3268\" target=\"_blank\" rel=\"noopener\">Fluent Bit actualmente sale con un c\u00f3digo 0 incluso en caso de fallo<\/a>, <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/793bd659485a0a4b62e7ba13a7a834b90a662b13\/test\/run-tests.sh#L70\" target=\"_blank\" rel=\"noopener\">por lo que es necesario analizar la salida<\/a> para comprobar por qu\u00e9 ha salido.<\/strong> You should also run with a timeout in this case rather than an `exit_when_done`. Otherwise, you&#8217;ll <a href=\"https:\/\/github.com\/fluent\/fluent-bit\/issues\/3274\" target=\"_blank\" rel=\"noopener\">provocar una salida en cuanto el fichero de entrada llegue al final<\/a> que podr\u00eda ser antes de que haya vaciado toda la salida a diff contra:<\/p>\n<pre>timeout -s 9 \"${EXPECT_TEST_TIMEOUT}\" \"${COUCHBASE_LOGS_BINARY}\" --config \"$testConfig\" &gt; \"$testLog\" 2&gt;&amp;1\r\n# Currently it always exits with 0 so we have to check for a specific error message.\r\n# https:\/\/github.com\/fluent\/fluent-bit\/issues\/3268\r\nif grep -iq -e \"exception on rule\" -e \"invalid config\" \"$testLog\" ; then\r\n<\/pre>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>Tambi\u00e9n tengo que mantener el script de prueba funcional tanto para Busybox (el contenedor oficial de depuraci\u00f3n) y <a href=\"https:\/\/developers.redhat.com\/products\/rhel\/ubi\" target=\"_blank\" rel=\"noopener\">UBI<\/a> (el contenedor de Red Hat) que a veces limita las capacidades de Bash o los binarios extra utilizados.<\/p>\n<h2 id=\"red-hat-openshift\">Sugerencia #11: C\u00f3mo utilizar Fluent Bit con Red Hat OpenShift<\/h2>\n<p>Hay <a href=\"https:\/\/docs.couchbase.com\/operator\/current\/install-openshift.html?ref=blog\" target=\"_blank\" rel=\"noopener\">un Operador Aut\u00f3nomo Couchbase para Red Hat OpenShift<\/a> que exige que todos los contenedores pasen varias comprobaciones para su certificaci\u00f3n. Una de estas comprobaciones es que la imagen base sea UBI o RHEL.<\/p>\n<p>El equipo de Couchbase utiliza la imagen oficial de Fluent Bit para todo excepto OpenShift, y nosotros <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/blob\/main\/Dockerfile.rhel\" target=\"_blank\" rel=\"noopener\">construirlo desde el c\u00f3digo fuente en una imagen base UBI<\/a> para el cat\u00e1logo de contenedores de Red Hat. Lo construimos desde el c\u00f3digo fuente para que se especifique el n\u00famero de versi\u00f3n, ya que actualmente el repositorio Yum s\u00f3lo proporciona la versi\u00f3n m\u00e1s reciente. Adem\u00e1s, es <a href=\"https:\/\/docs.fluentbit.io\/manual\/installation\/linux\/redhat-centos\" target=\"_blank\" rel=\"noopener\">un objetivo CentOS 7<\/a> RPM que infla la imagen si se despliega con todos los RPM de soporte adicionales para ejecutarse en UBI 8.<\/p>\n<p>Hay un ejemplo en el repositorio que le muestra <a href=\"https:\/\/github.com\/couchbase\/couchbase-fluent-bit\/tree\/main\/tools\/ubi7\" target=\"_blank\" rel=\"noopener\">c\u00f3mo utilizar directamente los RPM<\/a> tambi\u00e9n.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Espero que estos consejos y trucos te hayan ayudado a utilizar mejor Fluent Bit para el reenv\u00edo de logs y la gesti\u00f3n de logs de auditor\u00eda con Couchbase.<\/p>\n<p>Elegimos Fluent Bit para que sus registros de Couchbase tuvieran un formato com\u00fan con configuraci\u00f3n din\u00e1mica. Tambi\u00e9n quer\u00edamos utilizar un est\u00e1ndar del sector con una sobrecarga m\u00ednima para facilitar las cosas a usuarios como t\u00fa.<\/p>\n<p>Si te interesa saber m\u00e1s, presentar\u00e9 este mismo contenido en mayor profundidad en <a href=\"https:\/\/fluentconna21.sched.com\/event\/mEE3\/?ref=hello-from-couchbase\" target=\"_blank\" rel=\"noopener\">la pr\u00f3xima FluentCon<\/a>. Espero verle all\u00ed.<\/p>\n<div class=\"wp-block-spacer\" style=\"height: 30px\" aria-hidden=\"true\"><\/div>\n<div style=\"text-align: center\"><strong>Pruebe Fluent Bit + Couchbase:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Descargue Couchbase Server 7 hoy mismo<\/a><\/strong><\/div>\n<div class=\"wp-block-spacer\" style=\"height: 15px\" aria-hidden=\"true\"><\/div>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Log forwarding and processing with Couchbase is easier than ever. We have support for log forwarding and audit log management for both Couchbase Autonomous Operator (i.e., Kubernetes) and for on-prem Couchbase Server deployments. In both cases, log processing is powered [&hellip;]<\/p>","protected":false},"author":77454,"featured_media":11818,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,9284,1816,2322],"tags":[9239,2384,2313,1545,9277],"ppma_author":[9279],"class_list":["post-11816","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-autonomous-operator","category-couchbase-server","category-kubernetes","tag-fluent-bit","tag-grafana","tag-key-value","tag-kubernetes","tag-loki"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Fluent Bit Examples with Tips &amp; Tricks for Log Forwarding<\/title>\n<meta name=\"description\" content=\"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase\" \/>\n<meta property=\"og:description\" content=\"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-01T07:00:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:33:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"418\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Patrick Stephens, Senior Software Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Patrick Stephens, Senior Software Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\"},\"author\":{\"name\":\"Patrick Stephens, Senior Software Engineer\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b\"},\"headline\":\"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase\",\"datePublished\":\"2021-09-01T07:00:17+00:00\",\"dateModified\":\"2025-06-14T04:33:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\"},\"wordCount\":3535,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"keywords\":[\"Fluent Bit\",\"Grafana\",\"key value\",\"kubernetes\",\"Loki\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Autonomous Operator\",\"Couchbase Server\",\"Kubernetes\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\",\"name\":\"Fluent Bit Examples with Tips & Tricks for Log Forwarding\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"datePublished\":\"2021-09-01T07:00:17+00:00\",\"dateModified\":\"2025-06-14T04:33:25+00:00\",\"description\":\"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png\",\"width\":1200,\"height\":628,\"caption\":\"Learn how to use Fluent Bit for log forwarding and processing from Couchbase with these DevOps tips\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b\",\"name\":\"Patrick Stephens, Senior Software Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a994b426058a61810b4baad40300bed9\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg\",\"caption\":\"Patrick Stephens, Senior Software Engineer\"},\"description\":\"Patrick Stephens is a Senior Software Engineer at Couchbase based in the UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/patrick-stephens\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Fluent Bit Examples with Tips & Tricks for Log Forwarding","description":"El reenv\u00edo y procesamiento de registros con Couchbase es ahora m\u00e1s f\u00e1cil. Revise ejemplos, consejos y trucos para sacar el m\u00e1ximo partido al uso de Fluent Bit aqu\u00ed.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase","og_description":"Log forwarding and processing with Couchbase just got easier. Review examples, tips, and tricks for making the most out of using Fluent Bit here.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-09-01T07:00:17+00:00","article_modified_time":"2025-06-14T04:33:25+00:00","og_image":[{"width":800,"height":418,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png","type":"image\/png"}],"author":"Patrick Stephens, Senior Software Engineer","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks-social.png","twitter_misc":{"Written by":"Patrick Stephens, Senior Software Engineer","Est. reading time":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/"},"author":{"name":"Patrick Stephens, Senior Software Engineer","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b"},"headline":"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase","datePublished":"2021-09-01T07:00:17+00:00","dateModified":"2025-06-14T04:33:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/"},"wordCount":3535,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","keywords":["Fluent Bit","Grafana","key value","kubernetes","Loki"],"articleSection":["Best Practices and Tutorials","Couchbase Autonomous Operator","Couchbase Server","Kubernetes"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/","name":"Fluent Bit Examples with Tips & Tricks for Log Forwarding","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","datePublished":"2021-09-01T07:00:17+00:00","dateModified":"2025-06-14T04:33:25+00:00","description":"El reenv\u00edo y procesamiento de registros con Couchbase es ahora m\u00e1s f\u00e1cil. Revise ejemplos, consejos y trucos para sacar el m\u00e1ximo partido al uso de Fluent Bit aqu\u00ed.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/08\/fluent-bit-couchbase-log-forwarding-tips-and-tricks.png","width":1200,"height":628,"caption":"Learn how to use Fluent Bit for log forwarding and processing from Couchbase with these DevOps tips"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/fluent-bit-tips-tricks-log-forwarding-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"11 Fluent Bit Examples, Tips &amp; Tricks for Log Forwarding with Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7eea0d8b639e8e770056531b6faa551b","name":"Patrick Stephens, Ingeniero Superior de Software","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a994b426058a61810b4baad40300bed9","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg","caption":"Patrick Stephens, Senior Software Engineer"},"description":"Patrick Stephens es ingeniero de software s\u00e9nior en Couchbase, con sede en el Reino Unido.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/patrick-stephens\/"}]}},"authors":[{"term_id":9279,"user_id":77454,"is_guest":0,"slug":"patrick-stephens","display_name":"Patrick Stephens, Senior Software Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/patrick-stephens-couchbase.jpeg"},"author_category":"","last_name":"Stephens","first_name":"Patrick","job_title":"","user_url":"","description":"Patrick Stephens es ingeniero de software s\u00e9nior en Couchbase, con sede en el Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/11816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/77454"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=11816"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/11816\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/11818"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=11816"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=11816"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=11816"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=11816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}