Metadatos de Kubernetes para tópicos dinámicos de Kafka en Fluent Bit

Gestionar logs a gran escala puede ser un dolor, sobre todo cuando todos acaban en el mismo tópico de Kafka. Qué pasaría si pudieras enrutar los logs a tópicos específicos por pod o a cualquier tópico personalizado directamente desde Fluent Bit. Esto facilita mucho el filtrado y la consulta, especialmente en entornos Kubernetes multiinquilino o de gran tamaño.
En Fluent Bit el plugin de salida para Kafka permite asignación dinámica de tópicos mediante Dynamic_topic on y Topic_key. Sin embargo la documentación es ambigua sobre el uso de campos anidados como clave de tópico, que es precisamente el caso de los metadatos de kubernetes. El problema clave es que Topic_key solo resuelve claves de primer nivel del registro. Si el campo que quieres usar está dentro de kubernetes.pod_name Fluent Bit no lo resolverá directamente para la salida.
La solución práctica consiste en elevar el campo anidado a nivel superior antes de que llegue al plugin de salida. Esto se puede hacer con un filtro Lua que lea record.kubernetes.pod_name y lo copie a record.topic_name. Así Fluent Bit podrá utilizar topic_name como Topic_key y Dynamic_topic funcionará como se espera.
Ejemplo de registro original antes del filtro: { timestamp: 2025-05-13T19:27:31.954980134Z, log: Server is listening on port 5000, kubernetes: { namespace_name: default, pod_name: dy-7d8eeb3d4fb6da81d88da56280de7d42-5744dfc46c-dgsjf } }
Pseudocódigo del filtro Lua para promover el campo pod_name a nivel superior: function promote_pod_name(tag,timestamp,record) local k8s = record.kubernetes if k8s and k8s.pod_name then record.topic_name = k8s.pod_name elseif k8s and k8s.namespace_name then record.topic_name = k8s.namespace_name else record.topic_name = nil end return 1,timestamp,record end
Después del filtro el registro quedaría así: { timestamp: 2025-05-13T19:27:31.954980134Z, log: Server is listening on port 5000, topic_name: dy-7d8eeb3d4fb6da81d88da56280de7d42-5744dfc46c-dgsjf, kubernetes: { ... } } Ahora Fluent Bit puede usar topic_name como Topic_key en la salida Kafka.
Configuración de Fluent Bit relevante: [FILTER] Name lua Match kube.* script /fluent-bit/scripts/promote_pod_name.lua call promote_pod_name [OUTPUT] Name kafka Match * Brokers kafka:9093 Topics kube Topic_key topic_name Dynamic_topic on Format json
Un ejemplo de ConfigMap para Fluent Bit procesando logs de pods: apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: logging data: fluent-bit.conf: | [INPUT] Name tail Path /var/log/containers/*.log multiline.parser docker, cri Tag kube.* Mem_Buf_Limit 5MB Skip_Long_Lines On [FILTER] Name kubernetes Match kube.* Merge_Log On Keep_Log Off Kube_Tag_Prefix kube.var.log.containers. Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token K8S-Logging.Exclude On [FILTER] Name lua Match kube.* script /fluent-bit/scripts/promote_pod_name.lua call promote_pod_name [OUTPUT] Name kafka Match * Brokers kafka:9093 Topics kube Topic_key topic_name Dynamic_topic on Format json
Este enfoque no se limita a pod_name. Puedes promover cualquier campo anidado de kubernetes o cualquier etiqueta a un campo de primer nivel y usarlo como clave de tópico en Kafka. Casos de uso típicos: separar logs por namespace, crear tópicos por aplicación, aplicar aislamiento multiinquilino y mejorar la eficiencia en búsquedas y monitorización.
En Q2BSTUDIO como empresa de desarrollo de software y aplicaciones a medida ofrecemos experiencia en infraestructura observability, integración con servicios cloud y automatización de pipelines de logging. Si necesitas adaptar Fluent Bit y Kafka a tu arquitectura, o desarrollar soluciones de logging a medida para entornos Kubernetes, podemos ayudarte con servicios profesionales y consultoría en servicios cloud aws y azure. Conectamos estas soluciones con proyectos de software a medida y aplicaciones a medida para obtener pipelines robustos y escalables.
Además, nuestras capacidades abarcan inteligencia artificial e ia para empresas, desarrollo de agentes IA, ciberseguridad y pentesting, y servicios de inteligencia de negocio y power bi para explotar los datos de logs y convertirlos en información accionable. Si quieres más información sobre despliegues cloud y arquitectura de logs revisa nuestra página de servicios cloud a través de servicios cloud aws y azure y para proyectos de desarrollo y aplicaciones a medida visita software y aplicaciones a medida.
Si pruebas esta técnica en tu entorno o te encuentras con casos límite estaremos encantados de saber de ti. En Q2BSTUDIO podemos implementar filtros personalizados, pipelines de ingestión y soluciones de inteligencia de negocio para que tus logs trabajen a favor de tus operaciones y seguridad.
Comentarios