No primeiro tutorial NRQL, exploramos os fundamentos da construção de consulta. Abordamos a estrutura básica da consulta, definindo janelas de tempo e como selecionar um atributo específico a ser observado. Também aprendemos como começar a agregar e exibir dados usando gráficos e outras visualizações.
Neste tutorial, iremos um pouco mais fundo e exploraremos mais funções para criar agregações úteis. Aqui, você aprenderá como comparar os dados retornados com períodos anteriores e agrupar dados em janelas de tempo específicas. Você também encontrará ainda mais coisas para fazer com as funcionalidades SINCE
e UNTIL
e explorará o uso de curingas em filtros. Especificamente, você aprenderá como:
- consulta de valor exclusivo usando
uniques(attributeName)
- Determine quantos valores exclusivos existem em um atributo usando
uniqueCount(attributeName)
- Recuperar
earliest(attributeName)
elatest(attributeName)
dentro de um intervalo de tempo específico - Calcule porcentagens com base em um qualificador ou outro ponto de dados com
percentile()
- Execute matemática básica usando funções de atributo e agregação, ou uma combinação de ambas
- Transforme nomes de atributos em algo personalizado e mais legível
- Pesquise para incluir/excluir usando curingas com
LIKE
ouNOT LIKE
, ou limite os resultados para aquelesIN
uma lista ouNOT IN
aquela lista - consulta em janelas de tempo mais avançadas usando datas, época e
WITH TIMEZONE
- Agrupe dados em janelas de tempo interessantes usando coorte baseada em tempo
Vamos começar!
Funções agregadas
Depois de concluir o primeiro tutorial NRQL, você usou count()
, average()
, sum()
, max()
e min()
para transformar seus dados de maneiras significativas. Mas e se você quiser encontrar e contar valor exclusivo? Para encontrar o número de valores exclusivos registrados para um atributo em um intervalo de tempo especificado, você pode usar a função uniqueCount()
. Você só precisa fornecer o atributo que queremos inspecionar como argumento. Por exemplo, aqui está uma consulta para exibir todas as chamadas públicas exclusivas da API:
Para otimizar o desempenho da consulta, a função acima retorna resultados aproximados para consultas que fiscalizam mais de 256 valores exclusivos. Para retornar a lista real de valores exclusivos de um atributo em um intervalo de tempo especificado, podemos usar a função uniques()
.
SELECT uniques(http.url) FROM Public_APICall SINCE 1 day ago
Se desejar fornecer um segundo parâmetro de limite para especificar um valor de limite diferente do padrão de 1.000. Você pode fazer isso usando uniques(attribute[,limit])
, que modificará o limite para o que você quiser, até um máximo de 10.000.
Para recuperar o valor mais recente de um atributo em um intervalo de tempo especificado, use a função latest()
. Neste exemplo de consulta, você pode localizar o tempo de resposta mais recente para uma chamada de API no último dia. Isso pode ajudá-lo a localizar o valor mais recente para uma transação ou serviço de relatório intermitente.
Do outro lado do espectro, você poderia usar a função earliest()
para conseguir o oposto. Ele retornará o valor mais antigo de um atributo registrado no intervalo de tempo especificado. Neste exemplo de consulta, você pode recuperar o primeiro tempo de resposta para uma chamada de API no último dia. Se os dados forem relatados de forma consistente, isso reportará o ponto de dados do primeiro evento nas últimas 24 horas.
Você pode descobrir que precisa de porcentagens em vez de contagens, somas ou médias. O uso da função percentage()
permite calcular a porcentagem de um valor no conjunto de dados que corresponde a uma condição especificada. Esta função leva dois argumentos: o primeiro é uma função agregadora para o atributo desejado, como count()
. A segunda é uma condição WHERE
para especificar o subconjunto de dados que você gostaria de consultar.
Neste exemplo de consulta, você pode encontrar a porcentagem de chamadas de API no último dia que tiveram uma duração (ou tempo de resposta) superior a 100 milissegundos.
É muito comum visualizar dados de desempenho do aplicativo ou de experiência dos clientes usando percentis em vez de médias. Você pode usar a função percentile()
para entender a experiência do enésimo percentil.
Por exemplo, digamos que você queira saber qual foi a pior experiência (maior duração) de 98% dos seus clientes no último dia. Você pode solicitar ao NRDB percentile(duration, 98)
das últimas 24 horas.
Como você pode ver, a agregação pode manipular dados de maneiras poderosas. Você pode usar uniqueCount()
para contar as entradas exclusivas de um atributo específico. Mas você também pode usar isso para identificar uma contagem de máquinas exclusivas, reportar contêineres ou até mesmo quantos pontos de dados personalizados são enviados para o New Relic. E, se quiser saber quais os valores exclusivos disponíveis para consulta, pode sempre pedir uma lista através de uniques()
.
As funções latest()
e earliest()
têm valor particular ao lidar com dados esparsos ou ao investigar quando algo começou ou parou de ser reportado (supondo que o New Relic ainda armazene os dados). A função percentage()
pode mostrar qual porcentagem de eventos correspondeu a um qualificador em comparação com o conjunto de resultados geral. Por fim, você pode usar percentile()
como um Indicador-chave de desempenho definindo uma meta para garantir que 90% de todos os usuários finais de transação excedam a duração fornecida.
Na próxima etapa, você aprenderá como fazer matemática básica com NRQL.
Use operadores matemáticos
NRQL oferece suporte a operadores matemáticos básicos. Você pode realizar adição (+
), subtração (-
), multiplicação (*
) e divisão (/
) em valores numéricos de atributo e resultados de funções agregadoras.
Por exemplo, capturamos o tempo de resposta total (como duration
) e o tempo de resposta do banco de dados (como databaseDuration
) quando registramos um evento de transação. Mas e se você quiser descobrir o tempo médio gasto fora do processamento do banco de dados? Você poderia começar calculando esse valor para cada evento em seu conjunto de dados usando uma consulta como esta.
SELECT GigabytesIngestedBillable - GigabytesIngestedFree, metric FROM NrMTDConsumption WHERE productLine IS NOT NULL
Ótimo! Você acabou de fazer algumas contas básicas. Isso é útil para ajudá-lo a listar eventos individuais. Mas e se você quiser saber a duração média da transação sem o tempo do banco de dados? Convenientemente, você pode fazer a aritmética dentro da função:
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULL
Agora, e se você quisesse complicar ainda mais subtraindo, dividindo e multiplicando na mesma consulta para descobrir a duração sem o tempo do banco de dados, como uma porcentagem do tempo total? Bem, você pode adicionar a matemática:
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) / unitPrice * 100 FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULL
O New Relic relata os horários como parte do seu evento, para que você possa usá-los para calcular pontos de dados significativos ou até mesmo gerar resultados percentuais. Você pode maximizar ainda mais o poder da matemática básica fazendo coisas como cronometrar ações ou eventos personalizados ou enviar dados personalizados. Por exemplo, uma plataforma de comércio eletrônico que relata dados sobre tamanhos de pedidos e métodos de pagamento poderia usar matemática para calcular coisas como a taxa de conversão de pedidos versus visitas únicas de clientes.
Na próxima etapa, você aprenderá como usar o NRQL para rotular seu atributo.
Atributo da etiqueta
À medida que você começa a executar funções NRQL mais complexas, você pode se perguntar se pode tornar os nomes exibidos para consulta atributo mais úteis, especialmente para outras pessoas que não conhecem NRQL! Vamos considerar um exemplo usando o que você aprendeu no tutorial anterior.
SELECT average(duration-externalDuration) FROM Transaction
Você pode usar a cláusula AS
após uma função ou atributo para dar ao resultado um nome mais legível e significativo. Isso torna mais fácil para você e sua equipe entender exatamente o que um gráfico representa.
SELECT average(duration-externalDuration) AS 'Non-External Response Time' FROM Transaction
Isso pode parecer meramente estético, mas ao criar um painel detalhado, é importante rotular claramente seus dados. Isso garante zero ambigüidade para qualquer pessoa que visualize seu widget, outdoors, gráficos de linhas ou tabelas.
Voltaremos a isso em uma próxima lição sobre agrupamento, para explorar como AS
também pode criar conjuntos de resultados limpos em cenários mais avançados. A seguir, você aprenderá como comparar dados em diferentes janelas de tempo.
Comparar janelas de tempo
Agora você já pratica o uso de intervalos de tempo com cláusulas SINCE
e UNTIL
. Mas e se você quiser comparar valores de diferentes intervalos de tempo? Você pode conseguir isso com a cláusula COMPARE WITH
.
NRQL usa SINCE
e UNTIL
para definir um período de interesse. Em seguida, você pode indicar o período de tempo com o qual deseja comparar usando uma cláusula COMPARE WITH [time period] AGO
contendo um valor de deslocamento relativo.
Por exemplo, no exemplo de consulta abaixo, você pode comparar os dados do último dia com os dados da semana anterior usando um deslocamento relativo de 1 semana atrás.
Para mapear a comparação de valores ao longo do tempo, adicione TIMESERIES
. Isso cria um gráfico de linhas de comparação, permitindo visualizar como esse período se compara aos dados recentes e acompanhá-lo ao longo do tempo.
SELECT average(duration) FROM Public_APICall SINCE 1 day ago COMPARE WITH 1 week ago TIMESERIES
As comparações podem responder rapidamente a perguntas sobre o que está acontecendo no seu aplicativo. Os diferentes valores de vendas, desempenho, MTTR ou erro aumentaram ou diminuíram em comparação com a semana passada? E, se estiver investigando um problema, será útil comparar um período de desempenho problemático com um período de desempenho normal.
Use filtros curinga
Agora você sabe usar uma cláusula WHERE
para filtrar os resultados em nossa consulta. Além de usar operadores de comparação padrão, você também pode usar LIKE
e NOT LIKE
se quiser descobrir se um atributo contém ou não uma substring especificada. Para conseguir isso, você pode usar o símbolo de porcentagem (%
) como curinga em qualquer lugar da string.
Em nosso exemplo de consulta, você pode obter o número da transação com o termo “amazonaws” em qualquer lugar (início, meio ou fim) do nome.
Você pode usar %
como curinga no início e no final, o que significa que o New Relic verifica o valor do atributo escolhido se ele contém o termo, como "Web" em qualquer lugar do texto. Da mesma forma, você poderia usar %Web
OR Web%
para corresponder a algo que termina em "Web" ou começa com "Web", respectivamente.
Você também pode adicionar o curinga entre as strings para uma pesquisa mais refinada. Esta consulta verifica um nome de transação que contém a palavra "amazon" seguida de qualquer texto, mas também contém o termo ".com" seguido por qualquer número de caracteres. Assim, os resultados só serão negociados com “amazon” e “.com” no nome.
E se você precisar de extrema especificidade e os nomes não tiverem uma string comum que possa corresponder usando curingas? Os operadores IN
e NOT IN
permitem especificar um conjunto de valores que você gostaria de verificar em um atributo. Em vez de especificar diversas cláusulas WHERE
com operadores AND
ou OR
, você pode simplificar uma condição listando os valores entre parênteses separados por vírgulas.
Neste exemplo de consulta, você pode contar o número de transações cujo subtipo é "graph.microsoft.com" ou "s3.amazonaws.com". Se você alterar a consulta para usar NOT IN
, obterá o número de transações cujo subtipo não é "graph.microsoft.com" nem "s3.amazonaws.com".
Agora você pode controlar seus dados e manipulá-los para fazer o que precisa, permitindo construir painéis e alertas poderosos e significativos. A seguir, você aprenderá como definir intervalos de tempo específicos usando NRQL.
Especifique intervalos de tempo
As cláusulas SINCE
e UNTIL
fazem mais do que fornecer informações sobre intervalos de tempo relativos: você também pode fornecer uma data ou hora específica. No exemplo de consulta a seguir, você pode usar uma data SINCE
no formato YYYY-MM-DD
.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28' TIMESERIES MAX
Você pode usar isso para criar relatórios de SLA para um período de tempo especificado. Você pode até incluir um horário específico com o formato YYYY-MM-DD HH:MM
. Nesta consulta, você pode ver que os dados estão definidos para 18h.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28 18:00' TIMESERIES MAX
Às vezes, você pode receber um horário de evento em tempo de época (Unix). Convenientemente, você pode usar o registro de data e hora de época com cláusulas SINCE
e UNTIL
para não precisar traduzir manualmente esses valores para outro formato de data.
SELECT average(duration) FROM Public_APICall SINCE 1698525489519 UNTIL 1698698289519 TIMESERIES MAX
Quando o NRDB mostra dados durante um período de tempo, ele pressupõe que você deseja ver os dados da perspectiva do seu fuso horário. Mas com equipes internacionais dispersas, o seu hoje pode ser o de um companheiro de equipe amanhã ou ontem, dependendo da localização. Você pode usar a cláusula WITH TIMEZONE
para definir um fuso horário do qual exibir dados. Isso afeta a interpretação dos valores nas cláusulas SINCE
e UNTIL
.
Considere os dois gráficos de exemplo abaixo. Cada consulta tem um fuso horário especificado usando WITH TIMEZONE
. Os dois estão separados por 8 horas. Observe que o padrão de dados é o mesmo, mas com deslocamento de 8 horas para alinhar com cada fuso horário respectivo:
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 desta lição, todos os seus mecanismos de controle de tempo dependiam de tempos relativos a partir de agora. Agora você pode ajustar a visualização dependendo da localização de alguém no mundo. Talvez um cliente na costa leste da América relate um problema à sua equipe de engenharia localizada na costa oeste. Sua equipe pode construir um dashboard e traduzir a visualização para mapear o fuso horário, conforme citaria um cliente. Portanto, se um cliente avisar um problema às 9h na costa leste, você pode garantir, ao olhar para as 9h, que não precisará traduzir mentalmente a diferença.
Quando você precisar concentrar seus dados em datas específicas de um incidente e quiser investigar os dados sem uma janela de tempo móvel em relação à hora atual, isso o ajudará a obter dados em uma janela de tempo estática. Na próxima e última lição, você continuará aprendendo como usar o tempo em seus relatórios com coorte baseada em tempo.
Usando coorte baseada em tempo
Embora possa parecer complexo, a coorte baseada no tempo significa apenas uma maneira de organizar os dados em grupos baseados no tempo, como minuteOf
, hourOf
, weekOf
e muito mais.
Ao usar a cláusula SINCE
para durações, você recupera todo o período de consulta. Mas esses dados nem sempre contam toda a história! E se você precisar analisar mais de perto o desempenho dentro de um período de tempo? Com a coorte baseada em tempo, você pode classificar ainda mais os dados em agrupamentos lógicos baseados em tempo.
Usando uma combinação de FACET
e uma das muitas funções baseadas em tempo (como hourOf(timestamp)
), você pode obter dados de uma semana e entender o desempenho com base na hora específica em que ocorreu. Isso revela tendências e identifica os momentos mais críticos para o seu aplicativo:
SELECT average(duration) FROM Public_APICall FACET hourOf(timestamp) SINCE 1 week ago
Depois de executar a consulta acima, você poderá ver o tempo de resposta mais lento com base na hora do dia. A New Relic oferece muitas opções diferentes para facetar com base no tempo. O exemplo anterior agrupa por hora, mas você também pode agrupar por dia da semana para determinar quais dias têm o melhor e o pior ritmo de resposta.
SELECT average(duration) FROM Public_APICall FACET weekdayOf(timestamp) SINCE 1 week ago
Agora você pode ver os períodos mais lentos do seu aplicativo em qualquer dia específico. Você pode usar isso para responder a perguntas críticas de negócios, como "Quando vendemos mais produtos?", ou "Quando temos mais inscrições ou logins?".
Você também pode agrupar os resultados por uma data específica. Isso ajuda ao considerar relatórios de SLA ou analisar mudanças de desempenho durante um determinado período.
SELECT average(duration) FROM Public_APICall FACET dateOf(timestamp) SINCE 1 week ago
A coorte baseada em tempo expõe problemas que ocorrem em minutos, horas, dias ou semanas específicos. Não importa quais dados você envie para o New Relic, o NRQL permite que você os divida, organize e visualize da maneira que desejar.
Existem também muitas outras opções disponíveis para agrupamento, incluindo semana, mês e ano, dependendo da retenção de dados. Para ver a lista completa, acesse nossa página de documentação Resultados do grupo ao longo do tempo.
Qual é o próximo?
Com o conhecimento que você adquiriu aqui, você pode criar visualizações dashboard e controlar os aspectos dos seus dados que mais lhe interessam. Você pode usar essas técnicas poderosas para restringir o foco, obter alertas mais granulares e específicos e produzir visualizações muito mais interessantes. Quando estiver pronto, você pode avançar para nosso terceiro tutorial, onde aprenderá habilidades NRQL mais interessantes, incluindo filtros, casos de facetas, histograma, apdex, filtragem para eventTypes, substituição de valores e extrapolação.