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 un atributo específico para observar. También aprendimos cómo 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 - Calcule porcentajes basados en 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
- Busque para incluir/excluir empleando comodines con
LIKE
oNOT LIKE
, o limite los resultados a aquellosIN
de una lista oNOT IN
de esa lista - Consulta dentro de ventanas de tiempo más avanzadas usando fechas, época y
WITH TIMEZONE
- Agrupe datos en ventanas de tiempo interesantes utilizando cohortes basadas en el tiempo
¡Empecemos!
Funciones agregadas
Después de completar el primer tutorial de NRQL, utilizó count()
, average()
, sum()
, max()
y min()
para transformar sus datos de manera significativa. Pero ¿qué pasa si quieres encontrar y contar el valor único? Para encontrar el número de valor único registrado para un atributo durante un rango de tiempo específico, puede usar el uniqueCount() function
. Solo necesita proporcionar el atributo que queremos inspeccionar como argumento. Por ejemplo, aquí hay una consulta para mostrar toda la API de llamada pública única:
SELECT uniqueCount(http.url) FROM Public_APICall SINCE 1 day ago
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 ago
Si desea proporcionar un segundo parámetro de límite para especificar un valor límite diferente del valor predeterminado de 1000. Puedes hacer esto usando uniques(attribute[,limit])
, que modificará el límite a lo que quieras hasta 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.
SELECT latest(duration) FROM Public_APICall WHERE awsAPI = 'sqs' SINCE 1 day ago
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.
SELECT earliest(duration) FROM Public_APICall WHERE awsAPI = 'sqs' SINCE 1 day ago
Es posible que necesite porcentajes en lugar de recuentos, sumas o promedios. El uso de la función percentage()
le permite calcular el porcentaje de un valor en el conjunto de datos que coincide con una condición específica. Esta función toma dos argumentos: el primero es una función agregadora para el atributo deseado, como count()
. La segunda es una condición WHERE
para especificar el subconjunto de datos que desea consultar.
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.
SELECT percentage(count(*), WHERE duration > 0.1) FROM Public_APICall SINCE 1 day ago
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.
SELECT percentile(duration,98) FROM Public_APICall SINCE 1 day ago
Como puede ver, la agregación puede manipular datos de maneras poderosas. Puede utilizar uniqueCount()
para contar las entradas únicas de un atributo en particular. Pero también puede usar esto para identificar un recuento de máquinas únicas, un contenedor de informes o incluso cuántos puntos de datos personalizados se envían a New Relic. Y, si quieres saber qué valores únicos están disponibles para consultar, siempre puedes solicitar una lista usando uniques()
.
Las funciones latest()
y earliest()
tienen un valor particular cuando se trabaja con datos dispersos o se investiga 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 coincidieron con un calificador en comparación con el conjunto de resultados general. Por último, puedes emplear percentile()
como un indicador clave de rendimiento estableciendo un objetivo para garantizar que el 90% de todas las transacciones finales del usuario excedan 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 atributos numéricos como en resultados de funciones sumadoras.
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 dedicado fuera del procesamiento de la base de datos? Podrías comenzar calculando ese valor para cada evento en tu conjunto de datos usando una consulta como esta.
SELECT GigabytesIngestedBillable - GigabytesIngestedFree, metric FROM NrMTDConsumption WHERE productLine IS NOT NULL
¡Excelente! Acabas de realizar algunos cálculos básicos. Esto es útil para ayudarle a enumerar eventos individuales. Pero ¿qué pasa si quieres saber la duración promedio de la transacción sin el tiempo de la base de datos? Convenientemente, puedes hacer la aritmética dentro de la función:
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULL
Ahora, ¿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 NULL
New Relic informa los tiempos como parte de su evento, por lo que puede usarlos para calcular puntos de datos significativos o incluso generar resultados porcentuales. Puede maximizar aún más el poder de las matemáticas básicas haciendo cosas como cronometrar acciones o eventos personalizados, o enviar datos personalizados. Por ejemplo, una plataforma de comercio electrónico que proporcione datos sobre el tamaño de los pedidos y los métodos de pago podría utilizar las matemáticas para calcular aspectos como la tasa de conversión de los pedidos frente a las visitas únicas de clientes.
En el siguiente paso, aprenderá cómo usar NRQL para etiquetar su atributo.
Etiqueta atributo
A medida que comience a realizar funciones NRQL más complejas, es posible que se pregunte si puede hacer que los nombres que se muestran para el atributo de consulta sean más útiles, ¡especialmente para otras personas que no conocen NRQL! Consideremos un ejemplo utilizando lo que aprendió en el tutorial anterior.
SELECT average(duration-externalDuration) FROM Transaction
Puede utilizar la cláusula AS
después de una función o atributo para darle al resultado un nombre más legible y significativo. Esto hace que sea más fácil para usted y su equipo comprender exactamente qué representa un gráfico.
SELECT average(duration-externalDuration) AS 'Non-External Response Time' FROM Transaction
Esto puede parecer meramente estético, pero cuando creas un panel detallado, es importante etiquetar claramente tus datos. Esto garantiza cero ambigüedad para cualquiera que vea su widget, vallas publicitarias, 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.
SELECT average(duration) FROM Public_APICall SINCE 1 day ago COMPARE WITH 1 week ago
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
También puede especificar muchos períodos de tiempo relativos diferentes en el mismo formato, similar a UNTIL
. Para instancia, puede especificar 4 WEEKS AGO
o 6 HOURS AGO
.
SELECT average(duration) FROM Public_APICall SINCE 1 hour ago COMPARE WITH 6 hours ago TIMESERIES
Las comparaciones pueden responder rápidamente preguntas sobre lo que sucede en su aplicación. ¿Los diferentes valores de ventas, rendimiento, MTTR o error aumentaron o disminuyeron 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 ejemplo, puede obtener el número de transacción con el término "amazonaws" en cualquier parte (principio, mitad o final) del nombre.
SELECT count(*) FROM Public_APICall WHERE http.url LIKE '%amazonaws%' FACET http.url SINCE 1 day ago
Si cambia su consulta para usar NOT LIKE
en su lugar, obtendrá la cantidad de transacciones que no contienen la palabra elegida (como "google", como se muestra a continuación) en su nombre.
SELECT count(*) FROM Public_APICall WHERE http.url NOT LIKE '%google%' FACET http.url SINCE 1 day ago
Puede usar %
como comodín al principio y al final, lo que significa que New Relic verifica el valor del atributo que eligió si contiene el término, como "Web", en cualquier parte del texto. Del mismo modo, puedes usar %Web
O Web%
para hacer coincidir algo que termine en "Web" o comience 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.
SELECT count(*) FROM Public_APICall WHERE http.url NOT LIKE '%amazon%.com' FACET http.url SINCE 1 day ago
¿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".
SELECT count(*) FROM Public_APICall WHERE http.url IN ('graph.microsoft.com', 's3.amazonaws.com') SINCE 1 day ago
Ahora puede controlar sus datos y manipularlos para hacer lo que necesita, lo que le permite crear un panel de control y una alerta potentes y significativos. 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 brindarle información sobre rangos de tiempo relativos: también puede proporcionarles una fecha u hora específica. En la siguiente consulta de ejemplo, puede utilizar una fecha SINCE
en formato YYYY-MM-DD
.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28' TIMESERIES MAX
Puede utilizar esto para crear informes SLA para un período de tiempo específico. Incluso puedes 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, es posible que reciba una hora de evento en tiempo de época (Unix). Convenientemente, puede usar la marca de tiempo de época con las cláusulasSINCE
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 tus mecanismos de control de tiempo dependían de tiempos relativos a partir de ahora. Ahora puedes ajustar la vista dependiendo de la ubicación de alguien en el mundo. Tal vez un cliente en la costa este de Estados Unidos 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 asignarla a la zona horaria como lo citarían los clientes. Por lo tanto, si un cliente informa un problema a las 9 a. m. en la costa este, puede asegurarse de que cuando mire las 9 a. m. no tendrá que traducir mentalmente la diferencia.
Cuando necesite centrar sus datos en fechas específicas de un incidente y desee investigar los datos sin una ventana de tiempo móvil en relación con 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 informes con cohortes basadas en el tiempo.
Uso de cohortes basadas 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 utiliza la cláusula SINCE
para duraciones, recupera la duración completa de la consulta. ¡Pero es posible que esos datos no siempre cuenten toda la historia! ¿Qué pasa si necesita analizar más de cerca el rendimiento dentro de un período de tiempo? Con la agrupación en cohortes basada en el tiempo, puede ordenar 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, podrá ver el tiempo de respuesta más lento según la hora del día. New Relic ofrece muchas opciones diferentes para facetar según el tiempo. El ejemplo anterior agrupa por horas, pero también puedes 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 cohorte basada en el tiempo expone problemas que ocurren en minutos, horas, días o semanas específicos. No importa qué datos envíe a New Relic, NRQL le permite dividirlos, dividirlos, organizarlos y visualizarlos como desee.
También hay muchas otras opciones disponibles para agrupar, incluidas semana, mes y año, según la retención de datos. Para ver la lista completa, diríjase a nuestra página de documentación de Resultados grupales a lo largo del tiempo.
¿Que sigue?
Con el conocimiento que ha adquirido aquí, puede crear visualizaciones dashboard y controlar los aspectos de sus datos que más le interesan. Puede utilizar estas poderosas técnicas para limitar el enfoque y obtener alertas más granulares y específicas y producir visualizaciones mucho más interesantes. Cuando esté listo, puede avanzar a nuestro tercer tutorial, donde aprenderá habilidades NRQL más interesantes, incluidos filtros, casos de facetas, histograma, apdex, filtrado por tipos de eventos, anulación de valores y extrapolación.