Grafana のパネルに CloudWatch Synthetics の情報を表示する

記事タイトルとURLをコピーする

こんにちは😺
カスタマーサクセス部の山本です。
同じ部の末廣さんと一緒に検証を実施し、本ブログを執筆することにしました。

本記事の背景

先日、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

このパネルを実際につくってみたので、詳細を本記事に記載します。

参考に、Amazon CloudWatch Synthetics の画面です。

前提

ご利用中の Amazon Managed Grafanaのデータソースに CloudWatch を追加していることが、前提となります。
CloudWatch を追加する方法については、以下の公式ドキュメントをご参照ください。

Query

Grafana の Query(クエリ)は、データソースから必要なデータを取得するための命令文です。結果をビジュアライゼーションパネルに表示します。

  • クエリの用途
    • 取得: データソースから特定の期間のデータを取得します。
    • フィルタリング: 必要なデータだけを抽出するために条件を設定します。
    • 変換: データの集計、平均、最大/最小値の計算などの処理を行います。

ではやっていきましょう。
クエリA:Duration の取得

クエリB:SucccessPercent の取得

補足:DimensionsCanaryName = * を入れないと、パネルに 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 側の画面操作で実施できます。
例:

  1. フィルタリング(Filter): 特定の条件に基づいてデータをフィルタリングします。例えば、特定の値以上のデータだけを表示するといった操作が可能です。
  2. グループ化(Group By): データを特定の列や値でグループ化します。これにより、特定のカテゴリや時間帯ごとにデータを集計できます。
  3. 結合(Join): 複数のデータセットを結合します。例えば、異なるデータソースからのデータを一つの視覚化に統合できます。
  4. 計算(Calculations): 新しいカラムを追加し、既存のデータに対して計算を行います。例えば、合計値や平均値を計算することができます。
  5. 並び替え(Sort): データを特定のカラムに基づいて並び替えます。これにより、重要なデータを上位に表示できます。
  6. フィールドの追加/削除(Add/Remove Fields): 必要なフィールドのみを表示するために、特定のフィールドを追加または削除します。
  7. ピボット(Pivot): データをピボットして、列を行に変換したり、その逆を行ったりします。これにより、データの視点を変えて新たな洞察を得ることができます。
  8. フォーマット変更(Change Field Type): データのフォーマットを変更します。例えば、数値を文字列に変換するなどが可能です。

ではやっていきましょう。
まず、Filter fields by name を使用し、出力するフィールドをフィルタします。
計算結果である E のみ表示するようにしています。

次に、Reduce を使用し、Last* を選択し時系列データを最新の情報のみ表示するようにします。

最後に、Filter fields by name を使用し、Field (この場合E)を非表示にします。

Visualizations

収集したデータをグラフィカルに表示するための機能です。
Grafana には多くのビジュアライゼーションの種類が用意されています。
例:

  1. タイムシリーズ(Time Series): 時系列データを折れ線グラフやエリアチャートとして表示します。
  2. バー(Bar Chart): カテゴリごとのデータを棒グラフとして表示します。
  3. パイチャート(Pie Chart): データの割合を円グラフで表示します。
  4. テーブル(Table): データを表形式で表示します。
  5. ゲージ(Gauge): 単一の値をゲージメーターとして表示します。
  6. ヒートマップ(Heatmap): データの密度を色で示すヒートマップとして表示します。
  7. ステートタイムライン(State Timeline): 特定の状態の変化を時間軸で表示します。

ではやっていきましょう。
右側の Visualizations ボタンから Gauge を選択します。

パネルにタイトルを付け、Value options には、All values を選択します。

Gauge 内の OrientationAuto にしました。

Standard options 内の Min , Max を入れ、カラースキームを設定しました。
2 なら緑、1 なら黄色、0 は赤になります。

最後に SaveApply しましょう。

ダッシュボードにパネルを追加できました。

まとめ

「実行時間が一定の範囲内」、かつ「実行時の成功率が 100%」であるか を確認するパネルを作ってみました。
必要時にパッと見るようなパネルにできたのではないかと思います。
一方で、ドリルダウンして各々メトリクスをみたいときには、あまり使えません。
そのような場合には、時系列でメトリクス毎にデータを表示するようなパネルも必要だろうなと感じました。
パネルが増えすぎても運用負荷が上がるので、悩みどころです。
repeat 機能などを使うと、そのあたりが楽にできるようです。
Grafana のダッシュボードは色々な機能があるので、上手く使いこなせるようにもっと学習しようと思います。

末廣 満希(執筆記事の一覧)

2022年新卒入社です。ここに何かかっこいい一言を書くことができるエンジニアになれるように頑張ります。

山本 哲也 (記事一覧)

カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。

好きなサービス:ECS、ALB

趣味:トレラン、登山(たまに)