Ver exemplos de consultas e explicações no contexto dos seus próprios dados pode ajudar você a transformar dados com conceitos mais avançados, como taxa de alteração e agregação. Neste tutorial, você se aprofundará nos conceitos encontrados em fundamentos do uso do NRQL e controle de seus dados com o NRQL com conceitos mais avançados.
Você aprenderá como avançar na criação de dashboards usando facetas por caso, funções de agregação avançadas, a palavra-chave EXTRAPOLATE, funções de agregação de filtragem e override de valores. Especificamente, você aprenderá a usar o seguinte:
- Funções de agregação avançadas como
filter(),apdex(),rate(),funnel()ehistogram(). - A cláusula
EXTRAPOLATE. FACET CASES()para valores de correspondência de atributo e grupo.filter()para combinar tipos de evento.- Overrides de valor.
Você pode não usar essas funções e recursos em cada dashboard, mas eles se mostram úteis ao lidar com problemas e requisitos específicos.
Use agregador avançado
Calcular taxa
Vamos começar com a função rate(). Ela permite que você visualize a frequência de eventos ao longo do tempo, o que ajuda a identificar padrões em períodos mais curtos de uma janela de tempo maior.
No exemplo abaixo, você pode ver a frequência média de solicitações a cada 5 minutos na última hora em comparação com a frequência média de 5 minutos da hora anterior. Observe que a consulta usa SINCE 1 hour ago. Esta é a janela de tempo geral em que você está calculando a taxa.
Você pode usar rate() para calcular solicitações por minuto ou solicitações por segundo definindo o intervalo de tempo como 1 minuto ou 1 segundo.
Entenda o comportamento do usuário final com gráficos Funis
Os gráficos de funis rastreiam a ocorrência de um valor de atributo em vários registros, e muitas pessoas os usam para entender o comportamento do usuário final. Você pode usá-los frequentemente para visualizar com que sucesso os usuários progridem por caminhos definidos e, especialmente, ao usar atributos personalizados.
Você pode usar a função de agregador funnel() para visualizar quantos usuários visitam uma página específica antes de passar para outra página. O primeiro parâmetro é o atributo de identificação para as entradas exclusivas que você está contando. Neste caso, a New Relic atribui e retém um atributo session ID para cada usuário em seu site (se o usuário tiver cookies ativados). Você também pode definir seu próprio ID de sessão usando atributos personalizados.
Os parâmetros restantes determinam como cada etapa do funis é calculada, escrita no formato , WHERE attr OP value. Neste caso, você tem dois: um que mostra quantas sessões de usuários visitaram a página inicial, depois outro que mostra quantos deles também navegaram para outras páginas. Tente uma consulta como esta em seus próprios dados e veja o que você obtém!
Filtros agregadores
filter() é uma função versátil que permite agregar vários pontos de dados em uma única consulta, oferecendo mais controle sobre quais eventos o resultado da função retorna. Neste exemplo, você usa filter() para retornar os valores separados para o total de transações, o total de transações da web e o total de transações fora da web:
SELECT count(*) AS 'All Transactions', filter(count(*), WHERE awsAPI = 'dynamodb') AS 'DynamoDB', filter(count(*), WHERE awsAPI = 'sqs') AS 'SQS' FROM Public_APICall SINCE 1 day ago
Como ele retorna um número, você também pode realizar operações matemáticas nos resultados da consulta. Por exemplo, você pode dividir o total de chamadas de API por todas as chamadas de API para ver qual porcentagem delas era DynamoDB:
Histograma
Os histogramas mostram a distribuição dos seus dados em intervalos de frequência em vez de como uma única média. Isso ajuda você a entender o agrupamento de pontos de dados por frequência, não apenas por médias. A função histogram() aceita três argumentos:
O atributo que você deseja plotar (como duração).
O valor máximo do intervalo que você deseja considerar (como "1" por 1 segundo ou menos).
O número de buckets nos quais você deseja agrupar os dados. Neste exemplo, você cria um gráfico
histogram()para todos os valores de duração entre 0 e 1 segundo, agrupando-os em intervalos de 50 ms. Você faz isso especificando "20" para o número de buckets. Todas as durações maiores que 1 segundo são agrupadas no último intervalo.
Apdex
A função apdex() calcula uma pontuação Apdex em qualquer valor numérico (como duração). Você pode calcular o Apdex de uma ou mais transações específicas para contabilizar valores de atributo personalizado. Você pode até fornecer seu próprio valor Apdex-T sem interferir nas configurações do aplicativo. Neste exemplo, você fornece à função um atributo de "duração" e um valor Apdex-T de 0,01, reportando-o como "Apdex of Duration":
SELECT apdex(duration, 0.1) AS 'Apdex Of Duration' FROM Public_APICall SINCE 1 week ago
Você também pode adicionar o operador TIMESERIES para criar gráficos dos dados ao longo do tempo. Observe que isso também plota os limites de satisfeito, tolerante e frustrado do Apdex.
Agora você explorou um conjunto totalmente novo de visualizações com funnel() e histogram(). Você também aprendeu como filter() pode ajudá-lo a ser mais específico na consulta com cláusulas WHERE e como rate() pode exibir a taxa de um atributo ao longo do tempo.
Essas consultas aprofundam seu conhecimento em NRQL. O Apdex é um padrão do setor e se aplica a muitos cenários. Os funis podem rastrear o progresso por meio de caminhos desejados, enquanto os histogramas visualizam a distribuição dos dados. Por fim, os filtros permitem restringir seus valores retornados com precisão. Em seguida, você aprenderá sobre EXTRAPOLATE.
Use extrapolar para grandes quantidades de dados
O banco de dados da New Relic (NRDB) recebe e processa grandes quantidades de dados todos os dias. Quando o APM registra uma grande quantidade de dados de eventos, os agentes da New Relic implementam uma técnica de amostragem para continuar coletando dados significativos enquanto reduzem o impacto potencial em seus aplicativos. Isso geralmente só acontece quando um único evento em um aplicativo ou serviço lida com volumes extremamente altos de requests.
Se você tiver vários agentes espalhados por várias instâncias com balanceamento de carga de um serviço, talvez nunca observe esse limite. Vamos descobrir o que você pode fazer quando isso acontece. O operador EXTRAPOLATE informa à New Relic para compensar matematicamente os efeitos da amostragem, retornando assim resultados que representam mais de perto a atividade em seu sistema. Você pode armazenar um valor extra para registrar quantos eventos semelhantes ocorreram acima do limite, o que permite retornar uma estimativa que contabiliza dados não amostrados.
SELECT count(*) FROM Transaction SINCE 60 minutes ago FACET appName TIMESERIES 1 minute EXTRAPOLATE
Você pode pensar que pode atingir o limite ao fazer isso. Tente remover EXTRAPOLATE da consulta e veja se sua contagem muda. Caso contrário, provavelmente você não atingiu o limite.
Quando você inclui EXTRAPOLATE em uma consulta, calculamos a proporção entre o evento relatado e o evento total. Em seguida, usamos essa proporção para extrapolar uma aproximação de dados não amostrados. Lembre-se de que apenas algumas consultas suportam esse uso. Quando incluída numa consulta NRQL que não a suporta ou que não utiliza dados amostrados, não tem efeito.
Dados homogêneos, como taxas de transferência, aproveitam ao máximo a função EXTRAPOLATE. Tem menos efeito ao tentar extrapolar uma contagem de coisas distintas (como uniqueCount() ou uniques()). Portanto, EXTRAPOLATE funciona apenas com consultas NRQL que usam uma das seguintes funções de agregador:
apdexaveragecounthistogramsumpercentageratestddev
Com EXTRAPOLATE concluído, vamos usar casos de atributos.
Use casos de faceta
Como você aprendeu anteriormente, FACET segmenta seus dados e ajuda a entendê-los a partir de perspectivas agrupadas de forma diferente (como ver o tempo médio de resposta com base em diferentes códigos de resposta). Quando você usa FACET, o NRDB organiza os dados em grupos com base nos valores dos atributos fornecidos. Mas e se você quisesse agrupar valores diferentes, como os códigos de resposta HTTP 200 e 201?
FACET CASES() resolve esse problema, permitindo que você escolha como os buckets de facetas serão divididos. O operador aceita qualquer número de parâmetros no formato WHERE attr OP value. No exemplo abaixo, você categoriza todas as transações com http.url começando com "amazon", "google" e "microsoft" em um bucket. Você também pode fazer isso para coisas como códigos de resposta a erros para agrupar nossos dados de maneira a aumentar a legibilidade e nos ajudar a entender o que está acontecendo em nossos aplicativos.
SELECT count(*) FROM Public_APICall FACET CASES(WHERE http.url LIKE '%amazon%', WHERE http.url LIKE '%google%', WHERE http.url LIKE '%microsoft%')
Como você pode ver, esses agrupamentos têm valor, mas você pode ter dificuldade para lê-los. Vamos organizá-los usando algo que aprendemos em um tutorial anterior:
SELECT count(*) FROM Public_APICall FACET CASES(WHERE http.url LIKE '%amazon%' AS 'Amazon', WHERE http.url LIKE '%google%' AS 'Google', WHERE http.url LIKE '%microsoft%' AS 'Microsoft')
FACET CASES() permite corresponder e agrupar atributos com valores diferentes que você deseja combinar. Essa funcionalidade tem muitos usos e se torna ainda mais útil quando você adiciona uma tag de dados personalizados aos seus dados de transação. Isso permite mais granularidade e controle na navegação e no agrupamento de dados. Em seguida, você analisará mais a fundo a filtragem, desta vez por tipo de evento.
Filtrar por tipo de evento
Agora você explorará algo que poucos clientes da New Relic sequer sabem: filtrar por tipos de eventos! Até agora, você fez consultas que extraem dados de uma única fonte. Mas e se você quiser plotar 2 pontos de dados armazenados como dois tipos de eventos diferentes? A consulta de dados do NRDB não tem limites para um único tipo de evento, e você pode consultar diferentes tipos de eventos separando-os com vírgulas.
Para tornar isso ainda mais útil, a função eventType() informa de qual tipo de evento vem o registro. Você pode usar isso para controlar a saída de dados. Neste exemplo, você pode ver o número total de eventos Transaction e PageView combinados, bem como os totais apenas de Transaction e PageView.
SELECT count(*) AS 'Combined Events', filter(count(*), WHERE eventType() = 'PageView') AS 'Page Views', filter(count(*), WHERE eventType()='Transaction') AS 'Transactions' FROM Transaction, PageView SINCE 1 day ago
Vejamos isso com mais detalhes: count(*) mostra o número total de eventos Transaction e PageView . No entanto, você pode usar a função agregadora filter() que aprendeu recentemente para fazer algo único. A consulta possui WHERE eventType()='PageView', que invoca a função de filtro para observar o tipo de evento como parte do conjunto total de resultados. Em seguida, ele filtra para exibir apenas aqueles eventos específicos. Você pode até adicionar TIMESERIES para visualizar dois pontos de dados diretamente comparáveis em um gráfico de linhas.
SELECT count(*) AS 'Combined Events', filter(count(*), WHERE eventType() = 'PageView') AS 'Page Views', filter(count(*), WHERE eventType()='Transaction') AS 'Transactions'FROM TransactionSINCE 1 day ago TIMESERIES max
Agora você localizou, retornou e representou graficamente dados de dois tipos de evento diferentes. Este exemplo mostra como a NRQL permite que você navegue por quaisquer dados necessários. Não são necessárias instruções JOIN complexas. A seguir, aprenda a usar valores de substituição.
Substituir valores
Contar valores NULL
Às vezes, os dados não são relatados no formato que você precisa. Por exemplo, números inteiros podem retornar como strings quando você precisa deles como inteiros para realizar cálculos matemáticos. Ou, um resultado NULL pode representar 0 em seus dados. A NRQL fornece funções para lidar com esses casos.
NULL os valores em atributo podem aparecer tanto em dados prontos para uso quanto em dados personalizados. Ao usar agregadores como count() e average(), o NRQL remove automaticamente os valores NULL do cálculo, executando a função apenas no evento sem valores NULL . NRQL permite contabilizar valores NULL inesperados em cálculos usando a cláusula OR value . Por exemplo, se você quiser ter certeza de que os valores NULL para um atributo cartValue contam como 0, você poderá usar cartValue OR 0 em sua consulta.
Neste exemplo, executando count() em "http.url" conta apenas o número de vezes "http.url" tem um valor. Mas se você adicionar OR 'Null' à consulta, poderá contar todas as transações onde "http.url" existe, e também esses têm um valor NULL .
SELECT count(duration) AS 'Events With Durations', count(http.url OR 'Null') AS 'Events With and Without URL' FROM Public_APICall SINCE 1 day ago
Você quase aprendeu tudo o que precisa para ajudá-lo a aprimorar seu painel! A seguir, você aprenderá como usar a coerção.
Coerção
NRQL não aplica coerção automaticamente. Isso significa que tratamos um float armazenado como uma string como faríamos com qualquer outra string, e você não pode usá-los com funções matemáticas como sum() ou average(). Para substituir esse comportamento, use boolean() ou numeric() para converter argumentos em valores booleanos ou numéricos. Neste exemplo, uma função average() em "duração" não fornece valor, pois esse atributo é uma string. Mas se você converter o atributo em um número usando numeric(duration), poderá usar a função average() com sucesso.
SELECT average(numeric(duration)) AS 'Ensuring stored value is treated as numeric', average(duration) AS 'Non-Converted Attribute' FROM Public_APICall SINCE 1 day ago
Outro exemplo comum são os valores BOOLEAN (TRUE ou FALSE), que muitas vezes são formatados incorretamente como strings. Quando isso acontece, você pode alterar como a fonte envia os dados para torná-los um booleano adequado. Ou você pode usar a função boolean(). A consulta de exemplo abaixo retorna o mesmo resultado, mas apenas porque você usa um valor que o agente envia como BOOLEAN. Se o seu atributo fosse uma string "TRUE", boolean() o converteria em um formato booleano adequado, permitindo que a consulta fosse executada conforme o esperado.
SELECT count(boolean(sampleDataSet)), count(sampleDataSet) FROM Public_APICall SINCE 24 hours ago
Você também pode converter valores booleanos e numéricos em strings usando a função string() . Com valores numéricos como números de ponto flutuante, você pode usar o argumento opcional precision para limitar o número de casas decimais da string. Esta consulta retorna o valor da duração como uma string limitada a três casas decimais.
SELECT string(duration, precision: 3) FROM Public_APICall SINCE 24 hours ago
Agora você pode controlar seus formatos de dados e dizer ao NRQL como deseja que ele atue. O NRQL opera da maneira que consideramos mais lógica, mas se isso não se adequar ao seu cenário exclusivo, você pode usar as funções exploradas nesta lição para substituir esses valores. Resta apenas uma coisa para você aprender: concatenação de strings.
Use concatenação de strings para acrescentar argumentos
Pode haver alguns casos em que você precise anexar ou preceder texto ao valor retornado de um atributo. Você pode conseguir isso usando a função concat(). Você pode fornecer até 20 argumentos para a função concat() concatenar em uma string.
SELECT concat('The duration of ', http.url, ' is ', duration, ' seconds') FROM Public_APICall
Você pode limitar o número de casas decimais usadas para quaisquer números de ponto flutuante nos valores do atributo concatenado. Para fazer isso, use o argumento opcional precision: como último valor. Neste exemplo, você acrescenta 's' para indicar segundos e limita o valor a 3 casas decimais.
SELECT http.url, concat(duration, 's', precision: 3) FROM Public_APICall
O New Relic exibe automaticamente valores que começam com http(s) como links nos quais você pode clicar para abrir uma nova página, o que significa que você pode criar integrações com soluções onde um URL dinâmico pode abrir uma página relacionada a uma entidade. O exemplo a seguir demonstra um URL de exemplo onde você define os valores do parâmetro de consulta pelos valores do atributo.
SELECT http.url, concat('https://www.example.com/?appId=', api, '&error=', error) AS 'URL' FROM Public_APICall
Você pode usar a função concat() para combinar valores, como cidade e país para localização, e acrescentar ou acrescentar strings adicionais para apresentar os dados conforme necessário.
Neste tutorial, você explorou a funcionalidade avançada do NRQL. Essas habilidades se aplicam a muitos cenários do mundo real do NRQL.
Agora você concluiu o terceiro tutorial do NRQL. Sempre que estiver pronto, o próximo e último tutorial desta série abordará recursos mais avançados: funções avançadas do NRQL.





