📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

删除指定的规则库(规则仓库),包括从索引中删除元数据以及从所有节点删除物理文件。

API 格式 #

DELETE /_match_rules/{repo_id}

API 作用 #

该 API 用于删除规则库,执行以下操作:

  1. 检查规则库是否被管道(pipeline)依赖
  2. .match_rules 系统索引中删除规则库文档
  3. 从集群所有节点删除规则库的物理文件
  4. 更新节点元数据

API 参数 #

路径参数 #

参数类型是否必填默认值描述
{repo_id}String-要删除的规则库的唯一标识符

请求体参数 #

请求体可选,可包含以下字段:

{
  "repo_id": "repository-identifier"
}
参数类型是否必填默认值描述
repo_idString-规则库 ID(与路径参数作用相同)

请求示例 #

删除指定规则库 #

DELETE /_match_rules/security_v1

使用请求体删除 #

DELETE /_match_rules/security_v1
{
  "repo_id": "security_v1"
}

响应示例 #

成功响应 #

{
  "success": true,
  "message": "Successfully deleted rule repository 'security_v1' (deleted 1 documents)",
  "node_name": "node-1"
}

多节点集群响应 #

{
  "success": true,
  "message": "Successfully deleted rule repository 'my_rules' from 3 nodes (deleted 1 documents)",
  "node_name": "node-1"
}

依赖检查失败响应 #

{
  "success": false,
  "message": "Cannot delete rule repository 'security_v1' because it is used by the following pipelines: pipeline1, pipeline2",
  "node_name": "node-1"
}

错误响应 #

{
  "success": false,
  "message": "Failed to delete rule repository 'security_v1': error details",
  "node_name": "node-1"
}

删除流程 #

1. 依赖检查 #

API 首先检查是否有管道使用该规则库:

  • 扫描所有管道配置中的 check_match_rules 处理器
  • 如果发现依赖,阻止删除并返回依赖管道列表
  • 仅在没有依赖时继续执行删除

2. 索引文档删除 #

.match_rules 索引中删除规则库文档:

  • 使用 RulesIndexService.deleteRulesByRepoId() 执行
  • 跟踪删除的文档数量
  • 此步骤失败则终止整个操作

3. 物理文件删除 #

根据集群模式执行不同的删除策略:

单节点模式 #

  • 直接从当前节点删除物理文件
  • 使用 Files.walk() 递归删除规则目录
  • 更新本地元数据

集群模式 #

  • 将删除命令广播到所有摄入节点
  • 使用内部 action cluster:admin/rules/delete/internal
  • 等待所有节点完成(超时 5 分钟)
  • 聚合所有节点的结果

4. 物理文件清理 #

  • 验证路径防止目录遍历攻击
  • 使用 AccessController 进行安全文件删除
  • 递归删除:所有文件、子目录、目录本身
  • 更新本地元数据跟踪已删除的规则库

响应字段说明 #

字段类型描述
successBoolean操作是否成功
messageString操作结果消息,包含删除的文档数和节点信息
node_nameString处理请求的节点名称

安全特性 #

  1. 依赖验证:防止删除正在使用的规则库
  2. 路径验证:防止目录遍历攻击
  3. 安全文件删除:使用 Java 安全管理器
  4. 幂等性:安全多次删除同一规则库
  5. 原子操作:任何步骤失败都会终止操作

使用场景 #

  • 删除过时或不再使用的规则库
  • 测试后清理规则库
  • 维护存储效率
  • 规则库生命周期管理

注意事项 #

  1. 依赖检查:确保没有管道正在使用要删除的规则库
  2. 集群同步:在集群模式下,删除会传播到所有节点
  3. 不可恢复:删除后规则库无法恢复,请谨慎操作
  4. 超时处理:大型集群的文件删除可能需要较长时间
  5. 权限要求:需要 cluster:admin/rules/delete 权限