Instrumentación de aplicaciones
Cómo medir por dentro las aplicaciones que corren en tus servidores (Java, Node.js, .NET, Python, IIS) sin tocar su código, y qué se captura de cada pedido.
En esta página
Para qué sirve#
El agente puede mirar por dentro las aplicaciones de un servidor, sin cambiar su código: cada pedido que reciben, las consultas que hacen a bases de datos y las llamadas a otros servicios. Con eso Lymen arma las trazas (el recorrido de un pedido a través de tus sistemas) y te dice dónde se demora o falla algo. Se activa aplicación por aplicación, desde el detalle del servidor en Observar › Infraestructura, sección Monitoreo en detalle de aplicaciones.
Cuándo usarlo#
- Tenés una aplicación propia o de un tercero (Java, Node.js, .NET, Python) y querés saber por qué tarda.
- Querés unir lo que ve el navegador o la app móvil con lo que pasa en tu servidor (ver Aplicaciones).
No hace falta para medir el servidor en sí (CPU, memoria, disco): eso ya lo hace el agente.
Qué se puede medir#
| Tecnología | Linux | Windows | Requisito mínimo |
|---|---|---|---|
| Java | Sí | Sí | — |
| Node.js | Sí | Sí | — |
| .NET (Core / 5 en adelante) | Sí | Sí | .NET 8 o más nuevo |
| .NET Framework (clásico, con IIS) | — | Sí | .NET Framework 4.6.2 o más nuevo |
| Python | Sí | No | — |
| Otras tecnologías | No | No | — |
Si una aplicación no se puede medir, el portal te dice por qué:
| Motivo | Qué significa |
|---|---|
| Esta tecnología todavía no se puede monitorear en detalle | No está en la lista de arriba. |
| La versión es demasiado vieja | .NET anterior a 8 (o .NET Framework anterior a 4.6.2). |
| Ya la monitorea otra herramienta y no conviene pisarla | Se detectó otro agente de monitoreo. Solo puede haber uno por aplicación. |
| El agente no tiene permiso para modificarla | Falta un permiso del sistema operativo. |
| El servicio ya no está en el servidor | Se borró o cambió. |
| No se pudo aplicar el cambio | Error al configurar. Reintentá y revisá el historial. |
Cómo se instala y se activa#
1. Instalar el paquete#
Se instala junto con el agente: en Configuración › Conexiones › Agregar datos › Agregar servidor, tildá Instalar también el monitoreo en detalle antes de Generar comando (ver Agregar datos, Linux y Windows). Esto no toca ninguna aplicación: deja instalado un servicio que espera las instrucciones del portal. Si falla, el agente queda instalado igual.
Para un servidor que ya está conectado, generá el comando con la casilla tildada, con los mismos gateways y grupo, y corrélo de nuevo en ese servidor: se reinstala sobre el mismo servidor y conserva su grupo, su política y su historial. Mientras no esté instalado, la sección del servidor dice que todavía no informó sus aplicaciones y te recuerda cómo instalarlo.
En Linux funciona con glibc (no con Alpine/musl). El paquete consulta el portal y le informa el estado cada 30 segundos: todo lo demás se maneja desde el portal.
2. Activar una aplicación#
- Abrí el servidor en Observar › Infraestructura.
- En Monitoreo en detalle de aplicaciones vas a ver las aplicaciones y servicios que el agente encontró.
- Tocá Activar monitoreo en detalle en la que quieras.
- Elegí:
- Activar y reiniciar ahora: la aplicación se reinicia y queda sin servicio unos segundos.
- Activar, reiniciar después: se activa en el próximo reinicio de la aplicación (el estado dice Falta reiniciar).
La aplicación necesita reiniciarse para empezar o para dejar de medirse. Elegí un horario de poco uso.
Para dejar de medir una aplicación, tocá Desactivar y confirmá con Sí, desactivar: deja de medirse cuando se reinicie; hasta entonces sigue como está.
Estados de una aplicación#
| Estado | Significa |
|---|---|
| Se puede monitorear en detalle | Compatible y todavía sin activar. |
| Falta reiniciar | Activada, pero todavía corre sin el monitoreo (o al revés, al desactivar). Botón Reiniciar ahora. |
| Monitoreada en detalle | Funcionando. |
| Pausada | El monitoreo está pausado en el servidor. |
| No compatible | Ver los motivos más arriba. |
| Con error | No se pudo aplicar el cambio. |
Pausar y reanudar#
Pausar el monitoreo en detalle en este servidor (pide confirmación con Sí, pausar) es el interruptor de emergencia: las aplicaciones que arranquen o se reinicien a partir de ahora lo hacen sin monitoreo, enseguida y sin reiniciar el servidor, y se apaga la captura de cuerpos. Límite: una aplicación que ya está corriendo sigue medida hasta que se reinicie. Para volver, tocá Reanudar el monitoreo en detalle.
Métodos extra de Java#
Solo para aplicaciones Java ya activadas. Además de lo que se ve solo (pedidos, bases de datos, llamadas a otros servicios), podés pedir que se mida el tiempo de métodos puntuales: botón Métodos extra en la aplicación, Agregar una clase y Guardar. Se aplican cuando la aplicación se reinicia.
| Campo | Para qué sirve | Por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Clase (con su paquete) | La clase a medir. | — | Nombre completo, por ejemplo com.empresa.turnos.Reserva. Hasta 30 clases, sin repetir. |
Cada clase agrega trabajo a la aplicación; medí solo lo que necesites. |
| Métodos | Qué métodos de esa clase. | — | Solo letras, números, _ y $ (sin paréntesis ni comas). Hasta 20 por clase y al menos uno. |
Un método llamado muchísimas veces por segundo genera muchos datos (y costo). |
Qué se captura de los pedidos#
La sección Qué se captura de los pedidos, en el mismo detalle del servidor, controla el detalle que se guarda de cada pedido HTTP. Siempre se guarda: el método, la ruta, el estado de la respuesta y cuánto tardó. Lo demás lo elegís con Editar (solo Administración; Sistemas puede Ver detalle).
Campos#
| Campo | Para qué sirve | Por defecto | Valores válidos | Impacto de cambiarlo |
|---|---|---|---|---|
| Cabeceras del pedido | Cabeceras HTTP del pedido que se guardan. Solo se guardan las de esta lista. | user-agent, x-request-id, content-type |
Hasta 20, en minúsculas. | Cada cabecera extra puede traer datos personales. Las que pueden llevar credenciales (authorization, cookie, set-cookie, x-api-key, las que contienen token, secret, password, clave, apikey, session…) no se pueden agregar nunca. |
| Cabeceras de la respuesta | Ídem, para la respuesta. | content-type |
Hasta 20. | Ídem. |
| Parámetros a enmascarar | Parámetros de la dirección (?dni=…) cuyo valor se reemplaza por *** antes de guardarse. |
token, access_token, id_token, refresh_token, password, passwd, pwd, secret, apikey, api_key, authorization, signature (el núcleo, que no se puede sacar), más clave, key, auth, sig, dni, cuil, email, code |
Hasta 50 nombres; letras, números, _ . - [ ], hasta 60 caracteres. |
Privacidad. Sacar un parámetro hace que su valor se guarde en claro. Sumá los que tengan datos de pacientes o clientes. |
| Capturar cuerpos de las rutas elegidas | Guarda el cuerpo de pedidos y respuestas en las rutas que elijas. | Apagado | Encendido / apagado | Privacidad y costo. Un cuerpo puede traer datos médicos o financieros. Encendelo solo en las rutas necesarias, para depurar. |
| Rutas (con cuerpos) | Qué rutas capturar (Agregar una ruta). | — | Método (GET, POST, PUT, PATCH, DELETE o cualquiera), ruta que empieza con / y puede terminar en * (por ejemplo /api/pagos/*), hasta 100 caracteres; y si capturar la solicitud, la respuesta o las dos. Hasta 20 rutas, sin repetir. |
Una ruta con * amplía muy rápido lo capturado. Hace falta al menos una ruta con cuerpos encendidos. |
| Tope por cuerpo | Tamaño máximo guardado de cada cuerpo. | 2048 bytes | De 256 a 8192 | Más tope, más datos guardados y más costo. El resto se corta. |
| Retención pedida | Cuánto tiempo se pide conservar los cuerpos. | 24 horas | De 1 a 72 horas | El valor queda marcado en cada registro, pero el borrado lo hace el nivel de retención corta (hoy hasta 72 horas). |
| Elementos XML a tapar | Nombres de elementos XML cuyo contenido se reemplaza por ***. |
Vacío (además de los de siempre) | Hasta 50. Formas: Nombre, prefijo:Nombre o {espacio-de-nombres}Nombre. Sin comodines. |
Tapar un elemento oculta también todo lo que tiene adentro. |
| Atributos XML a tapar | Ídem, para atributos. | Vacío | Hasta 50. | Ídem. |
Cosas a tener en cuenta:
- Solo texto. Los cuerpos binarios no se guardan.
- Privacidad manda. Lo que una regla de Privacidad ya enmascara sigue enmascarado: acá solo podés sumar nombres.
- XML y SOAP. Se entienden
application/xml,text/xml,application/soap+xmly todo lo que termine en+xml. Si es SOAP, la operación aparece en el detalle de la traza, también con WS-Security. Siempre se tapan elementos comoPassword,BinarySecurityToken,Nonce,SignatureValue,Assertion,SAMLRequest,SAMLResponsey los que contienen cosas comopass,clave,token,secret,dni,cuil,cuit,tarjeta,cvv,signature. Un XML cortado por el tope o mal formado se tapa igual por nombre. - Cuándo rige cada cambio. Los cuerpos rigen en segundos, sin reiniciar. Las cabeceras y los métodos extra de Java se aplican cuando la aplicación se reinicia.
En qué lenguajes se pueden capturar cuerpos#
| Lenguaje | Cuerpos | XML y SOAP | Detalle |
|---|---|---|---|
| Node.js | Sí | Sí | |
| Python | Sí | Sí | Flask, Django, FastAPI y Starlette |
| Java | Sí | Sí | Servlets y el servidor HTTP del JDK |
| .NET | Sí | Sí | ASP.NET Core 8 o más nuevo |
| .NET Framework | Sí | Sí | IIS clásico (ver abajo) |
No se capturan cuerpos con Netty, Reactor, Undertow, Vert.x, gRPC ni WebSockets.
.NET Framework clásico e IIS#
Para aplicaciones .NET Framework 4.6.2 o más nuevo que corren en IIS (WebForms, MVC 5, Web API 2, WCF y ASMX), Lymen usa un módulo propio sin editar el web.config de tu aplicación.
- Se activa igual que las demás: Activar monitoreo en detalle y reiniciar. En IIS ese reinicio puede requerir reciclar el grupo de aplicaciones o hacer un
iisreset: planificalo en un horario tranquilo. - Solo se copia lo que la aplicación ya leyó en memoria. Una lectura sin buffer (subidas grandes, streaming) no se copia: es un límite conocido.
- Solo hay un "profiler" de .NET por proceso. Si ya hay otra herramienta de monitoreo, Lymen no la pisa y marca la aplicación como no compatible.
- Para sacarlo, usá Desactivar en la aplicación y reciclá el grupo de aplicaciones.
Kubernetes#
En Kubernetes la instrumentación no se activa desde esta sección, sino con una anotación en el pod de tu aplicación. Ver Kubernetes.
Problemas comunes#
| Síntoma | Qué hacer |
|---|---|
| No veo mi aplicación en la lista | Tiene que correr como servicio (systemd o servicio de Windows). Debajo de la lista, "Procesos que ve el agente" avisa si hay procesos de una tecnología compatible que no corren como servicio: esos no se monitorean solos, hay que instalarlos como servicio. |
| Dice Falta reiniciar | Reiniciá la aplicación (Reiniciar ahora) en un horario tranquilo. |
| No compatible: ya la monitorea otra herramienta | Desactivá la otra herramienta en esa aplicación o dejala como está. |
| No llegan trazas después de activar | Confirmá que la aplicación se reinició y que el estado dice Monitoreada en detalle. |
| "El monitoreo en detalle está pausado" | Reanudalo con Reanudar el monitoreo en detalle. |
| Solo veo un cuerpo cortado | Subí el Tope por cuerpo (hasta 8192 bytes). |