跳转至

依赖图、资源池、变量、工作节点、审计与 API 令牌

cronova Web 控制台的运维页面:跨 DAG 依赖图、全局并发资源池、共享变量与连接、拨入式工作节点集群、操作者审计记录,以及供机器访问的 API 令牌。这些页面全部位于 DAG 列表下方的侧边栏中,地址为 http://localhost:8090

跨 DAG 依赖图(#/graph

Graph 页面把安装中所有 trigger_after 关系绘制成一张图——哪些 DAG 在完成后会触发哪些其他 DAG。

cross-DAG graph

如何解读:

元素 含义
箭头 指向 trigger-after 方向:上游 DAG → 它在完成时触发的 DAG。
节点颜色 按该 DAG 最新一次运行的状态着色(绿色成功、红色失败、蓝色运行中……)。中性色表示尚无运行。
实线节点 已知的 DAG——点击即可打开该 DAG 的页面使用 DAG)。
虚线节点 未知的 DAG:有 DAG 在 trigger_after 中引用了它,但不存在该 id 的 DAG。虚线节点不可点击。

浏览大图时可以拖拽平移,并用 Ctrl / Cmd + 鼠标滚轮缩放——单独滚动滚轮仍然滚动页面。角落的悬浮按钮分别用于放大(+)、缩小()以及将整个图适配到视口()。

如果没有任何 DAG 声明 trigger_after,页面会显示空状态而不是图。

资源池(#/pools

资源池(Pools)是具名的全局并发槽位集合,在所有 DAG 和运行之间共享。任务执行期间占用其资源池的一个槽位;当资源池被占满时,后续任务会排队等待槽位释放。

resource pools

表格列出了每个资源池:

说明
Name 资源池 id,由任务 YAML 引用。
Slots 最大并发任务数——可编辑的数字输入框(最小值 1)。
Save 应用该行新的槽位数量。
  • 创建资源池:在表格下方的工具栏中输入名称和槽位数量(默认 4),点击 Create
  • 调整资源池大小:修改其 Slots 字段中的数字,点击 Save

任务通过 pool: 字段选择加入;每个任务默认属于 default 资源池,priority 决定谁在槽位竞争中胜出。YAML 侧的说明见 DAG & Task Reference,完整示例见资源池教程。你也可以通过 CLI 的 cronova pools set 管理资源池(CLI Reference)。

变量与连接(#/resources

Variables & Connections 页面存放跨任务共享的配置,分为变量、连接、告警组三个标签页。在任务命令中以 {{ var.KEY }}{{ conn.ID.field }} 引用其值,或在触发时传入 {{ params.KEY }}——模板变量教程覆盖了前两类用法。

variables and connections

变量

普通的键值对,支持内联编辑:

说明
Key 变量名。仅允许字母、数字、_.-
Value 可编辑的文本框——修改后点击同一行的 Save
Actions Save 保存该行,或点击 删除(需确认)。

在表格下方的键 + 值输入框中填写并点击 Add variable 即可添加新变量。在任何渲染模板的地方都可以使用,例如 Authorization: Bearer {{ var.TOKEN }}

连接

具名的端点凭据——数据库、API、主机。列表显示每个连接的 id、类型、host:port、登录名,以及是否设置了密码(••••••);Edit 打开编辑对话框, 删除。

New connection 会打开一个包含以下字段的对话框:

字段 说明
Connection ID 例如 mysql_prod。创建后不可修改(字符集规则与变量键相同)。
Type 自由文本,例如 mysql
Host / Port / Login 端点地址与用户。
Password 只写。编辑时初始为空;留空则保留已存储的密钥。
Extra (JSON) 以 JSON 对象形式提供的任意额外字段,例如 {"schema":"prod"}

密码永远不会被回显

控制台(以及 API)永远不会返回已存储的连接密码——列表只显示是否设置了密码。要轮换密钥,输入新值即可;要保留原值,将该字段留空。

在模板中,通过 {{ conn.ID.host }}.port.login(别名 .user)、.password.type 读取连接字段,或用 {{ conn.ID.extra.KEY }} 读取 Extra JSON 中的键。sql 任务通过其 conn: 字段直接使用连接——见 DAG & Task Reference

告警组

把多个通知渠道打包成一个具名分组(专家模式)。工作流在「设置 → 通知」里选择告警组后,运行告警会发往该组的每一个渠道,而不是单个 Webhook URL——值班渠道调整时只需在这里改一次,无需逐个修改工作流。

列表显示每个组的名称、渠道数及各渠道目的地摘要、更新时间;Edit 打开编辑对话框, 删除(需确认——引用它的工作流会退回使用各自的通知 URL,告警不会丢失)。

新建告警组对话框包含以下字段:

字段 说明
组名 例如 oncall。创建后不可修改(字符集规则与变量键相同,最长 128 字符)。
渠道 1–16 行,每行一个 URL + 消息格式。URL 可以是 http(s):// 入群机器人 Webhook 或 mailto:地址[,地址];格式为 rawslackfeishudingtalkemail+ 添加渠道追加一行, 移除。

mailto: 渠道需要 SMTP

邮件渠道通过服务端的 SMTP 转发发送——需先配置服务配置文件的 smtp: 段,否则邮件投递会失败(仅记录日志,不会阻塞运行)。

在 DAG YAML 中以 notify.group 引用告警组——解析规则(组优先于 notify.url;悬空引用会回退而不是丢弃告警)见 DAG & Task Reference

工作节点(#/workers

Workers 页面(专家模式)管理拨入本调度器的远程工作节点集群。任务通过 worker_group 字段(DAG 级或任务级,见 DAG & Task Reference)选择远程执行;任务的分组会与每个工作节点的 group 标签匹配(默认 default)。

表格列出所有已注册的工作节点,页面打开期间每约 5 秒自动刷新:

说明
Name 加入时使用的名称(group 以外的标签以灰色 k=v 文本显示在下方)。
worker_id 服务端分配的 id(点击复制)。
Group 该节点的路由分组——即 group 标签,未设置时为 default
State online(会话在线且持续心跳)、offline(正常断开)或 lost(心跳中断且未告别;其上运行中的任务按重试策略故障转移)。排空期间会追加 draining 标签。
Active tasks 该节点当前正在执行的任务数。
Version 工作节点二进制的版本。
Last heartbeat 最近一次心跳的相对时间(悬停查看绝对时间)。
Joined 节点首次加入的时间。

行内操作(仅管理员):

  • 排空 / 恢复分配 —— 排空中的节点会跑完手头任务,但不再接收新分配;适合维护前使用。恢复分配后重新参与调度。两者都会先弹出确认。
  • ✕ 移除 —— 删除注册并关闭在线会话,确认对话框会先给出警告。移除立即生效且不可撤销:该节点的证书随即失效,被移除的节点无法重新连接——必须用新令牌重新加入。

接入一个工作节点

两步接入:

  1. 点击生成加入令牌(管理员),选择有效期(1 小时 / 24 小时 / 7 天)并生成。一次性令牌只显示这一次——请立即复制;服务端只保存其哈希。
  2. 在工作节点主机上运行令牌旁展示的加入命令:
cronova worker -server <console-url> -join-token <token>

工作节点用令牌 + CSR 换取签名证书(私钥永不离开该主机)并拨入 hub;几秒内它就会以 online 状态出现在表格中。令牌一次性使用,到期自动失效。

需要配置 worker_listen

工作节点 hub 默认关闭。若生成令牌时报 worker hub is not enabled,请在服务端配置中设置 worker_listen(或环境变量 CRONOVA_WORKER_LISTEN)并重启服务。

审计(#/audit

Audit 页面是操作日志:谁在何时对哪个 DAG 或运行做了什么。它列出最近的 200 条记录。

audit trail

说明
Time 操作发生的时间。
Actor 已登录的用户名;未启用认证时为 anonymous
Action 执行的操作(见下文)。
Target 受影响的 DAG id、运行 id 或令牌,外加详情后缀(例如标记操作的 task=success)。

记录的操作包括:triggercancelretry runretry taskmark taskmark runcreate DAGdelete DAGpauseunpausecreate tokenrevoke tokenset alert groupdelete alert group,以及项目上传/删除。

自动保存的编辑不会被记录

任务编辑器会在每次防抖后的按键时自动保存,因此对已有 DAG 的日常编辑被有意排除在审计之外——只有真正新建 DAG 才会被记录。这样审计记录保持有意义,而不会被保存事件淹没。

API(#/api

API & Integration 页面用于将其他系统接入 cronova:交互式 API 文档,加上供机器访问的 API 令牌。

API tokens

API 参考

  • Open API reference → 打开位于 /docs 的交互式文档——一个自包含的 Redoc 页面,内置 curl / Go / Python / Java 示例和页内语言切换器。
  • OpenAPI spec/openapi.json 提供原始文档,可直接用于代码生成或 HTTP 客户端。

想用 AI 智能体驱动 cronova?cronova 内置了 MCP 服务器——见 AI Agents (MCP)

API 令牌

令牌是机器凭据。调用任何端点时携带请求头 Authorization: Bearer <token>

说明
Name 自由格式的标签,例如 ci-bot
Role Admin(读写)Viewer(仅 GET)
Prefix 令牌的前几个字符——列表永远不显示完整值。
Created / Last used 创建时间和最近一次通过认证的调用(在此之前显示 Never used)。

创建令牌,输入名称、选择角色,然后点击 Create token。要吊销令牌,点击其所在行的 并确认——吊销立即生效。启用认证后,只有管理员用户可以创建或吊销令牌。

令牌值只显示一次

明文令牌会在创建后立即出现在对话框中——请复制并妥善保存。之后再也无法取回;列表只显示前缀。如果丢失,请吊销该令牌并创建新的。

常见问题

为什么依赖图中有的节点是虚线? 有 DAG 在 trigger_after 中列出了它,但不存在该 id 的 DAG(已删除或拼写错误)。请修正上游 DAG 设置中的引用,或创建缺失的 DAG。

在哪里设置任务使用哪个资源池? 在任务的 YAML 中(pool: reports),通过任务编辑器设置,而不是在 Pools 页面——Pools 页面只定义资源池及其槽位数量。

变量适合存放密钥吗? 变量值在控制台中以明文显示。对于凭据,建议使用连接的密码字段,它是只写的,永远不会被回显。

Viewer 令牌能触发 DAG 运行吗? 不能。Viewer 令牌是只读的(仅允许 GET 请求);触发、重试和编辑都需要 Admin 令牌。

下一步