Rundeck 代替
JVM も SQL データベースも GUI でのジョブ作成もなしで、Runbook を自動化する。
Dagu は、スケジュール実行、オンデマンドの Runbook、Web UI を 1 つの小さなバイナリで使いたい運用チーム向けの Rundeck 代替です。ジョブ定義はコンソールの中ではなく Git 上の YAML になり、状態は MySQL や Postgres ではなくファイルに保存され、既存サーバーへは SSH またはラベル付きワーカーで届きます。移行の進め方と、Rundeck のほうが強い領域もこのページに書いています。
# restart-app.yaml
params:
- name: host
default: app01.internal
ssh:
user: ops
host: ${params.host}
key: ~/.ssh/ops_key
steps:
- id: drain
run: /opt/app/bin/drain --wait
- id: restart
run: sudo systemctl restart app
depends: [drain]
- id: health_check
run: curl -fsS http://localhost:8080/healthz
retry_policy:
limit: 5
interval_sec: 10
depends: [restart]
handler_on:
failure:
run: ./scripts/notify-oncall.sh
実行順序
状態をファイルに持つ単一バイナリ。JVM も SQL データベースも不要
ジョブはバージョン管理された YAML。ほかの変更と同じくレビューできる
SSH ステップとラベル付きワーカーで既存サーバーへ届く
SSO、RBAC、監査ログを公開価格のサーバー単位ライセンスで
一目で比較
運用自動化における Rundeck と Dagu
状態をファイルに持つ単一バイナリ。キューとワーカーは任意。
Java サービスに加え、本番では MySQL または Postgres。
Git でレビューする宣言的 YAML。
Web コンソールが主で、YAML エクスポートと SCM 同期は補助的な経路。
SSH ステップ、または mTLS 保護の gRPC で外向き接続するラベル付きワーカー。
リソースモデルのインベントリから SSH / WinRM でノードへディスパッチ。
システム全体に効くロール。ライセンス版で SSO と監査ログ。
プロジェクト単位・ジョブ単位のきめ細かい ACL ポリシー。
サーバー数無制限で無料。有償版は Dagu サーバー単位でワーカーは無制限。
オープンソースのコアに加え、商用の Process Automation は見積もりベース。
スケジューラーは単一インスタンス。可用性の設計は自社で組む。
商用版にクラスタ構成がある。
詳細
それぞれの強みと向き不向き
Runbook の考え方は残し、スタックだけ落とす
Rundeck は SQL データベースを背にした Java サービスとして動き、ジョブはプロジェクトごとに Web コンソールで定義します。Dagu は同じ運用の概念を、状態をファイルに持つ 1 プロセスの中に収めます。
- ジョブは DAG ファイル、ジョブステップはステップ、エラーハンドラーは handler_on.failure に対応します
- ジョブオプションは params に対応します。型とデフォルト値を持ち、実行時に UI、CLI、API から値を渡せます
- サイズ設計やバックアップが要る MySQL / Postgres も、チューニングする JVM ヒープもありません。小さな VM で動きます
コンソール操作ではなく、コードとしてのジョブ
Rundeck も定義のエクスポートや SCM プラグインでの同期はできますが、主な作成手段はコンソールです。Dagu は逆で、リポジトリにある YAML ファイルそのものが定義です。
- すべてのジョブが Git 上の YAML ファイルになり、変更はコンソール編集ではなくレビュー可能な diff で届きます
- dagu validate で、生成した定義も手書きの定義も CI でスケジューラーに届く前に検査できます
- Web UI は運用のために残ります。パラメーター付きで実行し、ログを見て、リトライし、スケジュールを停止できます
エージェントを入れずに既存サーバーへ届かせる
Rundeck はリソースモデルのインベントリからノードへコマンドをディスパッチします。Dagu は同じ領域を 2 つの仕組みでカバーします。エージェントレスなホストには SSH、常駐の実行基盤が向く場所にはワーカーです。
- SSH ステップで既存の Linux / UNIX ホストを常駐エージェントなしに実行します
- ローカル実行が必要なマシンでは dagu worker を起動し、worker_selector のラベルでステップを割り当てます
- ワーカーは mTLS で保護された gRPC で外向きに接続するため、セグメント化されたネットワークでも受信ポートは不要です
ジョブを実行する人と定義を変更する人を分ける
Rundeck の典型的な使い方は、安全な操作だけを広いグループに委任することです。Dagu ではその分離を、ライセンス版セルフホストのロール、SSO、監査ログでカバーします。
- operator ロールは実行と停止はできますが定義は変更できません。viewer は参照のみ、developer と manager はワークフローを変更できます
- OIDC で既存の ID 基盤にログインを寄せられるため、利用者情報を二重管理せずに済みます
- 監査ログに管理操作とセキュリティ上重要な操作が記録されます
営業への問い合わせではなく、公開された価格
Rundeck の商用版は PagerDuty Process Automation になり、価格は見積もりベースです。Dagu のコミュニティ版はサーバー数もワーカー数も無制限で無料、ライセンス版はサーバー単位の公開価格です。
- コミュニティ版でオーケストレーション本体、Web UI、cron スケジュール、Docker と SSH と HTTP のステップまで使えます
- ライセンス版のセルフホストはサーバーライセンス 3 つで年額 500 ドルから。SSO、RBAC、監査ログ、インシデント連携、メールサポートが付きます
- どのプランでもワーカーは無制限です。実行ホストを増やしてもライセンス数は変わりません
Rundeck のほうが強い領域
良いところだけ並べた比較は検討の役に立ちません。Rundeck を使っている組織が追加の作業を見込むべき、あるいは移行しないほうがよい領域です。
- ノードインベントリは Rundeck のほうが豊富です。リソースモデルソースとノードフィルターで 1 つのコマンドを数百台に展開できます。Dagu のステップの宛先は SSH ホストかラベル付きワーカーで、フリートのインベントリという概念はありません
- Rundeck はプロジェクト単位・ジョブ単位の ACL で、特定の 1 ジョブだけをヘルプデスクのグループに渡せます。Dagu のロールはシステム全体に効き、ジョブ単位ではありません
- 商用の Process Automation には高可用性のクラスタ構成があります。WinRM ノードエグゼキューターや通知プラグインなど、プラグインのエコシステムも大きいです
FAQ
Dagu を導入する前によくある質問
Dagu は Rundeck をそのまま置き換えられますか?
いいえ。概念の対応は素直です。ジョブは DAG ファイル、ジョブステップはステップ、オプションは params、エラーハンドラーは handler_on.failure になります。ただしインポーターはなく、Rundeck のノードフィルターに直接相当するものもありません。移行は各ジョブを YAML ファイルとして書き直す作業で、コマンドベースのジョブなら機械的に進みます。
UI からパラメーター付きでジョブを実行できますか?
はい。params で型とデフォルト値を持つ入力を宣言し、Web UI、CLI、API から実行時に値を渡せます。Dagu にないのは、特定の 1 ジョブだけをグループに公開する Rundeck のジョブ単位 ACL です。ロールはシステム全体に効きます。
多数のサーバーでコマンドを実行するには?
2 つの方法があります。SSH ステップはエージェントレスなホストで実行し、分散モードではマシン上のワーカーが worker_selector のラベルに一致するステップを取得します。リソースモデルのインベントリはないため、大きなフリートへの一斉展開は並列ステップかラッパースクリプトで表現します。
Rundeck のようにデータベースは必要ですか?
いいえ。実行履歴、ログ、キューの状態はディスク上のファイルです。これが閉域ネットワークでの動作を簡単にしている点でもあります。単一バイナリで、JVM も、到達すべき外部サービスもありません。
Rundeck のスケジュールや webhook は何で置き換えますか?
タイムゾーン対応の cron スケジュールを内蔵し、API または webhook で外部から実行を起動してペイロードをワークフローで参照できます。同時実行はデフォルトでワークフロー単位に制限され、共有の上限は名前付きキューで設定します。
次の一歩
まず 1 つのワークフローから。
Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。