このリポジトリは、Grafana 9 以降のバージョンで利用可能な組み込みプラグイン (ステータス履歴と状態タイムライン) を優先してアーカイブされています。これらのプラグインは、flant-statusmap の代替としてコミュニティによって使用されます。詳細については、問題 #302 を参照してください。このプラグインがニーズに合っていると思われ、開発を継続したい場合は、お気軽にフォークしてください。ぜひさらなる発展を目指してください。
複数のターゲットの個別のステータスを経時的に表示するパネル。
docker compose up
を実行し、ブラウザで http://localhost:3000 を開くと、簡単なデモが表示されます。
オブジェクトのステータスの変化の履歴を確認できるように、一定期間にわたる一連の時系列ステータスを視覚化することが切実に必要でした。私たちは多くの Kubernetes クラスター (および関連インフラストラクチャ) を保守しているため、その主なケースはサーバーと Kubernetes ポッドの健全性状態の視覚化と、HTTP サービスの健全性チェックです。私たちは利用可能なさまざまな Grafana プラグインを試しました (これらは以下の謝辞にリストされています) が、どれも私たちが探していたものに本当に近い機能と視覚化を提供できませんでした。
注意: プラグインを作成するまでの詳細については、この投稿をご覧ください。
このプラグインで視覚化されるオブジェクトは異なる場合があります。IT コンポーネント (サーバー ホストや Kubernetes ポッドなど) だけでなく、上の図のコーヒー メーカーなど、想像できるあらゆるものに当てはまります。これらのオブジェクトには、事前定義された値のセットである個別のステータス( ok
= 0、 off
= 1、 fail
= 2 など) が必要です。
きちんとしたグラフを作成するには、データソースが適切なデータを返す必要があります。プラグインは、パネル オプションのバケット幅に応じて$__interval
変数を調整します。クエリでは$__interval
にわたるステータスを集計する必要があります。
複数値モードを期待どおりに機能させるには、複数のクエリを定義する必要があります。考えられるステータスごとに 1 つのクエリです。
プラグインは現時点ではデータを時間内に集計せず、入力データをバケットとしてレンダリングするだけです。このため、データには時間範囲内の各タイムスタンプのポイントと、考えられるすべてのターゲット (y 軸ラベル) の等しいタイムスタンプが含まれている必要があります。この制限は問題 #53 で解決されます。
Prometheus からのデータを操作するには、オブジェクトの個別のステータスを設定する必要があります。これらのステータスをメトリクスに保存するための要件は次のとおりです。
0
と1
2 つの値が必要です。それが完了したら、クエリを介してすべてのデータを収集できます。例:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
クエリの間隔中にそのようなステータス (
) がなかった場合、Prometheus は何も返しません。それ以外の場合は、ステータスの値が返されます。
たとえば、5 種類のステータスと 5 つの許容値 ( 0
、 1
、 2
、 3
、 4
) を持つメトリクス ( coffee_maker_status
) がある場合、次のルールを使用してこのメトリクスを変換する必要があります。
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
これが、値3
のcoffee_maker_status
メトリクスが新しいメトリクスに変換される方法です。
coffee_maker_status:discrete{status="3"} 1
Prometheus が各ステータスに0
と1
値を持っている場合、これらすべてのメトリクスを集計できるため、オブジェクトの利用可能なすべてのステータスを時間の経過とともに取得できるようになります。
「形式」で「時系列」を選択し、クエリでGROUP BY ($__interval)
を使用します。 $tag_
Y 軸ラベルを定義するために「Alias by」で使用できます。
$__interval
にわたる集計を含むクエリの例は次のようになります (考えられるステータス値ごとに 1 つのクエリが必要です)。
SELECT
$__timeGroupAlias(date_insert,$__interval),
name AS metric,
min(statusi) AS "statusi"
FROM coffee_makers
WHERE
$__timeFilter(date_insert) AND statusi=1
GROUP BY 1,2
ORDER BY $__timeGroup(date_insert,$__interval)
metric
列は Y 軸ラベルとして使用されます。
まず、考えられるステータスの値ごとに個別のクエリを作成する必要があります。各クエリには、グループ化のための同様の凡例も必要です。
次に、ステータス値のカラー マッピングを離散カラー モードで定義する必要があります。
プリセットを使用して、交通信号の色またはソラライズされたパレットの 8 色を定義できます。
注:スペクトルと不透明度のカラー モードは、ヒートマップ プラグインでの場合と同じように機能します。
複数の値のチェックボックスは、それらの表示方法を指定します。
表示ヌルは空のバケットとして扱うことも、値0
の色で表示することもできます。
最小幅と最小間隔は、最小バケット幅とバケット間の間隔を指定するために使用されます。角丸処理を使用してエッジを丸くすることもできます。
指定された時系列の値のみを表示するには、値インデックスを正の数に設定します。
[凡例を表示]チェックボックスをオンにすると、パネルの下部にある凡例が切り替わります。
行ソートを使用して、Y 軸でラベルをソートできます。メトリクス — y ラベルを「メトリクス」タブで定義されているとおりに並べ替えます。 a→z および z→a は、ラベルを自然な順序で降順または昇順に並べ替えます。
ページネーションを有効にすると、グラフ上のページネーション コントロールが切り替わります。
ページあたりの行数グラフに表示する行数。
[ツールチップを表示] は、バケットの上にマウスを置くとツールチップの表示を切り替えます。
クリック時のフリーズは、クリック時にツールチップの「フリーズ」を切り替えます。固定ツールチップは、データをフローティング ツールチップと比較したり、URL をたどったりするために使用できます。
[項目を表示] は、ツールチップ内の追加項目の表示を切り替えます。
Items は、ツールチップに URL を表示するための定義のリストです。
各 URL には、テンプレート、アイコン、ラベル、および書式設定オプション (変数の小文字と日付形式) があります。
場合によっては、根本/原因分析を実行する場合など、ステータス パネルは 1 つのダッシュボードからより具体的なダッシュボードに移動するために使用されます。このような場合、ユーザーは、(時間の前後のバケットを分析できるようにするために)目的のイベントを中心に保ちながら、時間範囲の範囲を縮小したい場合があります。これらの値は__bucket_from
および__bucket_to
を通じて導入されます。
__bucket_from
: これはbucket.from
からパーセントバケットを引いた値です。 __bucket_to
: これはbucket.to
の値にパーセント バケットを加えたものです。
このプラグインの最初の公開リリースは、Flant エンジニアによって完全に作成されました。全体のアイデアは Dmitry Stolyarov (@distol) によってもたらされ、初期バージョンは Sergey Gnuskov (@gsmetal) によって書かれ、最終的な変更は Ivan Mikheykin (@diafour) によって行われました。
このプラグインは、Grafana の「ヒートマップ」パネルに基づいており、カーペット プロット、ディスクリート パネル、ステータス パネル、ステータス ドット、ステータス別グループのアイデアから部分的にインスピレーションを得ています。