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.
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
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