Skip to main content
通过配置数据库连接和一条 SELECT 查询,Flashduty 会按照您设定的周期主动连接数据库,利用游标分页增量拉取新行,将每行按照字段映射规则转换为 标准告警事件 并写入告警通道。整个过程不需要您的系统具备推送能力。
DB Pull 适合 告警数据已落入关系型数据库无法或不希望改造已有系统以支持 webhook 推送 的场景。如果您的数据库所在网络无法被 Flashduty 访问,请考虑使用支持推送的集成方式,或先将告警导出到可公网访问的 HTTP 接口后再用 HTTP Pull 集成。

操作步骤


在 Flashduty

当您不需要根据告警内容路由到不同的协作空间时,优先选择此方式,更简单。
  1. 进入 Flashduty 控制台,选择 协作空间,进入某个空间的详情页面。
  2. 选择 集成数据 tab,点击 添加一个集成,进入添加集成页面。
  3. 选择 DB Pull 集成。
  4. 按下文「配置项」说明填写表单,点击 保存
当您需要根据告警事件的 Payload 信息,将告警路由到不同协作空间时,优先选择此方式。
  1. 进入 Flashduty 控制台,选择 集成中心 ⇒ 告警事件,进入集成选择页面。
  2. 选择 DB Pull 集成,并填写 集成名称
  3. 配置 默认路由,选择对应的协作空间(集成创建后可前往 路由 配置更多路由规则)。
  4. 按下文「配置项」说明填写表单,点击 保存 完成。

配置项


数据库驱动

连接信息

查询配置

单次拉取最多摄入的行数受全局上限约束(max_pages × page_size),并不会超过系统内部的事件总数上限。建议将 page_size 设置为数据库能高效处理的批量大小(通常 200 ~ 500 行),max_pages 根据告警产出速率合理调整。

游标配置

Flashduty 使用 游标分页(Keyset Pagination)增量拉取新行,避免全表扫描。每次拉取结束后,系统将最后一行的游标位置持久化,下次拉取从该位置继续。 分页查询原理 系统将您的 SELECT 语句包装成子查询,并在外层自动添加如下 Keyset 条件与排序:
因此您的查询语句不应自带 ORDER BYLIMITOFFSET,由系统统一控制。 检查点自动重置 系统对查询来源的关键字段计算指纹:driverhostportdatabasequerytime_columnid_columninitial_time。当上述任意字段发生变更时,检查点自动失效,下次拉取从 initial_time 重新开始。修改字段映射或严重程度映射不会触发检查点重置,不会导致历史行重放。

字段映射

字段映射决定数据库行的哪些列(或常量值)映射到标准告警事件的哪些字段。

标准字段映射(fields)

每条映射规则由 目标字段(标准事件字段名)和 规则 组成,规则有三种类型: 当目标字段为 event_time 时,系统会将列值自动转换为 Unix 时间戳(秒);支持的输入格式包括 time.Time、Unix 毫秒整数、"2006-01-02T15:04:05""2006-01-02 15:04:05" 等常见格式。

标签映射(labels)

标签映射决定如何将数据库列转换为告警事件的 labels 字典,支持四种模式:

严重程度映射

外部系统的告警级别字段取值往往不一致,Flashduty 通过 严重程度映射 将外部值翻译为标准的 Critical / Warning / Info / Ok
  • 系统读取经过字段映射后得到的 event_status 字段值,按映射表查找对应的 Flashduty 严重程度。
  • 未命中兜底:若 event_status 没有匹配到映射表中的任何键,默认降级为 Warning
示例配置:

默认路由


新增「共享集成」时必须配置默认路由,否则拉取到的事件将被丢弃。集成创建后可在 路由 中追加更细粒度的规则。 「专属集成」(在某个协作空间的 集成数据 中创建)会自动绑定到所在空间,不需要单独配置默认路由。

注意事项


  • 数据库账号权限:建议为 DB Pull 单独创建只读账号,仅授予目标表的 SELECT 权限,禁止写入权限,降低安全风险。
  • 网络可达性:Flashduty 服务端必须能够通过公网或专线访问到数据库的 host:port。私有网段(10.x.x.x192.168.x.x172.16~31.x.x)和回环地址会被系统拒绝连接。
  • 游标列索引:为保证拉取性能,建议在 time_columnid_column 组合上建立复合索引,避免全表扫描。
  • 时间列精度:系统以微秒精度(2006-01-02 15:04:05.999999)记录游标时间,建议数据库时间列的精度不低于毫秒(DATETIME(3)TIMESTAMP(6)),以避免在同一秒内产生大量数据时发生漏行。
  • 查询幂等性:同一行在检查点重置后可能被重复拉取,请确保您的字段映射中包含能唯一标识一条告警的字段(作为 alert_key),以便 Flashduty 正确去重。