--- title: "删除规则库" date: 2026-03-28 lastmod: 2026-03-28 description: "删除指定的规则库" tags: ["规则库", "删除", "管理"] summary: "删除指定的规则库(规则仓库),包括从索引中删除元数据以及从所有节点删除物理文件。 API 格式 # DELETE /_match_rules/{repo_id} API 作用 # 该 API 用于删除规则库,执行以下操作: 检查规则库是否被管道(pipeline)依赖 从 .match_rules 系统索引中删除规则库文档 从集群所有节点删除规则库的物理文件 更新节点元数据 API 参数 # 路径参数 # 参数 类型 是否必填 默认值 描述 {repo_id} String 是 - 要删除的规则库的唯一标识符 请求体参数 # 请求体可选,可包含以下字段: { "repo_id": "repository-identifier" } 参数 类型 是否必填 默认值 描述 repo_id String 否 - 规则库 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 格式 ``` DELETE /_match_rules/{repo_id} ``` ## API 作用 该 API 用于删除规则库,执行以下操作: 1. 检查规则库是否被管道(pipeline)依赖 2. 从 `.match_rules` 系统索引中删除规则库文档 3. 从集群所有节点删除规则库的物理文件 4. 更新节点元数据 ## API 参数 ### 路径参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `{repo_id}` | String | **是** | - | 要删除的规则库的唯一标识符 | ### 请求体参数 请求体可选,可包含以下字段: ```json { "repo_id": "repository-identifier" } ``` | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `repo_id` | String | 否 | - | 规则库 ID(与路径参数作用相同) | ## 请求示例 ### 删除指定规则库 ``` DELETE /_match_rules/security_v1 ``` ### 使用请求体删除 ``` DELETE /_match_rules/security_v1 { "repo_id": "security_v1" } ``` ## 响应示例 ### 成功响应 ```json { "success": true, "message": "Successfully deleted rule repository 'security_v1' (deleted 1 documents)", "node_name": "node-1" } ``` ### 多节点集群响应 ```json { "success": true, "message": "Successfully deleted rule repository 'my_rules' from 3 nodes (deleted 1 documents)", "node_name": "node-1" } ``` ### 依赖检查失败响应 ```json { "success": false, "message": "Cannot delete rule repository 'security_v1' because it is used by the following pipelines: pipeline1, pipeline2", "node_name": "node-1" } ``` ### 错误响应 ```json { "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` 进行安全文件删除 - 递归删除:所有文件、子目录、目录本身 - 更新本地元数据跟踪已删除的规则库 ## 响应字段说明 | 字段 | 类型 | 描述 | |------|------|------| | `success` | Boolean | 操作是否成功 | | `message` | String | 操作结果消息,包含删除的文档数和节点信息 | | `node_name` | String | 处理请求的节点名称 | ## 安全特性 1. **依赖验证**:防止删除正在使用的规则库 2. **路径验证**:防止目录遍历攻击 3. **安全文件删除**:使用 Java 安全管理器 4. **幂等性**:安全多次删除同一规则库 5. **原子操作**:任何步骤失败都会终止操作 ## 使用场景 - 删除过时或不再使用的规则库 - 测试后清理规则库 - 维护存储效率 - 规则库生命周期管理 ## 注意事项 1. **依赖检查**:确保没有管道正在使用要删除的规则库 2. **集群同步**:在集群模式下,删除会传播到所有节点 3. **不可恢复**:删除后规则库无法恢复,请谨慎操作 4. **超时处理**:大型集群的文件删除可能需要较长时间 5. **权限要求**:需要 `cluster:admin/rules/delete` 权限