1
0
mirror of https://github.com/alexandrev/xslt-lab.git synced 2026-09-18 19:43:16 +00:00

Los logs de error llegan corruptos a Loki: el 92% de las líneas se pierden por superar el corte de 16 KB de containerd #4

Closed
opened 2026-09-18 20:45:12 +00:00 by alexandrev · 1 comment
Owner

Pedido por el usuario el 18-sep-2026 (punto 3 de la revisión de situación).

Qué pasa. errLogFieldMax = 48_000 (backend/src/main.go:117) limita cada campo a 48.000 caracteres antes de base64, que infla ×1,33; y se emiten dos campos (xslt_b64 y params_b64) → líneas de hasta 128.293 caracteres. containerd trocea a 16 KB y promtail no reensambla.

Medido: en kubectl logs el 96% de las líneas son JSON válido; ya en Loki solo el 8,4%. La etiqueta version se pierde en el 33% de los eventos y xslt_b64/repro_url quedan inservibles justo para los stylesheets grandes, que son los que hay que depurar.

Impacto directo: al investigar por qué XSLT 3.0 pasó de 6% a 47% de error no se pudo atribuir a usuarios porque el log no lleva IP y Loki descartaba el 92% de las líneas. Cualquier agregación por versión hecha sobre Loki no es fiable.

Arreglo previsto: bajar el cap por campo a ~4.000 caracteres para que la línea completa quepa holgadamente bajo 16 KB, y añadir la IP del cliente al registro de error.

Pedido por el usuario el 18-sep-2026 (punto 3 de la revisión de situación). **Qué pasa.** `errLogFieldMax = 48_000` (`backend/src/main.go:117`) limita cada campo a 48.000 caracteres **antes** de base64, que infla ×1,33; y se emiten dos campos (`xslt_b64` y `params_b64`) → líneas de hasta **128.293 caracteres**. containerd trocea a 16 KB y promtail no reensambla. **Medido**: en `kubectl logs` el 96% de las líneas son JSON válido; ya en Loki solo el **8,4%**. La etiqueta `version` se pierde en el 33% de los eventos y **`xslt_b64`/`repro_url` quedan inservibles justo para los stylesheets grandes, que son los que hay que depurar**. Impacto directo: al investigar por qué XSLT 3.0 pasó de 6% a 47% de error no se pudo atribuir a usuarios porque el log no lleva IP y Loki descartaba el 92% de las líneas. Cualquier agregación por versión hecha sobre Loki no es fiable. **Arreglo previsto**: bajar el cap por campo a ~4.000 caracteres para que la línea completa quepa holgadamente bajo 16 KB, y añadir la IP del cliente al registro de error.
Author
Owner

Implementado en 086d984 y desplegado.

errLogFieldMax baja de 48.000 a 4.000 por campo y errLogReproURLMax de 30.000 a 6.000, dimensionados contra el límite que de verdad corta (los 16 KB de containerd) y no contra un número inventado. Encima hay un presupuesto de línea (errLogLineMax = 14.000) que, si aun así se pasa, va descartando los campos pesados —params_b64, luego xslt_b64, y repro_url el último porque lleva los dos documentos— y deja constancia en un campo dropped para que el hueco se vea en vez de ser silencioso. Se añade también client_ip, que es lo que faltaba para poder decir si una tasa de error la produce el producto o un solo usuario.

Dos tests nuevos cubren los dos caminos: el stylesheet de 1 MB (los caps bastan) y el tamaño intermedio que sí dispara el descarte.

Verificado en producción con un stylesheet de 20 KB que falla: la línea sale de 5.700 bytes, parsea como JSON, conserva class, error_code, version y client_ip, y en Loki el 100% de las líneas de la ventana son parseables frente al 8,4% de antes.

Implementado en `086d984` y desplegado. `errLogFieldMax` baja de 48.000 a 4.000 por campo y `errLogReproURLMax` de 30.000 a 6.000, dimensionados contra el límite que de verdad corta (los 16 KB de containerd) y no contra un número inventado. Encima hay un **presupuesto de línea** (`errLogLineMax = 14.000`) que, si aun así se pasa, va descartando los campos pesados —`params_b64`, luego `xslt_b64`, y `repro_url` el último porque lleva los dos documentos— y **deja constancia en un campo `dropped`** para que el hueco se vea en vez de ser silencioso. Se añade también `client_ip`, que es lo que faltaba para poder decir si una tasa de error la produce el producto o un solo usuario. Dos tests nuevos cubren los dos caminos: el stylesheet de 1 MB (los caps bastan) y el tamaño intermedio que sí dispara el descarte. Verificado en producción con un stylesheet de 20 KB que falla: la línea sale de **5.700 bytes**, parsea como JSON, conserva `class`, `error_code`, `version` y `client_ip`, y en Loki el 100% de las líneas de la ventana son parseables frente al 8,4% de antes.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alexandrev/xslt-lab#4