こんにちは😺
カスタマーサクセス部の山本です。
同じ部の末廣さんと一緒に検証を実施し、本ブログを執筆することにしました。
本記事の背景
先日、Amazon CloudWatch Synthetics の Canary を使用しているお客様から、Amazon Managed Grafana でのパネル作成に関する相談を受けました。
Amazon Managed Service for Prometheus を使ってシステム監視をしている環境で、Amazon Managed Grafana のダッシュボードをご利用中とのことです。
Canary の監視結果もダッシュボードにパネル表示したい、という背景です。
内容は以下です。
- Canary 実行時の
Duration
が 12,000未満 かつ Canary の全 Step のSuccesspercent
が100%の場合に「OK」、それ以外の場合に「NG」を表示するパネルを作りたい
Duration
は Canary の実行時間、Successpercent
は Canary の成功率です。
「実行時間が一定の範囲内」、かつ「実行時の成功率が 100%」であるか を判定したい、という依頼です。
参考:Canary によって発行される CloudWatch メトリクス - Amazon CloudWatch
どういうパネルが良いのか、考えました。
複合条件の監視であり、条件が2つあります。 2分の1なのか、2分の2なのか、はたまた0なのかが、一目で分かるパネルが良いのではと考えました。 それぞれのメトリクスの下には Canary 名を表示します。
- Canary 名を表示し、上にステータスを表示
- ステータスが2になっていれば正常
- Durationが 12,000未満 であれば +1
- Canaryの全StepのSuccesspercentが100% であれば +1
- ステータスが2になっていれば正常
このパネルを実際につくってみたので、詳細を本記事に記載します。
参考に、Amazon CloudWatch Synthetics の画面です。
前提
ご利用中の Amazon Managed Grafanaのデータソースに CloudWatch を追加していることが、前提となります。
CloudWatch を追加する方法については、以下の公式ドキュメントをご参照ください。
Query
Grafana の Query(クエリ)は、データソースから必要なデータを取得するための命令文です。結果をビジュアライゼーションパネルに表示します。
- クエリの用途
- 取得: データソースから特定の期間のデータを取得します。
- フィルタリング: 必要なデータだけを抽出するために条件を設定します。
- 変換: データの集計、平均、最大/最小値の計算などの処理を行います。
ではやっていきましょう。
クエリA:Duration
の取得
クエリB:SucccessPercent
の取得
補足:Dimensions
に CanaryName = *
を入れないと、パネルに Canary名 を表示できないため、入れる必要があります。
C , D , E には Expression を追加します。
- C
- Math
$A < 12000
- この評価式は、A の Duration が 12,000 未満なら 1 、そうでない場合は 0 を返します。
- D
- Math
$B >= 100
- この評価式は、B の SucccessPercent が 100% 以上なら 1 、そうでない場合は 0 を返します。
- E
- Math
- $C + $D
- C と D の結果を加算することで、0 または 1 または 2 を返します。
Transform data
パネルの Transform data
セクションでは、Query
で抽出したメトリクスのうち、パネルに表示するものを決めます。Group By や Join など、クエリ側で実行するとデータソース側の負荷が高くなったり複雑になる部分を、Grafana 側の画面操作で実施できます。
例:
- フィルタリング(Filter): 特定の条件に基づいてデータをフィルタリングします。例えば、特定の値以上のデータだけを表示するといった操作が可能です。
- グループ化(Group By): データを特定の列や値でグループ化します。これにより、特定のカテゴリや時間帯ごとにデータを集計できます。
- 結合(Join): 複数のデータセットを結合します。例えば、異なるデータソースからのデータを一つの視覚化に統合できます。
- 計算(Calculations): 新しいカラムを追加し、既存のデータに対して計算を行います。例えば、合計値や平均値を計算することができます。
- 並び替え(Sort): データを特定のカラムに基づいて並び替えます。これにより、重要なデータを上位に表示できます。
- フィールドの追加/削除(Add/Remove Fields): 必要なフィールドのみを表示するために、特定のフィールドを追加または削除します。
- ピボット(Pivot): データをピボットして、列を行に変換したり、その逆を行ったりします。これにより、データの視点を変えて新たな洞察を得ることができます。
- フォーマット変更(Change Field Type): データのフォーマットを変更します。例えば、数値を文字列に変換するなどが可能です。
ではやっていきましょう。
まず、Filter fields by name
を使用し、出力するフィールドをフィルタします。
計算結果である E
のみ表示するようにしています。
次に、Reduce
を使用し、Last*
を選択し時系列データを最新の情報のみ表示するようにします。
最後に、Filter fields by name
を使用し、Field
(この場合E
)を非表示にします。
Visualizations
収集したデータをグラフィカルに表示するための機能です。
Grafana には多くのビジュアライゼーションの種類が用意されています。
例:
- タイムシリーズ(Time Series): 時系列データを折れ線グラフやエリアチャートとして表示します。
- バー(Bar Chart): カテゴリごとのデータを棒グラフとして表示します。
- パイチャート(Pie Chart): データの割合を円グラフで表示します。
- テーブル(Table): データを表形式で表示します。
- ゲージ(Gauge): 単一の値をゲージメーターとして表示します。
- ヒートマップ(Heatmap): データの密度を色で示すヒートマップとして表示します。
- ステートタイムライン(State Timeline): 特定の状態の変化を時間軸で表示します。
ではやっていきましょう。
右側の Visualizations
ボタンから Gauge
を選択します。
パネルにタイトルを付け、Value options
には、All values
を選択します。
Gauge
内の Orientation
を Auto
にしました。
Standard options
内の Min , Max を入れ、カラースキームを設定しました。
2 なら緑、1 なら黄色、0 は赤になります。
最後に Save
し Apply
しましょう。
ダッシュボードにパネルを追加できました。
Value mappings (追記)
Value mappings も追加してみました。
まとめ
「実行時間が一定の範囲内」、かつ「実行時の成功率が 100%」であるか を確認するパネルを作ってみました。
必要時にパッと見るようなパネルにできたのではないかと思います。
一方で、ドリルダウンして各々メトリクスをみたいときには、あまり使えません。
そのような場合には、時系列でメトリクス毎にデータを表示するようなパネルも必要だろうなと感じました。
パネルが増えすぎても運用負荷が上がるので、悩みどころです。
repeat 機能などを使うと、そのあたりが楽にできるようです。
Grafana のダッシュボードは色々な機能があるので、上手く使いこなせるようにもっと学習しようと思います。