En el primer tutorial de NRQL, exploramos los fundamentos de la creación de consultas. Cubrimos la estructura básica de la consulta, la definición de ventanas de tiempo y cómo seleccionar atributos específicos para observar. También aprendimos a comenzar a agregar y mostrar datos mediante gráficos y otras visualizaciones.
En este tutorial, profundizaremos un poco más y exploraremos más funciones para crear agregaciones útiles. Aquí aprenderá a comparar los datos devueltos con períodos de tiempo anteriores y a agrupar los datos en ventanas de tiempo específicas. También encontrará aún más cosas que hacer con las funciones SINCE y UNTIL , y explorará el uso de comodines en los filtros. Específicamente, aprenderá cómo:
- Consulta de valor único usando
uniques(attributeName) - Determine cuántos valores únicos existen en un atributo usando
uniqueCount(attributeName) - Recuperar el
earliest(attributeName)ylatest(attributeName)dentro de un período de tiempo específico - Calcular porcentajes en función de un calificador u otro punto de datos con
percentile() - Realizar cálculos básicos utilizando atributos y funciones de agregación, o una combinación de ambos.
- Transmitir nombres de atributos a algo personalizado y más legible
- Buscar para incluir/excluir mediante comodines con
LIKEoNOT LIKE, o limitar los resultados a aquellosINuna lista oNOT INesa lista - Consulta dentro de ventanas de tiempo más avanzadas usando fechas, época y
WITH TIMEZONE - Agrupar datos en ventanas de tiempo mediante cohortes basadas en el tiempo
¡Empecemos!
Funciones agregadas
Después de completar el primer tutorial de NRQL, ha utilizado count(), average(), sum(), max() y min() para transformar sus datos de manera significativa. Pero ¿qué sucede si desea encontrar y contar el valor único? Para encontrar la cantidad de valor único registrado para un atributo durante un rango de tiempo específico, puede usar la función uniqueCount(). Solo necesita proporcionar el atributo que queremos inspeccionar como argumento. Por ejemplo, aquí hay una consulta para mostrar todas las llamadas API públicas únicas:
Para optimizar el rendimiento de la consulta, la función anterior devuelve resultados aproximados para consultas que inspeccionan más de 256 valores únicos. Para devolver la lista real de valor único para un atributo durante un rango de tiempo específico, podemos usar la función uniques() .
SELECT uniques(http.url) FROM Public_APICall SINCE 1 day agoPara especificar un valor límite diferente al predeterminado de 1000, utilice uniques(attribute[,limit]), que acepta un máximo de 10 000.
Para recuperar el valor más reciente de un atributo durante un rango de tiempo específico, utilice la función latest() . En esta consulta de ejemplo, puede localizar el tiempo de respuesta más reciente para una llamada API en el último día. Esto podría ayudarle a localizar el valor más reciente para una transacción o servicio que informa de forma intermitente.
En el otro lado del espectro, podrías utilizar la función earliest() para lograr lo contrario. Devolverá el valor más antiguo de un atributo registrado en el rango de tiempo especificado. En esta consulta de ejemplo, puede recuperar el tiempo de respuesta más temprano para una llamada API en el último día. Si los datos se informan de manera consistente, esto informará el punto de datos del primer evento en las últimas 24 horas.
Es posible que necesite porcentajes en lugar de recuentos, sumas o promedios. Usar la función percentage() le permite calcular el porcentaje de un valor en el conjunto de datos que coincida con una condición especificada. Esta función toma dos argumentos: el primero es una función de agregador para el atributo deseado, como count(). El segundo es una condición WHERE para especificar el subconjunto de datos sobre el que desea realizar una consulta.
En esta consulta de ejemplo, puede encontrar el porcentaje de llamadas API durante el último día que tuvieron una duración (o tiempo de respuesta) superior a 100 milisegundos.
Es muy común ver los datos del rendimiento de la aplicación o de la experiencia de los clientes utilizando percentiles en lugar de promedios. Puede utilizar la función percentile() para comprender la experiencia del percentil n.
Por ejemplo, digamos que desea saber cuál fue la peor experiencia (la mayor duración) del 98% de la experiencia de sus clientes durante el último día. Puede solicitar a NRDB percentile(duration, 98) de las últimas 24 horas.
Como puede ver, la agregación le brinda un control flexible sobre sus datos. Puede usar uniqueCount() para contar las entradas únicas de un atributo en particular. Pero también podría usar esto para identificar un recuento de máquinas únicas, contenedores de informes o incluso cuántos puntos de datos personalizados envía a New Relic. Y, si desea saber qué valor único está disponible para la consulta, siempre puede solicitar una lista usando uniques().
Las funciones latest() y earliest() tienen un valor particular al tratar con datos dispersos, o al investigar cuándo algo comenzó o dejó de informar (asumiendo que New Relic aún almacena los datos). La función percentage() puede mostrarle qué porcentaje de eventos coincidió con un calificador en comparación con el conjunto de resultados general. Por último, puede usar percentile() como indicador de rendimiento clave al establecer un objetivo para garantizar que el 90 % de todas las transacciones del usuario final superen la duración proporcionada.
En el siguiente paso, aprenderá a hacer matemáticas básicas con NRQL.
Usa operadores matemáticos
NRQL admite operadores matemáticos básicos. Puede realizar sumas (+), restas (-), multiplicaciones (*) y divisiones (/) tanto en valores de atributo numéricos como en resultados de funciones de agregador.
Por ejemplo, capturamos tanto el tiempo de respuesta total (como duration) como el tiempo de respuesta de la base de datos (como databaseDuration) cuando registramos un evento de transacción. Pero ¿qué sucede si desea encontrar el tiempo promedio que se pasa fuera del procesamiento de la base de datos? Podría comenzar calculando ese valor para cada evento en el conjunto de datos utilizando una consulta como esta.
SELECT GigabytesIngestedBillable - GigabytesIngestedFree, metric FROM NrMTDConsumption WHERE productLine IS NOT NULL¡Genial! Acaba de realizar algunas operaciones matemáticas básicas. Esto es útil para ayudarle a listar eventos individuales. Pero ¿qué pasa si desea conocer la duración promedio de las transacciones sin el tiempo de la base de datos? También puede realizar operaciones aritméticas dentro de la función:
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULLAhora, ¿qué pasaría si quisiera complicarse aún más restando, dividiendo y multiplicando en la misma consulta para calcular la duración sin el tiempo de la base de datos, como porcentaje del tiempo total? Bueno, puedes agregar las matemáticas:
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) / unitPrice * 100 FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULLNew Relic informa los tiempos como parte de sus eventos, por lo que puede usarlos para calcular puntos de datos o incluso generar resultados porcentuales. Puede ampliar esto aún más aplicando estos operadores matemáticos a acciones o eventos personalizados, o a datos personalizados que envíe a New Relic. Por ejemplo, una plataforma de comercio electrónico que informa datos sobre el tamaño de los pedidos y los métodos de pago podría usar las matemáticas para calcular cosas como la tasa de conversión de los pedidos frente a las visitas únicas de los clientes.
En el siguiente paso, aprenderá cómo usar NRQL para etiquetar su atributo.
Etiqueta atributo
A medida que comience a ejecutar funciones de NRQL más complejas, es posible que se pregunte si puede hacer que los nombres mostrados para los atributos de consulta sean más útiles, especialmente para quienes no conocen NRQL. Consideremos un ejemplo utilizando lo que aprendió en el tutorial anterior.
SELECT average(duration-externalDuration) FROM TransactionPuede usar la cláusula AS después de una función o atributo para darle al resultado un nombre más legible y significativo. Esto le ayuda a usted y a su equipo a comprender exactamente qué representa un gráfico.
SELECT average(duration-externalDuration) AS 'Non-External Response Time' FROM TransactionEsto puede parecer meramente estético, pero cuando crea un dashboard detallado, es importante etiquetar claramente los datos. Esto deja clara la fuente de datos para cualquiera que vea los widgets, billboards, gráficos de líneas o tablas.
Volveremos a consultar esto en una próxima lección sobre agrupación para explorar cómo AS puede crear conjuntos de resultados limpios también en escenarios más avanzados. A continuación, aprenderá a comparar datos en diferentes períodos de tiempo.
Comparar ventanas de tiempo
A estas alturas ya tiene práctica en el uso de rangos de tiempo con cláusulas SINCE y UNTIL . Pero ¿qué pasa si quieres comparar valores de diferentes rangos de tiempo? Puedes lograr esto con la cláusula COMPARE WITH .
NRQL utiliza SINCE y UNTIL para definir un período de interés. Luego, puede indicar el período de tiempo con el que desea comparar utilizando una cláusula COMPARE WITH [time period] AGO que contenga un valor de compensación relativo.
Por ejemplo, en la consulta de ejemplo siguiente, puede comparar los datos del último día con los datos de la semana anterior utilizando un desplazamiento relativo de hace 1 semana.
Para mapear la comparación de valores a lo largo del tiempo, agregue TIMESERIES. Esto crea un gráfico de líneas de la comparación, lo que le permite visualizar cómo se compara este período con los datos recientes y realizar un seguimiento a lo largo del tiempo.
SELECT average(duration) FROM Public_APICall SINCE 1 day ago COMPARE WITH 1 week ago TIMESERIES
Las comparaciones pueden responder rápidamente preguntas sobre lo que sucede en sus aplicaciones. ¿Los diferentes valores de ventas, rendimiento, MTTR o errores han subido o bajado en comparación con la semana pasada? Y, si está investigando un problema, le resultará útil comparar un período de rendimiento problemático con un período de rendimiento normal.
Usar filtros comodín
Ahora sabe cómo utilizar una cláusula WHERE para filtrar los resultados de nuestra consulta. Además de utilizar operadores de comparación estándar, también puede utilizar LIKE y NOT LIKE si desea saber si un atributo contiene o no una subcadena específica. Para lograr esto, puede utilizar el símbolo de porcentaje (%) como comodín en cualquier parte de la cadena.
En nuestra consulta de muestra, puede obtener la cantidad de transacciones con el término "amazonaws" en cualquier parte (al principio, en el medio o al final) del nombre.
Puede usar % como comodín al principio y al final, lo que significa que New Relic comprueba el valor del atributo que eligió si contiene el término, como "Web" en cualquier parte del texto. Igualmente, podría usar %Web O Web% para coincidir con algo que termina en "Web" o comienza con "Web", respectivamente.
También puede agregar comodines entre cadenas para una búsqueda más refinada. Esta consulta busca un nombre de transacción que contenga la palabra "amazon" seguida de cualquier texto, pero que también contenga el término ".com". seguido de cualquier número de caracteres. Entonces, los resultados solo serán transacciones con "amazon" y ".com" en el nombre.
¿Qué sucede si necesita una especificidad extrema y los nombres no tienen una cadena común que pueda coincidir mediante comodines? Los operadores IN y NOT IN le permiten especificar un conjunto de valores que le gustaría comparar con un atributo. En lugar de especificar varias cláusulas WHERE con operadores AND o OR , puede simplificar una condición enumerando los valores entre paréntesis separados por comas.
En esta consulta de ejemplo, puede contar el número de transacciones cuyo subtipo es "graph.microsoft.com" o "s3.amazonaws.com". Si cambia la consulta para usar NOT IN en su lugar, obtendrá el número de transacciones cuyo subtipo no es "graph.microsoft.com". ni "s3.amazonaws.com".
Ahora puede controlar sus datos y manipularlos para hacer lo que necesita, lo que le permite crear dashboards y alertas. A continuación, aprenderá a especificar rangos de tiempo utilizando NRQL.
Especificar rangos de tiempo
Las cláusulas SINCE y UNTIL hacen más que darle información sobre rangos de tiempo relativos: también puede proporcionarles una fecha u hora específica. En la siguiente consulta de muestra, puede usar una fecha SINCE en formato YYYY-MM-DD.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28' TIMESERIES MAX
Puede usar esto para crear informes de SLA para un período de tiempo específico. Incluso puede incluir una hora específica con el formato YYYY-MM-DD HH:MM. En esta consulta, puede ver que los datos están configurados a las 6 p. m.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28 18:00' TIMESERIES MAX
A veces puede recibir una hora de evento en tiempo epoch (unix). También puede usar timestamp epoch con las cláusulas SINCE y UNTIL para no tener que traducir manualmente estos valores a otro formato de fecha.
SELECT average(duration) FROM Public_APICall SINCE 1698525489519 UNTIL 1698698289519 TIMESERIES MAX
Cuando NRDB muestra datos durante un período de tiempo, asume que desea ver los datos desde la perspectiva de su zona horaria. Pero con equipos internacionales dispersos, tu hoy podría ser el mañana o el ayer de un compañero de equipo, dependiendo de su ubicación. Puede utilizar la cláusula WITH TIMEZONE para definir una zona horaria desde la que mostrar datos. Esto afecta la interpretación de los valores en las cláusulas SINCE y UNTIL .
Considere los dos cuadros de ejemplo a continuación. Cada consulta tiene una zona horaria especificada usando WITH TIMEZONE. Los dos están separados por 8 horas. Observe que el patrón de datos es el mismo, pero con un desplazamiento de 8 horas para alinearse con cada zona horaria respectiva:
SELECT count(*) FROM Public_APICall SINCE yesterday UNTIL today WITH TIMEZONE 'America/Los_Angeles' TIMESERIES
SELECT count(*) FROM Public_APICall SINCE yesterday UNTIL today WITH TIMEZONE 'Europe/London' TIMESERIES
Antes de esta lección, todos sus mecanismos de control de tiempo dependían de tiempos relativos desde ahora. Ahora, puede ajustar la vista dependiendo de la ubicación de alguien en el mundo. Tal vez un cliente en la Costa Este informe un problema a su equipo de ingeniería ubicado en la Costa Oeste. Su equipo puede crear un dashboard y traducir la vista para que coincida con la zona horaria que citaría un cliente. Por lo tanto, si un cliente informa un problema a las 9 a. m. en la Costa Este, puede asegurarse de que, al mirar a las 9 a. m., no tenga que traducir mentalmente la diferencia.
Cuando necesite centrarse en fechas específicas de un evento de alerta y quiera investigar los datos sin una ventana de tiempo móvil relativa a la hora actual, esto le ayudará a obtener datos en una ventana de tiempo estática. En la siguiente y última lección, continuará aprendiendo cómo utilizar el tiempo en sus reportes con cohortes basadas en el tiempo.
Utilice la agrupación en cohortes basada en el tiempo
Si bien puede parecer complejo, la creación de cohortes basada en el tiempo simplemente significa una forma de organizar datos en grupos basados en el tiempo como minuteOf, hourOf, weekOf y más.
Cuando usa la cláusula SINCE para duraciones, recupera toda la longitud de tiempo de la consulta. Pero ¡es posible que esos datos no siempre cuenten toda la historia! ¿Qué sucede si necesita analizar más de cerca el rendimiento en un período de tiempo? Con la agrupación por cohortes basada en el tiempo, puede clasificar aún más los datos en agrupaciones lógicas basadas en el tiempo.
Al utilizar una combinación de FACET y una de las muchas funciones basadas en el tiempo (como hourOf(timestamp)), puede tomar datos de una semana y comprender el rendimiento en función de la hora específica en la que ocurrió. Esto revela tendencias e identifica los momentos más críticos para su aplicación:
SELECT average(duration) FROM Public_APICall FACET hourOf(timestamp) SINCE 1 week ago
Después de ejecutar la consulta anterior, puede ver el tiempo de respuesta más lento según la hora del día. New Relic ofrece muchas opciones diferentes para desglosar según el tiempo. El ejemplo anterior agrupa por hora, pero también puede agrupar por día de la semana para determinar qué días tienen el mejor y el peor tiempo de respuesta.
SELECT average(duration) FROM Public_APICall FACET weekdayOf(timestamp) SINCE 1 week ago
Ahora puedes ver los periodos más lentos de tu aplicación en cualquier día específico. Puede utilizar esto para responder preguntas críticas para el negocio como "¿Cuándo vendemos la mayor cantidad de productos?", o "¿Cuándo tenemos la mayor cantidad de registros o inicios de sesión?".
También puedes agrupar los resultados por una fecha específica. Esto ayuda a la hora de considerar informes de SLA o analizar cambios de rendimiento durante un período determinado.
SELECT average(duration) FROM Public_APICall FACET dateOf(timestamp) SINCE 1 week ago
La agrupación en cohortes basada en el tiempo expone problemas que ocurren en minutos, horas, días o semanas específicos. Sin importar los datos que envíe a New Relic, NRQL le permite dividir, desglosar, organizar y visualizar sus datos en cualquier formato que necesite.
También hay muchas otras opciones disponibles para agrupar, como semana, mes y año, según su retención de datos. Para ver la lista completa, diríjase a nuestra página de documentación Agrupar resultados a lo largo del tiempo.
Próximos pasos
Con el conocimiento que ha adquirido aquí, puede crear visualizaciones de dashboard y controlar los aspectos de los datos que más le interesan. Puede usar estas técnicas para reducir el enfoque y obtener alertas más granulares y específicas, y producir visualizaciones más detalladas. Cuando esté listo, puede avanzar a nuestro tercer tutorial, donde aprenderá habilidades adicionales de NRQL, que incluyen filtros, casos de facetas, histograma, apdex, filtrado por eventTypes, anulación de valores y extrapolación.









