Contenido del curso

Agente de Infraestructura

Transacciones y métricas custom en New Relic

Resumen

Cuando una aplicación procesa miles de transacciones por segundo, entender qué está ocurriendo dentro de cada solicitud puede volverse caótico. Con New Relic APM puedes analizar transacciones, identificar cuellos de botella y enriquecer tu observabilidad con instrumentación personalizada para capturar métricas y eventos específicos de tu negocio.

Esta guía te muestra cómo navegar la vista de transacciones, cómo leer trazas distribuidas y cómo registrar métricas y eventos propios desde el SDK de Node para visualizarlos en dashboards.

¿Qué es una transacción en New Relic y cómo se analiza?

Una transacción es cada interacción que tu servicio tiene con otro servicio. Puede ser una solicitud para ver el perfil de un usuario, agregar un artículo al carrito en e-commerce o transferir fondos en una app bancaria. Cada conversación entre tecnologías cuenta como una transacción independiente.

Dentro de la interfaz, la ruta es APM y servicios → Space Rover Fleet Command → Transactions. Ahí encuentras una lista completa que puedes ordenar por distintos criterios para detectar problemas de rendimiento.

¿Cómo identifico transacciones lentas en New Relic? Ordena la lista por most time consuming o slowest average response. Una transacción lenta puede indicar un cuello de botella o un problema de rendimiento en ese segmento específico.

¿Qué criterios de orden ofrece la vista de transacciones?

La interfaz permite priorizar según el tipo de problema que estés investigando.

  • Most time consuming: lista las transacciones que más tiempo total consumen.
  • Slowest average response: identifica respuestas promedio más lentas.
  • Highest error rate: muestra transacciones con más fallos.
  • Most dissatisfying: mide qué tan molesta resulta la transacción para el usuario final.

¿Qué son los segmentos dentro de una transacción?

Una transacción se divide en segmentos, y cada segmento ejecuta una tarea concreta. En el ejemplo de agregar un artículo al carrito intervienen un servicio de catálogo, un servicio que mueve datos y otro que actualiza el carrito. Todo eso es una sola transacción compuesta por varios segmentos [01:55].

En el comando del rover, la tabla de breakdown muestra que el 96% del tiempo de la transacción corresponde al segmento API Rover Command, porque envía múltiples órdenes al rover para avanzar o girar. No es necesariamente un error, es simplemente el comportamiento esperado.

¿Cómo encuentro la causa raíz con trazas distribuidas?

Las transacciones son grupos de trazas, y una traza es una solicitud individual entre tu servicio y quien la originó. Al hacer clic en una traza específica entras a la vista de distributed tracing, donde un gráfico circular y un diagrama de Gantt muestran qué segmento toma más tiempo [05:00].

En el ejemplo del transcript, una traza registrada a las 9:08 a.m. tardó más de lo normal porque alguien dejó configurados timeouts en el código que ya no eran necesarios. Detectarlo permitió volver al código fuente y limpiarlo.

¿Cómo veo errores en una traza distribuida? En el diagrama de Gantt, los segmentos sin errores aparecen en azul y los segmentos con error aparecen en rojo. Visualmente identificas el punto exacto del fallo sin leer logs.

¿Qué es la instrumentación personalizada y cuándo usarla?

New Relic ya recopila métricas universales como tiempo de respuesta, tasa de errores y throughput, pero no conoce las métricas específicas de tu negocio. Si vendes en línea, necesitas saber cuántas compras se completan y cuánto gastan tus clientes. Si trabajas en fintech, te interesan divisas o acciones. Para eso existe la instrumentación personalizada.

En el archivo background-task.js del directorio backend, la función perform health checks revisa el estado de toda la flota de rovers: cuántos están críticos, cuántos fueron reparados, cuántos perdieron señal y los niveles de batería [09:30].

¿Cómo registro eventos y métricas personalizadas en Node?

El SDK de New Relic para Node expone funciones globales para enviar datos personalizados desde tu código.

javascript // Registrar un evento personalizado global.newrelic.recordCustomEvent('RoverCriticalBattery', { roverId: rover.id, batteryLevel: rover.battery });

// Registrar una métrica personalizada global.newrelic.recordMetric('Custom/RoverHealthCheck/CriticalCount', criticalCount);

Cada vez que el sistema detecta una batería crítica, se dispara un evento RoverCriticalBattery. Las métricas, en cambio, almacenan valores numéricos asociados a un nombre que después puedes graficar.

¿Cómo visualizo mis métricas personalizadas en la interfaz?

Desde la barra lateral, abre Query your data y luego Data Explorer. Esta herramienta te permite encontrar tus métricas sin escribir NRQL desde cero, ideal si todavía no dominas la sintaxis.

Selecciona la entidad correcta, en este caso Fleet Command, busca tu métrica personalizada (por ejemplo, el nivel promedio de batería) y usa las consultas recomendadas haciendo clic en los tres puntos para generar un gráfico inicial [13:45].

¿Cómo ajusto la consulta y el formato del gráfico?

El gráfico inicial mostraba valores como 100K, lo cual no tiene sentido para un porcentaje de batería. La consulta multiplicaba el promedio por 1000 automáticamente.

  1. Quita el multiplicador * 1000 de la consulta para conservar el valor real.
  2. Abre View customization options y asigna un nombre claro como Average fleet battery level.
  3. En Unit, selecciona percentage. Como esa unidad multiplica el valor por 100, divide el promedio entre 100 en la consulta para que el resultado final muestre 100% correctamente.

Una vez ajustado el gráfico, puedes agregarlo a un dashboard y compartirlo con tu equipo o mostrarlo en una pantalla de la oficina. Lo mismo aplica para gráficos de niveles críticos de batería o rovers que perdieron señal.

¿Qué métricas personalizadas crearías para tu propia aplicación? Comparte tu caso de uso en los comentarios.