redashが正常に動いているか、どう監視するか。

メリークリスマス⛄️
本記事はredash advent calendarの12/24の記事です。

はじめに

redashはさまざまな人が使うツールへと発展してきました。

それに応じてredashは常に安定稼働していなければならない必要性も高まってきています。

redashの状態監視がますます必要な状態になりました。

redashの監視といえば、status.jsonというものがあります。
https://kakakakakku.hatenablog.com/entry/2017/12/21/025718

これを使えば、いまredashがどれだけのクエリが保存されていて、memoryを使っていて。。。ということがわかるのですが。。

しかしある時、API経由で使っている人が「redashの返すクエリの結果が変わらないんだけど。。。」という問い合わせを受けました。

redash自体ハングしていたら、この状態はstatus.jsonではわからないのです。

redashが”機能的に正常に動いているのか、監視する必要がでてきました。

どうやるか

“機能的に”動いているかを確認したいのであれば、”機能的に”監視するのが一番。

redashでは単純に現在時間を返すクエリを登録します

SELECT to_char(now() + interval '9hour'  , 'YYYY/MM/DD HH24:MI:SS');

データソースはredashの持つpostgresにしました。

 

redashを監視サーバからAPIで叩きに行き、

前回実行した時間を差分を取るという仕組みです。

前回と違う結果だったら問題なし。同じ結果だったら”異常”とみなす。

 

監視サーバには以下のシェルを置きました。

# cat  ./redash_monitor.sh 
#!/bin/bash

# redashに問い合わせ(cache clear)
$(curl -s https://redash-url.jp/api/queries/309/refresh?api_key=HoZrcikN0uhqNnaAPUtHKhogehogehogehoge -X POST > /dev/null )

sleep 30;
# 現在の値を取得
curl -s https://redash-url.jp/api/queries/309/results.json?api_key=HoZrcikN0uhqNnaAPUtHKhogehogehogehoge  | jq -r '.query_result.data.rows[].to_char ' > /tmp/monitor.txt.tmp

# 差分を比較する。差分があれば通知。
diff /tmp/monitor.txt.tmp.previous /tmp/monitor.txt.tmp

if [ $? -eq 0 ]; then
  # 文字を整形する
  # headder
  cat << _EOT_ > /tmp/msg.txt
  [info]
  [title] Redash might not work well
  [/title]
  Oh my Gush!! Your redash might not work well
  [/info]
  _EOT_

  _roomid=1234567890
  _body=`cat /tmp/msg.txt`
  curl -X POST -H "X-ChatWorkToken: 9aaefddccc40hogehogehogehoge" -d "body=${_body}" "https://api.chatwork.com/v2/rooms/${_roomid}/messages"
fi

mv /tmp/monitor.txt.tmp /tmp/monitor.txt.tmp.previous

 

我々の環境はchatworkを使っているので、宛先はchatworkになっています

これをcronに登録し定期的に実行するようにしています。

最後に

大活躍する機能。と思いたいけど実はredash自体が優秀なためそれほど日の目を見る事はないのです。。
だけどこの監視を設定していると、いち早くredashの不具合に検知することができます。

ちなみにredashがおかしくなったら、serverやworkerコンテナを消してもう一度作り直すのが多いです。

明日は @ariarijp さんによる記事です!
https://adventar.org/calendars/3299#list-2018-12-25