功能特性
Dagu 提供了一套全面的功能特性,用于构建和管理工作流。本节详细介绍你需要了解的每个功能。
功能分类
🖥️ 接口
如何与 Dagu 交互:
🔧 执行器
运行命令的不同方式:
- Shell - 运行任何命令或脚本(默认)
- Docker - 在容器中执行以实现隔离
- SSH - 在远程服务器上运行命令
- HTTP - 发起 REST API 调用和 webhook 请求
- Mail - 发送邮件通知和报告
- JQ - 处理和转换 JSON 数据
⏰ 调度
控制工作流的运行时间:
- 支持时区的 Cron 表达式
- 每个工作流的多个调度
- 启动/停止/重启模式
- 跳过冗余执行
🚀 执行控制
高级执行模式:
- 带并发限制的并行执行
- 条件执行(前置条件)
- 失败时继续模式
- 重试和重复策略
- 输出大小管理
- 信号处理
📊 数据流
管理工作流中的数据:
- 参数和运行时值
- 步骤间的输出变量
- 环境变量管理
- JSON 路径引用
- 模板渲染
- 特殊系统变量
📋 队列系统
大规模工作流编排:
- 内置队列管理
- 每个 DAG 的队列分配
- 基于优先级的执行
- 手动队列操作
- 并发控制
📧 通知
及时了解工作流状态:
- 成功/失败时的邮件提醒
- 自定义通知处理器
- 日志附件
- 灵活的 SMTP 配置
🔍 OpenTelemetry 追踪
用于可观测性的分布式追踪:
- 端到端工作流可见性
- 性能瓶颈识别
- 嵌套 DAG 关联
- 与 Jaeger、Tempo 等集成
分布式执行
在多个机器上扩展工作流:
- 协调器 - 工作器架构
- 基于标签的任务路由
- 实时工作器监控
- 需要共享存储用于 DAG 文件和状态
- 水平扩展
工作器标签
分布式执行的任务路由:
- 基于能力的工作器标记
- 灵活的标签匹配
- 资源优化
- 地理分布
- 合规要求
功能亮点
零依赖
与其他工作流引擎不同,Dagu 只需要:
- 无数据库
- 无消息代理
- 无运行时依赖
- 仅需单个二进制文件
语言无关
运行任何在你的系统上工作的内容:
yaml
steps:
- name: python
command: python script.py
- name: node
command: npm run task
- name: go
command: go run main.go
- name: bash
command: ./script.sh
分层工作流
从简单部分构建复杂系统:
yaml
steps:
- name: data-pipeline
run: etl
params: "DATE=today"
- name: ml-training
run: train
parallel: "image text"
params: "MODEL=latest TYPE=${ITEM}"
- name: deployment
run: deploy
parallel: "staging production"
params: "ENV=${ITEM}"
---
name: etl
params:
- DATE: today
steps:
- name: etl
command: python etl.py
---
name: train
params:
- MODEL: latest
- TYPE: ""
steps:
- name: train
command: python train.py --model ${MODEL} --type ${TYPE}
---
name: deploy
params:
- ENV: ""
steps:
- name: deploy
command: kubectl apply -f deployment.yaml --env ${ENV}
另请参阅
探索特定功能: