Tenemos una aplicación que escribe tres tipos de registros en tres archivos separados: registros de acceso, registros de aplicaciones genéricas y registros del sistema. El formato (y el propósito) de estos registros son muy diferentes. Y tenemos reenviadores de registros separados que los envían por separado a nuestro sistema de registro centralizado.
Basado en el principio de registros de tratamiento como secuencias de eventos , estamos pensando en pasar del uso de archivos a stdout. Si bien conocemos algunos de los beneficios de este enfoque, esto también significaría que obtendríamos una secuencia fusionada de los registros con un formato diferente, que tendríamos que dividir nuevamente antes de poder enviarlos a nuestro sistema central (Kibana / Splunk / etc.), o dentro de allí.
Nos preguntamos si hay herramientas o recomendaciones sobre cómo debemos abordar esta situación.
Respuestas:
Todavía estoy buscando un enfoque de fusión / división, pero mientras tanto este enfoque recomendado por la documentación de Kubernetes parece una buena solución: use un contenedor de sidecar para cada uno de sus registros separados .
Un "sidecar" es cualquier contenedor acoplable que use junto con otro contenedor acoplable para trabajar de alguna manera. En este caso, para cada uno de sus tres registros, tendría un contenedor separado que escanea o sigue los registros y las salidas a stdout.
De esta manera, cada uno de sus contenedores de registro lateral tiene su propio registro de acoplador de su propio stdout. Al estar separado de esta manera, puede usar las prácticas estándar de acoplador (y kubernetes, etc.) para separar o agregar. Esto es lo que la página de Kubernetes tiene que decir:
Las "secuencias de registro separadas" provienen del etiquetado incorporado que la ventana acoplable aplica a registros de diferentes contenedores, descritos en la documentación de la ventana acoplable aquí:
fuente
La idea de fusionarlos en una secuencia solo para dividirlos más tarde suena dolorosa. No he tenido una razón para hacerlo yo mismo, pero aquí es donde comenzaría:
Se siente un poco menos que elegante tener que configurar algo en el host también, pero si usa algo como ansible donde puede ejecutar un libro de jugadas y configurarlo durante su implementación en la caja, no debería ser demasiado malo.
fuente