- 株式会社マツリカ
- 技術監督
- 進藤 寿雄
バッチ処理の管理を「Rundeck」で効率化!スモールチームに最適なジョブ管理ツールとは
今回のソリューション:【Rundeck】
Webサービスではユーザーに見えている画面以外にも、裏側で定期的に実行されるバッチ処理が必要となることが多い。
Linuxに付属するcronを使うのが一般的だが、より複雑なジョブを実行することや、管理を簡単にすることを目的として別のツールを使用することもできる。OSSで公開されている「Rundeck」もそのひとつだ。
「世界を祭り化する」というミッションを掲げる株式会社マツリカでは、自社サービス
「Senses」の運用にRundeckを導入している。
7名ほどのエンジニアで構成されるSensesの開発・運用チームに最適な「気軽さ」が導入の決め手だと語る、進藤 寿雄さんにお話を伺った。
現場の営業パーソンの活動を助けるSFA「Senses」を開発
私は新卒でSIerに入り、そこでサーバー管理を中心にシステム開発をしていました。その後、豆蔵という会社に9年間在籍し、node.jsでWebサービスを作ったり、Rを使った解析からUnityまで本当に幅広く仕事をさせてもらいました。そして2016年の3月に、第一号の正社員としてマツリカに入社しました。
「Senses(センシーズ)」は、一言で言うと新しいSFA(Sales Force Automation:営業支援システム)です。従来のSFAは管理者向けのものが多く、現場の営業パーソンはレポートのための入力を強いられています。
Sensesは現場の営業パーソンの日々のアクションを元に、新しい示唆を与えられるような製品を目指しています。
Sensesは、人工知能の働きによって営業プロセスを支援します。各案件の具体的なアクションを記録し、それをSenses内の企業情報、ニュース、財務情報といったデータと連携させることで、過去の類似案件から効果的な営業パーソンのアクションをリコメンドします。
ジョブの管理にRundeckを採用した理由は「気軽さ」
Sensesの裏側では、例えば企業情報やプレスリリース、ニュースといった情報をシステムに取り込むなど、様々なバッチ処理が動いています。最短で15分毎に動くものを始め日次、月次、必要に応じて手動実行するものまで多岐に渡りますが、その管理にはRundeckというOSSを使用しています。
Rundeckは高度なcronのようなもので、Webの管理インターフェースからジョブを設定・実行できます。他にもいくつかのツールと比較をしましたが、今の我々の要件には構築や運用が煩雑なものが多かったですね。
プロジェクトによってはJenkinsを使っているケースもあるようですが、本来の用途ではなく重たいこともあり、見送りました。Rundeckは軽量で気軽に導入できたので、Sensesのリリース当初から使っています。
Webの管理画面から、基本的なジョブの設定が可能になる
RundeckにはWebベースの管理画面があり、そこからRubyのrakeタスクやシェルスクリプトなどのコードと、どのタイミングや条件でそれを実行するかという設定をします。
▼Rundeckの管理画面
細かいジョブをいくつも登録したうえで、それを組み合わせた大きなひとつのものをワークフローとして登録できるので、複雑なバッチ処理も管理できます。ジョブに渡す引数の設定や、実行スケジュールの一時停止もWebの管理画面から簡単に設定できます。
特に一時停止の機能は、システム側のAPIを更新するときに不整合が起きないよう、ジョブを一時的に止められて便利ですね。
ジョブ定義のバックアップやインポートもできたり、複数サーバーでのクラスタ構成でもうまく動くような仕組みになっているので、将来的に規模が大きくなっても安心感があります。
豊富なプラグインで機能追加も簡単に
Rundeckはプラグインを組み合わせて機能を拡張できる仕組みになっています。EC2ノードに対してジョブを実行するためのプラグインが用意されていたり、実行結果のバックアップを自動的に取ってくれたりするものもあります。
弊社ではSlack通知用のプラグインを活用して、ジョブの成功や失敗といったメッセージが自動的にSlackに流れるようにしており、問題が発生すればすぐに確認し対応できる体制をとっています。
▼Slackでジョブの成功や失敗を通知!
あえて難点を挙げるなら、過去ログを削除するインターフェースが残念です。条件に基づく機能が無く、ページングされた実行ログから1ページずつログを選択してデリートするという操作を繰り返さないといけないんです。
新規開発したジョブを安定稼働させるまではエラーが発生しがちなので、溜まったログがディスクスペースを圧迫してアラートが出てしまったという事もありました。
今ではログを削除するスクリプトを書き、それをRundeckから実行するような仕組みにすると共にディスク・スペースの空き状況等Rundeckが稼働するサーバーの状態監視も強化しています。
一度安定稼働してしまえばエラーログが出力されることも少なく、問題はほとんど起きないのですが、バージョンアップで対応されて欲しいですね。
小規模なチームは、まずcronからの置換えがオススメ
Rundeckはジョブの構成をビジュアライズするところが少し弱いかなと思うので、大量のジョブを管理する大規模なサービスだとより高機能なツールでないと難しい側面があるかもしれません。
弊社のような10人以下の規模で、cronで管理するのはちょっとキツイなと思っているチームにちょうど良いのかなと思います。
移行自体もすでにcronで動かしているスクリプトを登録するだけなので、環境構築と合わせても1日もかからないくらい手軽に導入できるのでオススメです。(了)