Até agora, você aprendeu os fundamentos do uso do NRQL, como usar o NRQL para controlar seus dados e como usar o NRQL para aprimorar seu painel. Nesta série final de tutoriais, você aprenderá as técnicas NRQL mais avançadas que permitem consultar absolutamente tudo o que você precisa em seus dados. Este tutorial discutirá técnicas de agregação adicionais, funções matemáticas de nível superior e recursos avançados como filtragem Regex e agregação aninhada. Especificamente, você aprenderá como usar:
- A função de agregação
stddev()
e como agrupar dados agregados usando a funçãobuckets()
. - As funções matemáticas avançadas disponíveis no NRQL para suavizar, restringir e manipular os dados.
- Como descobrir os tipos de eventos e atributos disponíveis em seus dados em um determinado período.
- Como filtrar dados com Regex usando
RLIKE
. - Como usar agregação e subconsultas aninhadas.
Achamos que você achará esses recursos absolutamente inestimáveis. Vamos começar!
Use bucketing com agregação
O Desvio padrão mede a quantidade de variação ou dispersão dentro de um conjunto de valores. Utiliza uma escala de baixo (valores próximos da média) a alto (valores distantes da média). A função stddev()
permite observar as entrelinhas das médias e compreender os valores relatados em um nível mais profundo. Neste exemplo, você compara o Desvio padrão do tempo de resposta da transação ("duração") do último dia com o dia anterior.
SELECT stddev(duration) FROM Transaction SINCE 24 hours ago COMPARE WITH 24 hours ago TIMESERIES
A função stdvar()
funciona de maneira semelhante a stddev()
, mas retorna a variação padrão para atributo numérico.
Em uma lição anterior, você aprendeu como agrupar dados em uma configuração específica de buckets usando FACET cases()
. Você também pode agrupar dados por um atributo específico automaticamente usando FACET buckets()
. Esta função simplifica o agrupamento de dados para qualquer função de agregação e leva três argumentos:
buckets(attribute, ceiling, number-of-buckets)
.
O atributo pelo qual você deseja agrupar.
Valor máximo do intervalo de amostra (qualquer valor discrepante aparecerá no intervalo final).
O número total de buckets que você precisa.
Na consulta de exemplo, você usa NRQL para encontrar a duração média de uma transação inteira. Porém, você agrupa esse desempenho em transações que realizam volumes específicos de chamadas de banco de dados. Portanto, você especifica o atributo do bucket como
databaseCallCount
, define o limite máximo em 400 chamadas e agrupa-o em 10 buckets. Isso resulta no desempenho de transações de 0 a 40, 40 a 80, 80 a 120, 120 a 160, 160 a 200, 200 a 240, 240 a 280, 280 a 320, 320 a 360 e >360 chamadas de banco de dados. 10 baldes transparentes divididos uniformemente até o teto.SELECT average(duration)FROM TransactionSINCE 12 hours agoFACET buckets(databaseCallCount, 400, 10)
Com isso, você aprendeu todas as funções de agregação que existem atualmente no NRQL! Você pode dividir seus dados como um profissional. Se você acha que falta uma capacidade de agregação no NRQL, informe sua equipe de conta: estamos sempre procurando a próxima funcionalidade matadora que você possa precisar.
Use funções matemáticas avançadas
NRQL também oferece suporte a funções matemáticas mais avançadas para aqueles que precisam se aprofundar em seus dados. Essas funções podem extrapolar valores para potência de X, encontrar raízes quadradas, aplicar fixação para impor limites superiores e inferiores ou até mesmo manter valores positivos no eixo Y.
NRQL possui muitas funções matemáticas que manipulam valores de alguma forma. Neste exemplo, você verá alguns demonstrados simultaneamente.
A função abs(n)
retorna o valor absoluto para n: para valores n não negativos ela retorna "n" e para valores n negativos ela retorna o número positivo "n". Por exemplo, abs(2)
= 2 e abs(-4)
= 4.
Você também pode arredondar números decimais para inteiros usando floor()
, ceil()
e round()
. floor()
retorna o número inteiro completo mais próximo, arredondado para baixo, e ceil()
faz o oposto, arredondando para cima. round()
é bidirecional e arredonda para cima ou para baixo para o número inteiro completo mais próximo.
SELECT abs(duration), round(duration), ceil(duration), floor(duration) FROM Transaction SINCE 1 day ago
Você pode usar a fixação em um atributo para impor um limite superior ou inferior ao seu valor. Isso é útil para coisas como garantir que valores discrepantes extremos não distorçam a escala de um gráfico de série temporal. clamp_max(duration, 10)
retorna a duração, a menos que exceda 10; nesse caso, retorna 10. Muito simplesmente, qualquer coisa maior que 10 ainda retorna igual a 10. clamp_min(duration,1)
faz o inverso; se alguma duração for inferior a 1, será reportado como igual a 1.
SELECT clamp_max(average(duration), 10), clamp_min(average(duration), 1) FROM Transaction SINCE 1 day ago TIMESERIES
Agora você pode passar para a matemática avançada que muitos consideram difícil de usar. Como antes, podemos mostrar todas essas funções em um único exemplo de consulta.
A função pow()
eleva o primeiro argumento à potência do segundo argumento. Neste exemplo, você eleva a duração à potência de 2. Se precisar da raiz quadrada de um valor, a função sqrt()
pode fornecer isso rapidamente. E a função exp()
calcula a função exponencial natural do seu argumento.
Finalmente, NRQL também oferece logaritmos que atendem a uma série de funções semelhantes:
ln(n)
calcule o logaritmo natural: o logaritmo base e.log2(n)
calcule o logaritmo na base 2.log10(n)
calcule o logaritmo na base 10.log(n, b)
permite calcular logaritmos com uma base arbitrária b.SELECT pow(duration, 2), sqrt(duration), exp(duration), ln(duration), log2(duration)FROM TransactionSINCE 1 day ago
Nesta lição, você aprendeu como suavizar os dados do evento. round()
/ceil()
/floor()
permitem arredondar da maneira que desejar. A fixação permite definir limites nos dados, e as ferramentas matemáticas avançadas para logaritmo, raiz quadrada, potência e exponencial oferecem controle adicional para manipular os dados conforme necessário. A seguir, você aprenderá como descobrir evento e atributo.
Descubra evento e atributo
Descobrir evento e atributo pode ajudar a tirar dúvidas sobre seus dados disponíveis antes de consultá-los e auxiliar na automação! Vamos explorar esse poderoso utilitário.
Digamos que você queira uma lista de todos os tipos de eventos atualmente reportados à sua conta New Relic. A sintaxe SHOW EVENT TYPES
retorna uma lista de todos os tipos de eventos relatados em um determinado período. É uma das raras exceções em que uma consulta NRQL não precisa de SELECT
e FROM
. Você pode usar essa funcionalidade para coisas como confirmar a existência de dados de eventos personalizados.
SHOW EVENT TYPES SINCE 1 week ago
Talvez você precise saber qual atributo você tem disponível para um determinado tipo de evento. A função keyset()
fornece uma lista de todos os atributos de um tipo de evento, agrupados por tipo de atributo. Você receberá apenas atributos que contenham valores dentro da janela de tempo fornecida, que você pode usar para explorar seus dados. Você também pode usá-lo em automação, para coisas como garantir relatórios de dados de clientes corretamente.
SELECT keyset() FROM Transaction SINCE 1 week ago
Esses recursos ajudam você a descobrir mudanças nos tipos de eventos e atributos. Mais engenheiros de DevOps utilizam essas funcionalidades para finalizar jobs, ou até mesmo automatizá-los rapidamente. A seguir, você aprenderá como filtrar dados com Regex.
Filtrar com regex
Ocasionalmente, você pode querer filtrar dados com correspondência de padrões mais complexa do que LIKE
pode fornecer. Com a cláusula RLIKE
, você pode filtrar com expressões regulares para uma correspondência mais complicada.
Em qualquer cenário que você possa usar LIKE
, você tem a opção de usar RLIKE
para fornecer uma regex correspondente entre aspas. Neste exemplo, há uma lista de todos os nomes de host que terminam em números pares ou consoantes.
SELECT uniques(host) FROM Transaction WHERE host RLIKE '^.*[02468bcdfghjklmnpqrstvwxyz]'
Você também pode fazer combinações simples. Por exemplo, se você quiser corresponder um valor que começa com uma determinada letra ou palavra.
SELECT count(*) FROM Transaction WHERE name RLIKE 'W.*|O.*' FACET name
O mecanismo de expressão regular usa sintaxe RE2. Se precisar excluir caracteres, pode ser necessário usar sequências de escape com barra invertida dupla. (por exemplo: \).
Lembre-se de que RLIKE
tem inerentemente mais complexidade e menos desempenho que LIKE
. Use-o apenas quando LIKE
e outras funcionalidades de filtragem não atenderem às suas necessidades.
O suporte a expressões regulares permite possibilidades quase infinitas de correspondência de padrões. Se você já é um guru de regex, conhece o poder que isso agrega ao NRQL. Mas se não estiver, não se preocupe! Regex tem muitos recursos disponíveis para referência online. Agora que você aprendeu como usar regex com NRQL, o próximo item da lista é usar agregação aninhada.
Usar agregação aninhada
Você pode escrever consultas de agregação aninhadas com NRQL que usa uma consulta como FROM
para a consulta pai. Isso permite que você responda a perguntas como:
- Quantas transações por minuto minha aplicação atendeu e qual foi a taxa máxima de solicitações por minuto na última hora?
- Qual é o uso médio da CPU de todos os meus servidores e quais servidores específicos estão acima de 90%?
- Qual porcentagem de todas as sessões do usuário foi rejeitada imediatamente (ou seja, apenas um PageView na sessão)?
Vamos explorar cada um desses casos de uso com mais detalhes.
Exemplo 1: Máximo de chamadas de API na última hora
Primeiro, você pode contar o número de chamadas API por minuto na última hora. Isso retorna 60 pontos de dados em um gráfico:
SELECT count(*) AS apicallsFROM Transaction TIMESERIES 1 MINUTE
Agora, para encontrar o valor máximo relatado nesse período, coloque a consulta entre parênteses e use SELECT ... FROM
assim: SELECT z FROM (SELECT x AS z FROM y)
SELECT max(apicalls) FROM ( SELECT count(*) AS apicalls FROM Public_APICall TIMESERIES 1 minute )
Exemplo 2: servidores com alta carga de CPU
Este exemplo usa dados da New Relic Infrastructure. Às vezes, você deseja ver apenas hosts cuja CPU excedeu, em média, uma determinada porcentagem. Se você solicitar o average(cpuPercent)
ao NRQL, obterá uma lista de hosts com a porcentagem média de CPU mais alta. Porém, você não pode simplesmente adicionar um WHERE cpuPercent > 90
para limitar isso apenas a hosts rodando a 90% ou mais, porque isso removeria os dados antes de calcular a média.
Mas você pode resolver isso com agregação aninhada! Ao solicitar average(cpuPercent)
na subconsulta, você obtém a lista de hosts e sua CPU média. Agora, na consulta externa, você pode filtrar apenas os resultados que foram > x%
! (Dica: pode ser necessário ajustar o limite desta consulta para funcionar com a CPU dos seus hosts. Nós definimos para 20% aqui.)
SELECT hostname, cpu FROM (SELECT average(cpuPercent) AS cpu FROM SystemSample FACET hostname) WHERE cpu > 20
Exemplo 3 – Rejeições de Sessão
Muitas vezes as pessoas se perguntam como calcular a taxa de rejeição no monitoramento de front-end. Isso se refere a sessões que visualizam uma única página e “saltam” antes de visitar mais páginas. Com a agregação aninhada, você pode conseguir isso facilmente. Nossa consulta interna conta os PageViews
, agrupando-os por sessão. O conjunto de resultados passado para a consulta externa lista todas as sessões e quantas páginas cada uma visualizou. A consulta externa calcula então a porcentagem de sessões com uma contagem de 1 (isso indica uma "sessão devolvida", porque visualizaram apenas uma única página).
SELECT percentage(count(*), WHERE sessionLength = 1) FROM (SELECT count(*) AS sessionLength FROM PageView FACET session)
Nesta lição, você aprendeu como usar uma consulta como FROM
de outra consulta para responder perguntas mais complicadas. Só há uma última coisa a aprender: como usar subconsultas!
Usar subconsultas
As subconsultas em NRQL são semelhantes às agregações aninhadas, permitindo usar uma consulta aninhada dentro de outra consulta. Com subconsultas, a consulta aninhada vai para a instrução SELECT
e a cláusula WHERE
, enquanto as agregações aninhadas vão para a cláusula FROM
.
Vejamos alguns exemplos desses diferentes tipos de subconsultas.
Condições Numéricas
Você pode usar qualquer consulta que retorne um único valor numérico em condições numéricas. Este exemplo usa uma subconsulta na cláusula WHERE
que retorna o valor do 97º percentil da duração da chamada de API e, em seguida, retorna o nome e a duração das chamadas maiores que esse valor.
SELECT http.url, duration FROM Public_APICall WHERE duration > (SELECT percentile(duration,97) FROM Public_APICall)
IN Condições
Quando você tiver vários valores retornando de uma subconsulta, use uma condição IN
para a consulta pai comparar com cada valor. No exemplo, o atributo entity.guid
fornece dados para cada entidade única que tem um erro de transação, e isso corresponde ao valor entity.guid
das transações para determinar a duração média das entidades com erro.
SELECT average(duration) FROM Transaction WHERE entity.guid IN (SELECT uniques(entity.guid) FROM TransactionError) FACET appName TIMESERIES
Subconsultas na instrução SELECT
Você pode usar os resultados da subconsulta em cálculos com uma instrução SELECT
e pode especificar um intervalo de tempo diferente da consulta externa. Este exemplo calcula o delta entre a duração média atual e a dos últimos 7 dias.
SELECT average(duration) - (SELECT average(duration) FROM Public_APICall SINCE 7 days ago) FROM Public_APICall TIMESERIES
As subconsultas são uma ferramenta poderosa para exploração de dados, permitindo consultas mais sofisticadas em diferentes fontes de dados e intervalos de tempo.
Parabéns por concluir este tutorial. Você aprendeu sobre técnicas adicionais de agregação, funções matemáticas de nível superior e recursos avançados como filtragem Regex, agregação aninhada e subconsultas. Se você concluiu os três tutoriais anteriores, então trabalhou com quase todos os aspectos do NRQL que pode usar!
Esperamos que o NRQL seja útil para explorar seus dados e, se você tiver mais dúvidas ou encontrar problemas, sinta-se à vontade para entrar em contato com o suporte da New Relic. Ou, se preferir, você pode compartilhar sua experiência com nossa comunidade online.