BookinglyTech News
Infraestructura

Eventlog Live exporta la telemetría de cualquier aplicación Haskell por OpenTelemetry

Well-Typed publica la versión 0.10.0.0 de una herramienta que lee el eventlog del runtime y lo envía a Grafana Cloud, Prometheus o un visor local, sin tocar el código de la aplicación.

3 min de lecturaLobsters0 vistas

Well-Typed ha sacado Eventlog Live 0.10.0.0, un programa que lee el eventlog de una aplicación Haskell y lo emite en tiempo real hablando OpenTelemetry. El destino lo eliges tú: Grafana Cloud, Prometheus o un visor local como otel-tui.

La gracia está en lo poco que pide. No hay que instrumentar el código: basta con compilar con -threaded y -rtsopts y arrancar el proceso volcando su eventlog a un fifo. La herramienta vive al lado de la aplicación, se conforma con unos pocos megabytes de memoria y va traduciendo lo que lee a métricas OTLP. En el ejemplo que acompaña al anuncio, un mkfifo crea el tubo, la aplicación escribe ahí con -l -ol y eventlog-live-otlp lo consume apuntando al endpoint de Grafana, con la cabecera de autorización pasada por variables de entorno.

Qué señales salen

De fábrica soporta los perfiles de heap -hT y -hi, varias métricas de uso de memoria, perfiles de cost-centre, mensajes de log, productividad y trazas de uso de hilos y capabilities. Las marcas temporales que emite traceMarkerIO se pueden pintar sobre los paneles: en el dashboard de perfiles de heap las usan para señalar cuándo ocurrió algo concreto, filtrando por expresión regular.

El exportador OTLP se configura con las variables de entorno estándar de OpenTelemetry, no con un esquema propio. Por defecto agrega los datos en ventanas de un segundo y los exporta cada treinta, y esos intervalos son ajustables por señal mediante ficheros de configuración. Los dashboards de ejemplo, tanto los de Grafana Cloud como los del despliegue local, están en el repositorio.

Perfilado en caliente

Hay dos piezas opcionales. eventlog-socket permite arrancar y parar el perfilado con la aplicación ya en marcha, a través de una API REST que se puede conectar a botones del dashboard. Su protocolo de control es genérico: cualquier librería registra sus propios comandos bajo su namespace con callbacks en IO, y Eventlog Live se encarga de invocarlos. Tanto ese protocolo como la API REST quedan detrás del flag de compilación +control, desactivado por defecto, y el aviso de seguridad es explícito en la documentación.

La otra es ghc-stack-profiler, un perfilador de pila ligero que muestrea la pila de llamadas real del runtime de GHC en lugar de la pila virtual de cost-centres. Según los benchmarks que cita Well-Typed, el sobrecoste es prácticamente nulo cuando no está activo y de entre el 2% y el 8% mientras muestrea, frente al 54%-128% en reposo y el 98%-136% activo que midieron con el perfilador de cost-centres que trae GHC. También se puede usar sin Eventlog Live, exportando los perfiles a speedscope.

Para quien opera servicios en Haskell, tener las métricas del RTS en el mismo backend OTel que el resto del stack elimina una pieza suelta, y el soporte del fifo evita tocar el binario. El dato que conviene retener aunque no uses la herramienta es el del sobrecoste del perfilador de pila: si se sostiene en cargas reales, abre la puerta a dejar el perfilado activo en producción, algo que con el perfilador de cost-centres no es defendible. Las cifras son de los propios autores y no hay todavía mediciones independientes.