OSSのジョブ管理ツール〜Rundeck〜
ジョブ管理ツールとは、特定の処理を定期的に実行、自動化するためのソフトウェアの総称で「ジョブスケジューラ」や「タスクスケジューラ」とも呼ばれています。ジョブ管理ツールは、OS上での特定のコマンドや実行ファイルの起動や終了などをスケジュールに基づいて自動で実行します。定期的なジョブを自動にすることで業務の効率化や運用の手間を低減させることができます。
Windowsでは、「タスクスケジューラ」が搭載されており、Linux系OSでは、古くからジョブ管理ツールとしてcronが使われています。cronは多くのディストリビューションにデフォルトでインストールされていることや、実績の多さから現在でもよく利用されています。cronは簡単なバッチスクリプトなどを定期実行する用途には、シンプルで便利です。ただ登録されたジョブの数の規模が大きくなると、cronでの管理が難しくなる傾向があります。ここでは、cronにかわるジョブスケジューラのソフトウェアRundeckを紹介します。
ジョブ管理ツールのOSS Rundeckとは
Rundeckとは、PagerDuty, Inc.によって開発されたジョブ管理のソフトウェアで、オープンソース版の「Rundeck Community」と有償のエンタープライズ版の「Rundeck Enterprise」が存在します。OSS版のライセンスは、Apache Software License 2.0で公開されています。ジョブ管理ソフトウェアとして、ジョブの作成、実行、管理、スケジューリング等をすることが可能です。Rundeckは、Javaで動作するため多くのOSで利用可能です。Linuxでは、Ubuntu、Debian、CentOS、Red Hat Enterprise Linuxのディストリビューション用のパッケージが配布されています。
ジョブ管理ツールのOSS Rundeckの特徴
Rundeckの主な特徴は次の通りです。
WEBインタフェースからジョブとスケジュールの設定が可能
Rundeckでは、プロジェクトという単位でジョブやノードを組み合わせてまとめてWEBインタフェースから管理することができます。Rundeckを利用するには、このプロジェクトが最低1つは必要になります。
sshを使って複数サーバに渡ってジョブを実行することが可能
Rundeckは、1つのサーバだけではなく、sshを利用することで複数のサーバ間でジョブを実行することが可能になります。
ジョブは複数の形態で実行が可能
Rundeckは、コマンド・スクリプトなど複数の形態で実行が可能です。またRundeckは、標準で有効化されているプラグインを利用することでAnsibleプレイブックを実行することができます。プレイブックは、作成済みのファイルを利用することや、WEB UI上で作成することもできます。
ジョブ同士の関係性を管理することができる
例えば、ジョブ1を実行された後にジョブ2が実行されるなど複数のジョブの管理をすることができます。ジョブ1が行われなかった場合やエラーが出た場合、ジョブ2を実行しないなどの処理も可能です。
ジョブの重複実行を抑制することができる
ジョブの処理が長時間かかった場合に、同じ処理が重複して実行されてしまう場合があります。このような場合、Rundeckは、重複したジョブを抑制します。
実行結果をわかりやすいUIで確認することができる
スケジューリングされたジョブは、実行時間になると自動的に実行されます。実行後は、ジョブの画面から実行履歴を確認することができます。
ジョブの手動実行も可能
Rundeckは、スケジューリングされた自動のジョブだけではなく、手動でのジョブの実行も可能です。ジョブの作成の仕方はRundeck調査報告書に掲載しています。
通知の種別も様々用意されている
Rundeckは、ジョブ実行時の様々なタイミングで、通知を送ることができます。デフォルトでは通知はメール・WEBフックの2通りがあります。プラグインを追加することで、SlackやRocket.Chatにも通知を送ることができるようになります。
このようにRundeck1台で、複数台のサーバーのバッチ処理を管理・実行できるため、複雑なバッチ処理などの管理コストを削減することができます。
ジョブ管理のOSS Rundeckのメリット
Rundeckは、バッチ処理を一括管理できるということ以外にも次のようなメリットがあります。
バッチ処理管理の負担軽減
複数のジョブを連動して実行することや、重複実行を許容しないようにする処理は、通常バッチプログラムの中で制御、実装されていました。またこのような処理ほど、バッチプログラムで問題を生みやすく、プログラマや管理者の負担になっていました。Rundeckは、システム的にこれらの問題を解決することが可能なため、バッチプログラムを作成する時に、本来の処理に専念することができます。またプログラムがシンプルになるため、後の管理の効率が上がることが考えられます。
柔軟な通知とわかりやすい画面
Rundeckは、メールだけでなくチャットなどの現代的なツールに通知することもできるため、障害の発生にすぐに気が付くことができます。また通知を行うタイミングもジョブごとに変更することができます。例えば、重要なものであれば、実行開始・終了の両方を受け取り、失敗時にケアが必要なものは、実行の失敗時に通知を受け取るなどの運用が可能です。さらにRundeckから実行されたジョブは、WEB UIから成否判定をすることができます。実行したジョブがどこで失敗したのかをログですぐに判断できるため、その後のリカバリフローにすぐ移ることができます。
Ansibleとの親和性の高さ
Ansibleとは、RedHatが開発したオープンソースの構成管理ツールです。Ansibleをただ実行するためにはコマンドラインの操作が必要であったり、専用のGUIソフトウェアが必要でした。Rundeckを使うことで、AnsibleをWEBから実行し、結果を確認できるようになります。また、Ansibleとその他の日時処理などを、まとめて管理することができるため、Ansibleだけでは対応が難しい範囲もカバーすることができます。
OSS版とエンタープライズ版の違い
Rundeckは、OSS版とエンタープライズ版があり、エンタープライズ版では次のような機能が提供されています。
- ユーザ管理用のWebインタフェース
- ACL管理用インタフェース
- ジョブのフローを視覚的に表示する機能
- クラスタリング機能
- シングルサインオン
特にジョブのフローを視覚する機能は、多くのジョブを扱うほど重要になる機能になるためジョブの管理件数によってはエンタープライズ版を利用することが必要になります。
デージーネットの取り組み
Rundeckは、ジョブスケジューラとして非常に強力な機能を備えています。しかし、エンタープライズ版と比較すると、機能的に弱い部分がありますが、従来のcronなどとは比較にならないほど多機能です。Rundeckは現状、日本語が追いついていない状況です。デージーネットでは、日本語の言語ファイルの更新なども対応を行い、実際の業務での利用を実現していきたいと考えています。Rundeckのインストール方法やより詳しい記事は、Rundeck調査報告書に掲載されており、無料でダウンロードが可能です。
「関連情報の一覧」
Rundeck調査報告書
Rundeckはエンタープライズ版とOSS版の2種類が存在するジョブスケジューラのオープンソースソフトウェアです。本書は、ジョブスケジューラ「Rundeck」の調査報告書です。インストール方法やプロジェクトの作成方法など掲載しています。なお本書はOSS版のRundeckを取り扱っています。