Solucionar problemas de Real-Time Metrics
Descubra por que um gráfico de Real-Time Metrics fica vazio ou baixo, por que os totais diferem de Billing e o que a API GraphQL retorna ao recusar uma query.
Esta página lista os sintomas que Real-Time Metrics mostra em um dashboard no Azion Console ou em uma resposta da API GraphQL, cada um com a sua causa e a sua correção. Os sintomas dos gráficos vêm primeiro: pontos baixos ou ausentes, gráficos vazios e com falha, a tag de variação, totais que diferem de Billing, o tooltip, a legenda, queries copiadas e o campo de query. Os erros que a API GraphQL retorna encerram a página.
Os pontos mais recentes de um gráfico ficam abaixo dos demais
Os últimos pontos de uma linha ficam abaixo do tráfego que você espera e sobem quando você atualiza o dashboard alguns minutos depois.
O Console não plota o último bucket quando o intervalo termina no minuto atual. Os buckets anteriores a ele ainda podem estar em agregação, por até 10 minutos, então podem ficar baixos, como Agregação e atraso explica.
- Termine o intervalo 10 minutos antes: na aba Absolute do seletor de intervalo de tempo, defina End date para um horário pelo menos 10 minutos no passado e selecione Apply.
- Atualize depois do atraso: selecione Refresh quando os minutos mais recentes terminarem a agregação.
- Em uma query GraphQL: defina o
enddetsRangepelo menos 10 minutos antes de a query rodar. A mesma query enviada duas vezes dentro desses 10 minutos retorna valores diferentes para os seus buckets mais recentes, pelo mesmo motivo.
Todo ponto de um intervalo que terminou há 10 minutos ou mais é final e retorna o mesmo valor a cada atualização.
Um gráfico mostra No data available
Um card de gráfico mostra No data available no lugar do gráfico, em um gráfico ou em todos os gráficos de uma aba de produto.
O dataset não tem métricas para o intervalo e os filtros selecionados. Três casos causam isso: o produto que registra as métricas não está ativo na sua conta, nenhum tráfego chegou a esse produto no intervalo ou um filtro aplicado não corresponde a nenhum tráfego.
- Ative o produto por trás do gráfico: Real-Time Metrics lê apenas o que esses produtos registram.
| Aba ou gráfico | Requisito |
|---|---|
| Gráfico Edge Cache, Build › Applications › Data Transferred | Cache ativo na sua conta |
| Build › Tiered Cache | Tiered Cache ativo na sua conta |
| Build › Functions | Functions ativo na sua conta |
| Build › Image Processor | Image Processor ativo na sua conta |
| Secure › Edge DNS | Edge DNS ativo na sua conta |
| Secure › Bot Manager | Uma assinatura de Bot Manager, contratada por meio do Technical Support |
| Observe › Data Stream | Data Stream ativo, com pelo menos um stream configurado |
- Amplie o intervalo de tempo: o intervalo inicial, Last 5 minutes, fica vazio quando nenhuma requisição chegou nesses minutos. Selecione um preset como Last 24 hours.
- Remova um filtro: selecione o ícone de remoção em cada chip de filtro aplicado até o gráfico plotar.
- Leia um array vazio como ausência de dados: pela API, um dataset sem métricas para o intervalo retorna
200e um array vazio, não um erro. Uma querytieredCacheMetricsem uma conta sem tráfego de Tiered Cache retorna:
Quando o produto registra tráfego no intervalo, o gráfico o plota, e um bucket sem eventos dentro do intervalo é plotado como zero.
Uma query para um intervalo antigo retorna um array vazio
Uma query GraphQL para um intervalo antigo retorna 200 e um array vazio, enquanto a mesma query para um intervalo recente retorna linhas.
Real-Time Metrics mantém cada dataset por um período fixo e, depois desse período, não retorna linhas nem erro. O período varia por dataset, então um dataset de breakdown pode não retornar nada para um intervalo que outro dataset ainda responde.
Uma query para um intervalo em 2023 retorna:
- Comece o intervalo dentro do período de retenção do dataset, que Retenção de dados lista.
- Espere que intervalos parciais retornem o que é mantido: um intervalo que começa antes do período de retenção ainda retorna as linhas dentro dele, sem erro.
- Armazene o que você precisa manter por mais tempo: consulte um período quando ele estiver completo e salve o resultado, como Boas práticas para Real-Time Metrics descreve.
Dentro do período de retenção, a query retorna as linhas que contêm dados.
Um gráfico mostra The chart can’t be plotted
Um card de gráfico mostra The chart can't be plotted. There was an issue loading the data. no lugar da sua linha de tags de agregação.
Cada gráfico envia a sua própria query para a API GraphQL, e a query deste gráfico retornou um erro em vez de dados. Os outros gráficos do dashboard ainda podem plotar.
- Envie a query de novo: selecione Refresh.
- Reduza o intervalo ou adicione um filtro: a API recusa uma query que ultrapassa a sua taxa de requisições ou as linhas que ela lê, como Limites de Real-Time Metrics mostra.
- Leia o erro você mesmo: no menu More options do gráfico, selecione Copy query e execute a query no Playground GraphiQL. A resposta traz a mensagem que o gráfico não mostra.
Depois da correção, o gráfico plota os seus pontos, ou a resposta nomeia um dos erros em A API GraphQL recusa uma query.
A tag de variação mostra Can’t compare
A tag de variação de um gráfico mostra Can’t compare, em uma cor de alerta com um ícone de triângulo, em vez de uma porcentagem.
A tag compara o intervalo selecionado com a janela de mesma duração imediatamente anterior a ele. Ela mostra Can’t compare quando a mudança fica entre –0,01% e +0,01%, quando alguma das janelas não tem valor ou quando a janela anterior é 0.
- Leia uma mudança dentro de ±0,01% como ausência de mudança: os totais das duas janelas diferem em menos de 0,01%.
- Escolha um intervalo cuja janela anterior teve tráfego: por exemplo, se uma aplicação começou a servir tráfego há 30 minutos, Last 1 hour compara com uma hora que não teve requisições.
- Compare janelas completas: termine o intervalo pelo menos 10 minutos no passado, para que nenhuma das janelas tenha buckets ainda em agregação.
Quando as duas janelas têm valor e a mudança passa de 0,01%, a tag mostra a mudança como uma porcentagem com duas casas decimais, como Tag de variação descreve.
Os totais de Real-Time Metrics diferem de Billing
O total de um dashboard ou de uma query para um período difere do uso que Azion Billing informa para o mesmo período.
Real-Time Metrics conta cada evento no máximo uma vez, enquanto Billing conta cada evento exatamente uma vez, então Real-Time Metrics pode perder um evento que Billing conta. Em média, os dois diferem em menos de 1%, como Contagem e Billing explica.
- Use o valor de Billing para cobranças: quando os dois diferem, Billing é a referência, como Real-Time Metrics e faturamento descreve.
- Use Real-Time Metrics para operações: leia os dashboards para ver uma mudança de tráfego em minutos, não para resolver uma cobrança.
- Compare períodos completos: termine o intervalo pelo menos 10 minutos no passado, para que nenhum bucket do total ainda esteja em agregação.
Uma diferença de cerca de 1% entre os dois é a diferença esperada, não uma falha de nenhum deles.
Um gráfico não mostra tooltip
Um gráfico plota, mas não mostra valores quando você passa o cursor sobre uma série.
Azion Console mostra o tooltip de um gráfico apenas em uma janela de navegador com mais de 540 px de largura. Com 540 px ou menos, nenhum gráfico mostra tooltip.
- Amplie a janela do navegador para mais de 540 px.
- Leia os totais na legenda: cada entrada mostra o nome da série e o seu total no intervalo.
- Exporte os pontos: no menu More options do gráfico, selecione Export CSV para baixar os pontos como foram plotados.
Em uma janela com mais de 540 px, o tooltip lista o nome e o valor de cada série no ponto sob o cursor.
A legenda de um gráfico para em 16 séries
Um gráfico que divide os seus dados em muitas séries, como uma por domínio, desenha 16 delas, e a sua legenda lista 16 entradas.
Um gráfico plota no máximo 16 séries. Nenhuma série depois da 16ª é adicionada ao gráfico nem à sua legenda.
- Filtre as séries de que você precisa: adicione um filtro em Domain ou Workload, o rótulo que a sua conta mostrar, com o operador In e os valores que você compara.
- Consulte todas as séries pela API: selecione Copy query no menu More options do gráfico e execute a query com um
limitalto o bastante para todas as linhas, até 10.000. A query copiada mantém olimitdo próprio gráfico.
Com o filtro aplicado, o gráfico desenha cada série que o filtro mantém, até 16, e a API retorna uma linha para cada série.
Uma query copiada não roda no GraphiQL
Uma query colada de Copy query no Playground GraphiQL não roda do jeito que foi colada.
Copy query copia um bloco de texto, não uma requisição: a linha # QUERY, a query, a linha # VARIABLES e as variáveis como um objeto JSON. A query lê os seus valores de filtro dessas variáveis, então o JSON vai no painel de variáveis, não no editor de query.
Para executar a query copiada no Playground GraphiQL:
O objeto começa depois da linha # VARIABLES.
A resposta contém um objeto data com o nome do dataset, com as linhas por trás do gráfico. Para o formato da área de transferência, consulte Copy query, e para o playground, Playground GraphiQL.
O campo de query recusa um filtro
Uma mensagem aparece abaixo do campo do Azion Query Language na linha de filtros, e Refresh fica desabilitado.
A expressão quebra uma regra de sintaxe do campo ou nomeia um campo que o dataset do dashboard atual não tem. Os campos dependem do dashboard, então uma expressão que funciona em um dashboard pode falhar em outro.
- Separe o operador com espaços: escreva
status = 200, nãostatus=200. - Coloque entre aspas os nomes de mais de uma palavra: escreva
"Upstream Status". - Feche as listas entre parênteses: escreva
domain in (domain1, domain2), sem vírgula depois do último valor. - Dê ao between dois valores diferentes: escreva
status between (200, 300). - Escolha os campos pelas sugestões:
Ctrl+Space, ouCmd+Space, lista apenas os campos do dashboard atual.
Quando a expressão é válida, a mensagem desaparece e Enter a aplica ao dashboard. Cada mensagem, literal, está listada em Mensagens de validação.
A API GraphQL recusa uma query
A API GraphQL responde em https://api.azion.com/v4/metrics/graphql. Quando recusa uma query, ela retorna um corpo JSON cujo campo detail contém a mensagem. Cada entrada cita o corpo que a API retorna. Para cada status code e mensagem da API, consulte Mensagens de erro da API GraphQL.
Uma query é recusada com Authentication credentials were not provided
A API responde 401 com este corpo:
A requisição não leva o header Authorization, e toda query para a API precisa de um personal token.
- Envie um personal token no header
Authorization: Token [TOKEN VALUE]. Para criar um, consulte Como criar um personal token. Teste-o com uma query mínima:
- Substitua um token inválido ou expirado: a API responde
401com outras mensagens, listadas em Mensagens de erro da API GraphQL.
Com um token válido, a API responde 200:
Uma query é recusada por não ter intervalo de tempo
A API responde 400 com este corpo:
Toda query precisa definir um intervalo de tempo no seu filter, e esta não define nenhum.
- Adicione
tsRangeao filtro: por exemplo,filter: { tsRange: { begin: "2026-01-01T12:00:00", end: "2026-01-02T12:00:00" } }. - Ou defina
tsGtetsLtpara o início e o fim do intervalo.
Com um intervalo de tempo, a query retorna 200 e as linhas desse intervalo.
Uma query é recusada com You have exceeded the limit amount allowed for selected fields
A API responde 400 com este corpo:
A query seleciona mais campos do que uma query aceita. O campo ts conta para o limite, e uma saída agregada como sum não conta, como Limites de Real-Time Metrics mostra.
- Remova os campos que você não lê, incluindo
tsquando você não agrupa por tempo. - Divida a seleção em duas queries sobre o mesmo intervalo e o mesmo filtro.
Dentro do limite, a query retorna 200 com todos os campos selecionados.
Uma query é recusada com The value for the query limit is invalid
A API responde 400 com este corpo:
O argumento limit está acima de 10.000 ou abaixo de 0.
- Defina
limitentre 0 e 10.000. - Para mais linhas, encurte o intervalo ou percorra as linhas em páginas com
offset, como Recursos da API GraphQL descreve. - Não remova
limitpara evitar o erro: uma query sem ele não é recusada, mas retorna 10 linhas.
Com um limit válido, a query retorna até esse número de linhas.
Uma query é recusada com Cannot query field
A API responde 400 quando o nome de um dataset ou de um campo não existe. Para um dataset, a mensagem sugere os nomes mais próximos:
A query nomeia um dataset ou um campo que a API não tem, como imageProcessedMetrics para o dataset imagesProcessedMetrics. Para um campo, a mensagem nomeia o tipo em que ele foi procurado, como Cannot query field "wafThreatFamilies" on type "HttpMetricsAggregatedFieldsLogType".
- Use o nome de dataset que a mensagem sugere, como
imagesProcessedMetrics. - Confira o campo no seu dataset: Campos da API GraphQL do Real-Time Metrics lista os campos de cada dataset.
Com nomes que a API conhece, a query retorna 200.
Uma query é recusada com Argument has invalid value
A API responde 400 quando groupBy ou aggregate nomeia um campo que ela não aceita naquele dataset:
groupBy aceita apenas as dimensões do seu próprio dataset, e remoteAddress é uma dimensão de httpBreakdownMetrics, não de httpMetrics. Um campo calculado não precisa de aggregate, então sum: uniqueSessions em connectedUsersMetrics retorna uma mensagem que começa com Argument "aggregate" has invalid value {sum: uniqueSessions}.
- Consulte o dataset que tem a dimensão: agrupe por
remoteAddressemhttpBreakdownMetrics, como Encontre as principais origens de ameaças do WAF faz. - Selecione um campo calculado diretamente: remova
aggregatee liste o campo, comouniqueSessions, entre os campos selecionados.
Com campos que o dataset aceita, a query retorna 200.
Uma query é recusada com You have reached the request rate limit
A API responde 429 com a mensagem You have reached the request rate limit!.
Mais requisições chegaram à API em um minuto do que ela aceita, como Limites de Real-Time Metrics mostra.
- Espere e envie a requisição de novo.
- Envie menos requisições: consulte um período completo uma vez e guarde o resultado, em vez de consultar o mesmo período de novo.
- Selecione vários campos em uma query em vez de uma query por campo.
Abaixo do limite de taxa, cada requisição volta a retornar os seus dados.
Uma chamada ao host legado da API responde 403 Forbidden
Uma query enviada para https://api.azionapi.net/metrics/graphql responde 403 com uma página HTML intitulada Azion - Default error page que diz Forbidden, não com JSON.
api.azionapi.net é o host legado da API. As queries de Real-Time Metrics vão para o endpoint v4.
- Envie a query para
https://api.azion.com/v4/metrics/graphql, com o headerAuthorization: Token [TOKEN VALUE]. - Atualize um data source do Grafana que usa a URL legada, como Importe o dashboard Data Transferred mostra.
No endpoint v4 com um token válido, a query retorna 200 e um corpo JSON.