arthur-1 Mackerel Advent Calendar 2023 マラソン2日目の記事です。
シナリオ監視したい!
Mackerelユーザーの皆様から、外形監視機能でシナリオ監視を行いたいと要望をいただくことがあります。ここで言うシナリオ監視とは、ユーザーが実際にサービスを利用するときと同様に、いくつかのURLへのアクセスや要素のクリックなどの一連の操作が成功するかどうかを定期的にチェックすることを指します。
例えば、
- ログインページを表示する
- フォームにログイン情報を入力する
- ボタンを押すとログインされ、ホーム画面が表示される
といったシーケンスを外部から実行する、といった具合です。よりユーザと同じ目線でサービスが利用可能であるかどうかを知ることができます。
今回は、この機能をMackerelに導入するとどう嬉しいのかを体感するために、プロトタイプを作ってみました。
mackerunn = Mackerel + runn
その名も「mackerunn」です。
runnというシナリオテストツールでテストを実行し、その結果をサービスメトリックやチェック監視としてMackerelに送信するツールです。
runnは「ランエヌ」と読むそうですが、mackerunnは「マッカラン*1」と呼んでください。
mackerunnの使い方
残念ながらまだビルド済みバイナリを配布していないので、使ってみたい方はリポジトリをcloneして各自でビルドしてください。(余裕ができたらバイナリ配布予定です。)Go 1.21.3以上でビルドできます。
とりあえず一発動かしてみたいとき
$ git clone https://github.com/Arthur1/mackerunn.git $ cd mackerunn/ $ export MACKERUNN_MACKEREL_APIKEY="your_api_key" $ go run ./cmd/mackerunn -runbook testdata/test.yml -service test -hostID 12345ABCD 2023/11/23 16:13:23 succeeded
実行時には3つのオプションと1つの環境変数が必要です。
-runbook
: runnのrunbook yamlの場所(サンプルとしてtestdata/test.ymlを用意してます)-service
: Mackerelのサービス名。サービスメトリックを投稿するために必要-hostID
: MackerelのホストID。チェック監視を行うために必要。どのホストに紐づけても良いですが、mackerunnを実行するホストのIDを指定しておくと良いでしょうMACKERUNN_MACKEREL_APIKEY
: MackerelのAPIキー
runnのrunbookは以下のようなyamlです。詳しくはrunnのドキュメントを参照してください。
desc: hogehoge runners: req: https://blog.arthur1.dev steps: test1: req: '/': get: body: null test: current.res.status == 200 test2: req: '/test': get: body: null test: current.res.status == 404 test3: req: '/': get: body: null test: current.res.status == 200
常駐させて定期的に監視させたいとき
cmd/mackerunnの代わりにcmd/mackerunndを実行すると、常駐アプリケーションとして動かせます。実際に運用する時にはこれをsystemdのサービスに登録することになるでしょう。オプションはmackerunnと同じです。
$ export MACKERUNN_MACKEREL_APIKEY="your_api_key" $ go run ./cmd/mackerunnd -runbook testdata/test.yml -service test -hostID 12345ABCD 2023/11/23 16:13:23 succeeded 2023/11/23 16:14:23 succeeded 2023/11/23 16:15:23 succeeded 2023/11/23 16:16:23 succeeded 2023/11/23 16:17:23 succeeded
ぜひ使ってみて感想を教えてください。SNSでも良いですし12月にはMackerel Meetup #15 Tokyoもございます!荒削りなのでcontributeも大歓迎です。