特にSinglestatパネルの場合、nullをゼロとして扱うと便利です。そうしないと、パネルにnullの結果で色を付ける方法がありません。
Graphiteを使用する場合、transformNull関数はうまく機能します
現在、バックエンドで確認できる塗りつぶしメカニズムはありません。
どっち?
プロメテウス
プロメテウスには変換機能/機能がありますか? 私はまだそれを試していません(本当にそれをやりたがっています、公式のデータソースプラグインとしてPrometheusを追加するかもしれません)
かなりまともな選択: http :
grafana 2.1では、色付けに関する限り、「null」値は0値として扱われるようです(nullが#1166のようにテキストにマップされている場合でも)。
もう少し厄介にするために:ただし、低い方が良い場合は、0/1/3に緑/オレンジ/赤のしきい値を設定することをお勧めします。つまり、値> 3が読み取られます(ただし、nullも赤である必要があります)。 したがって、null値は緑になりますが、赤である必要があると主張できます。
この問題に対処するときは、#1319と一緒に検討する価値があります。 たとえば、テキストマッピングの範囲を実装し、そのようなテキストの色分けを指定することで、同時に対処できます(値の色は間接的に指定されるため、柔軟性は高くなりますが、おそらくより面倒です)。
@torkelo私は@feliksikに同意するとバグこれを呼び出す限り行くだろう:私の監視対象ノードのいずれかがオフラインになった場合、その負荷平均を返すのはnullを問い合わせます。 singlestatパネルはnullをゼロに置き換えるため、パネルには「N / A」が緑色で表示されますが、実際には赤色または無色である必要があります(できれば構成オプションによって異なります)。
編集:この機能は以前(#1130)に存在していましたが、cc21c66b3a128ea680be2e491cb89f8da90b2677で削除されました。 議論を#1130に移すことができると思います。
+1 @ n-stと@feliksikに同意します。現在、ダッシュボードにはN / Aの「赤」が表示されていますが、実際にはN / Aはデータがない、アクティビティがないことを意味するため、理想的には色を付けないでください。
OR演算子を使用してPrometheusのnull
に対して0を返すことができます。メトリック式が何も返さない場合、 exression OR on() vector(0)
は0を返します。 @pdf @torkelo
ほとんどのTSDBバックエンドにはクエリでnullを処理する方法があるため、これを閉じます
@grobie
式がnullの場合、OR演算子がこれを修正するのは事実です。 ただし、単一の統計ページでは、これによりnull値の色が修正されますが、null以外のメトリックでは、実際の値とプロメテウス式によって追加された{}の複数の値が報告されるため、色が壊れます。
この問題を再開することを提案できますか?
@boeboe上記のコメントから表現を更新しました。 これはあなたのために働くはずです。
説明:Prometheusは、式でラベルマッチングを使用します。 もしあなたのexpression
リターンラベルの付いたもの、それはによって生成された時系列と一致しませんvector(0)
。 これを可能にするには、 on()
追加して、ラベルを一致させようとしないようにPrometheusに明示的に指示する必要があります。
@grobie説明ありがとうon()
演算子の使用法に関する明確な例が示されていません(https://prometheus.io/docs/querying/operators)
これが私の現在のクエリです:
counter_services_active_sessions_responses_4xx_total{kubernetes_namespace="dev-appservicebase"} OR vector(0)
メトリックが存在する場合に重複を回避するために、これをどのように書き直す必要がありますか(この場合、マイクロサービスはHTTP 4xx応答を返します)。 現在、クエリは次の2つの結果を返します。
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-nw9n7 "、kubernetes_pod_node_name -24-24 "、pod_template_hash =" 3210291495 "、type =" active-sessions-type "} 1173
{} 0
@grobieは私の最後のコメントを気にしないでください、あなたがクエリを更新したのを見たに違いありません。 ありがとう!
MySQLのクエリ回避策はありますか?
@TheFrogDaddyは、合体関数の場合や組み合わせて、selectケースを使用できます。
@TheFrogDaddyは、合体関数の場合や組み合わせて、selectケースを使用できます。
こんにちは、すぐに返事をくれてありがとう。 これが機能しません。何かが足りませんか?
これを試しました:
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;
この
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;
ありがとう
OR演算子を使用してPrometheusの
null
に対して0を返すことができます。メトリック式が何も返さない場合、exression OR on() vector(0)
は0を返します。 @pdf @torkelo
インスタントオプションをアクティブにすることを忘れないでください!!
それはいいです
OR演算子を使用してPrometheusの
null
に対して0を返すことができます。メトリック式が何も返さない場合、exression OR on() vector(0)
は0を返します。 @pdf @torkelo
良い。 兄弟
OR演算子を使用してPrometheusの
null
に対して0を返すことができます。メトリック式が何も返さない場合、exression OR on() vector(0)
は0を返します。 @pdf @torkelo
これはby (label)
では機能しませんが、これは機能しているようです。
expression OR up*0
sum by (label) (data_metric) - sum by (label) (nodata_metric or up*0)
これが私の2セントです
sum(expression) by (label) -
sum(expression offset $__interval OR expression * 0) by (label)
これにより、ターゲット間隔での2つの式の違いを知ることができます。 タイムセリが存在しない場合、値が0であると見なして計算が行われます。
最も参考になるコメント
OR演算子を使用してPrometheusの
null
に対して0を返すことができます。メトリック式が何も返さない場合、exression OR on() vector(0)
は0を返します。 @pdf @torkelo