Grafana: Característica: Trate nulo como zero para limiares de coloração

Criado em 24 jul. 2015  ·  24Comentários  ·  Fonte: grafana/grafana

Para painéis Singlestat em particular, seria útil tratar nulo como zero, caso contrário, não há como colorir um painel com um resultado nulo.

Comentários muito úteis

É possível retornar 0 para null no Prometheus com o operador OR: exression OR on() vector(0) retornará 0 se a expressão métrica não retornar nada. @pdf @torkelo

Todos 24 comentários

A função transformNull funciona muito bem se você usar Graphite

Não há mecanismo de preenchimento que eu possa ver agora para meu back-end.

qual é?

Prometeu

O prometheus tem funções / recursos de transformação? Eu ainda não experimentei (realmente ansioso para fazer isso, posso adicionar Prometheus como plugin de fonte de dados oficial)

Uma seleção bastante decente: http://prometheus.io/docs/querying/functions/

Em grafana 2.1, parece que os valores 'nulos' são tratados como valores 0, no que diz respeito à coloração (mesmo se nulo for mapeado para um texto como em # 1166).

Para torná-lo um pouco mais desafiador: se menor é melhor, no entanto, você pode definir limites para verde / laranja / vermelho em 0/1/3, ou seja, o valor> 3 é lido (mas talvez nulo também deva ser vermelho). Então, um valor nulo se torna verde, mas você pode argumentar que deveria ser vermelho.

Ao abordar este problema, vale a pena considerá-lo juntamente com o # 1319. Por exemplo, eles podem ser endereçados simultaneamente implementando intervalos para mapeamentos de texto e especificando códigos de cores para tais textos (cores para valores são então especificadas indiretamente, o que é mais flexível, mas possivelmente mais complicado).

@torkelo Eu concordo com @feliksik e chegaria a chamar isso de bug: Quando um de meus nós monitorados fica offline, consultar sua média de carga retorna nulo. Como o painel singlestat substitui nulo por zero, o painel mostra "N / A" em verde, quando realmente deveria ser vermelho ou incolor (de preferência dependendo de uma opção de configuração).


Editar: Acontece que esse recurso existia antes (# 1130), mas foi removido em cc21c66b3a128ea680be2e491cb89f8da90b2677. Acho que podemos mover a discussão para # 1130.

+1 Concordo com @ n-st e @feliksik : atualmente, nosso painel está mostrando 'vermelho' para N / A quando na verdade N / A significa nenhum dado / nenhuma atividade, portanto, o ideal é que não tenha cor.

É possível retornar 0 para null no Prometheus com o operador OR: exression OR on() vector(0) retornará 0 se a expressão métrica não retornar nada. @pdf @torkelo

fechando isso, pois a maioria dos back-ends de TSDB tem maneiras de lidar com nulos na consulta

@grobie

é verdade que o operador OR corrige isso se a expressão for nula. No entanto, em uma única página de estatísticas, isso corrige a cor dos valores nulos, mas quebra a cor das métricas não nulas, pois elas serão relatadas com vários valores: o valor real e o {} adicionado por sua expressão prometheus.

Posso sugerir para reabrir este problema?

@boeboe Eu atualizei minha expressão do comentário acima. Este deve funcionar para você.

Explicação: O Prometheus usa correspondência de rótulo em expressões. Se seu expression retornar qualquer coisa com rótulos, não corresponderá à série temporal gerada por vector(0) . Para tornar isso possível, é necessário dizer ao Prometheus explicitamente para não tentar corresponder a nenhum rótulo adicionando on() .

@grobie obrigado pela sua explicação. Infelizmente, a documentação do Prometheus não dá um exemplo claro sobre o uso do operador on() (https://prometheus.io/docs/querying/operators)

Aqui está minha consulta atual:
counter_services_active_sessions_responses_4xx_total{kubernetes_namespace="dev-appservicebase"} OR vector(0)

Como devo reescrever este para evitar duplicatas caso as métricas existam (neste caso, um microsserviço tem respostas HTTP 4xx de retorno). No momento, a consulta retorna os 2 resultados a seguir:

counter_services_active_sessions_responses_4xx_total {instance = "172.24.27.130:8081", job = "kubernetes-pods", kubernetes_namespace = "dev-appservicebase", kubernetes_pod_name = "active-sessions-dp-3210291495-node_netes_dp-3210291495-nw9netes_16716" node_netes_dp-3210291495-nw9netes716 "node_netes_16216716" node_netes = "active-sessions-dp-3210291495-nw9netes_167166" node_netes_dp-3210291495- "node_netes_16216716". -24-24 ", pod_template_hash =" 3210291495 ", type =" tipo-sessões-ativas "} 1173
{} 0

@grobie nevermind meu último comentário, devo ver que você atualizou a consulta. Obrigado!

Alguém tem uma solução alternativa de consulta para MySQL?

@TheFrogDaddy você pode usar um caso selecionado quando e / ou em combinação com a função de coalescência .

@TheFrogDaddy você pode usar um caso selecionado quando e / ou em combinação com a função de coalescência .

Oi, obrigado por entrar em contato comigo tão rapidamente. Não estou fazendo isso funcionar, estou faltando alguma coisa?

Tentei isso:

SELECT $__timeGroup(updated, '1h', 0) AS time, COALESCE(SUM(1),0) as value, 'Errors' AS metric FROM mytable WHERE $__timeFilter(updated) AND error_message IS NOT NULL GROUP BY 1;

E isto

SELECT $__timeGroup(updated, '1h', 0) AS time, CASE ISNULL(SUM(1)) WHEN TRUE THEN 0 ELSE SUM(1) END AS value, 'Errors' AS metric FROM myTable WHERE $__timeFilter(updated) AND error_message IS NOT NULL GROUP BY 1;

Obrigado

@TheFrogDaddy o que você está tentando resumir com sum(1) ? Não faz sentido para mim. Eu sugeriria que continuássemos as discussões em nosso site da comunidade e especificamente na tag mysql . Por favor, abra um novo tópico lá e você pode me enviar ping por @ + mefraimsson

É possível retornar 0 para null no Prometheus com o operador OR: exression OR on() vector(0) retornará 0 se a expressão métrica não retornar nada. @pdf @torkelo

Não se esqueça da opção instantânea ativa !!

Isso é bom

É possível retornar 0 para null no Prometheus com o operador OR: exression OR on() vector(0) retornará 0 se a expressão métrica não retornar nada. @pdf @torkelo

Boa. irmão

É possível retornar 0 para null no Prometheus com o operador OR: exression OR on() vector(0) retornará 0 se a expressão métrica não retornar nada. @pdf @torkelo

Isso não funciona com by (label) , embora pareça funcionar:

expression OR up*0
sum by (label) (data_metric) - sum by (label) (nodata_metric or up*0)

Aqui estão meus 2 centavos

sum(expression) by (label) -
sum(expression offset $__interval OR expression * 0) by (label)

Isso pode me dar a diferença da expressão 2 no intervalo de destino. Se o timeserie não estiver presente, o cálculo é feito considerando o valor 0

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

yuvaraj951 picture yuvaraj951  ·  3Comentários

ahmetkakici picture ahmetkakici  ·  3Comentários

SATHVIKRAJU picture SATHVIKRAJU  ·  3Comentários

deepujain picture deepujain  ·  3Comentários

ricardclau picture ricardclau  ·  3Comentários