Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

mackerunn: runnで実行したシナリオ監視の結果をMackerelに投稿するツール

arthur-1 Mackerel Advent Calendar 2023ラソン2日目の記事です。

シナリオ監視したい!

Mackerelユーザーの皆様から、外形監視機能でシナリオ監視を行いたいと要望をいただくことがあります。ここで言うシナリオ監視とは、ユーザーが実際にサービスを利用するときと同様に、いくつかのURLへのアクセスや要素のクリックなどの一連の操作が成功するかどうかを定期的にチェックすることを指します。

例えば、

  • ログインページを表示する
  • フォームにログイン情報を入力する
  • ボタンを押すとログインされ、ホーム画面が表示される

といったシーケンスを外部から実行する、といった具合です。よりユーザと同じ目線でサービスが利用可能であるかどうかを知ることができます。

今回は、この機能をMackerelに導入するとどう嬉しいのかを体感するために、プロトタイプを作ってみました。

mackerunn = Mackerel + runn

その名も「mackerunn」です。

github.com

runnというシナリオテストツールでテストを実行し、その結果をサービスメトリックやチェック監視としてMackerelに送信するツールです。

runnのプロファイルから取得したelapsed timeやテスト結果をサービスメトリックに

シナリオ監視に失敗した場合にはチェック監視のアラートが発報される

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も大歓迎です。