Link Search Menu Expand Document Documentation Menu

基于规则的自动标记

基于规则的自动标记可自动将特定于功能的值分配给传入请求,并通过匹配请求属性来根据一组预定义规则评估这些请求。例如,工作负载管理功能使用索引模式作为属性并分配工作负载组 ID。

基于规则的自动标记具有以下优点:

  • 灵活的基于属性的匹配
  • 支持特定于功能的匹配逻辑
  • 一致的策略应用
  • 自动化请求分类
  • 降低管理开销
  • 集中式规则管理
  • 简单的策略更新

基于规则的自动标记为实现特定于功能的请求处理提供了一个灵活的框架。尽管本主题以工作负载管理为例,但基于属性的匹配系统可以适用于其他 OpenSearch 功能和用例。

关键概念

在查看规则配置和行为之前,了解基于规则的自动标记的以下关键组件非常重要:

  • 规则:定义匹配条件(属性)和要分配的值。
  • 属性:用于匹配规则的键值对(例如索引模式、用户角色或请求类型)。
  • 特定于功能的值:规则匹配时分配的值。
  • 模式匹配:属性值的匹配行为(精确或基于模式)。

规则结构和管理

正确的规则结构和管理对于有效的自动标记至关重要。本节描述了规则架构以及如何管理规则。

规则架构

以下规则架构包括匹配属性和特定于功能的值:

{
  "_id": "fwehf8302582mglfio349==",  
  "index_patterns": ["logs-prod-*"],  
  "other_attribute": ["value1", "value2"],
  "workload_group": "production_workload_id",
  "updated_at": 1683256789000
}

管理规则

使用以下 API 操作来管理工作负载管理规则。

创建或更新规则

PUT /_rules/workload_group
{
  "index_patterns": ["prod-logs-*"],
  "other_attribute": ["value1"],
  "workload_group": "production_workload_id"
}

列出规则

GET /_rules/workload_group

删除规则

DELETE /_rules/workload_group/{rule_id}

属性匹配

属性匹配系统确定哪些规则适用于给定请求。每种属性类型都可以支持不同的匹配行为,具体取决于以下属性类型:

  1. 精确匹配:属性值必须完全匹配。
  2. 模式匹配:支持通配符(例如索引模式)。
  3. 列表匹配:匹配列表中的任何项。
  4. 范围匹配:匹配定义范围内的值。

例如,在工作负载管理中,索引模式支持:

  • 精确匹配:logs-2025-04
  • 前缀模式:logs-2025-*

请注意,匹配行为由功能和属性类型决定。

规则优先级

当多个规则匹配一个请求时,OpenSearch 使用以下优先级规则:

  1. 更具体的属性匹配规则优先。
  2. 应用特定于功能的平局决胜逻辑。

例如,对于索引模式:

  • logs-prod-2025-* 优先于 logs-prod-*
  • logs-prod-* 优先于 logs-*

评估过程

OpenSearch 使用以下过程评估传入请求:

  1. OpenSearch 接收到一个请求。
  2. 系统根据已定义的规则评估请求属性。
  3. 分配最具体的匹配规则值。
  4. 如果没有规则匹配,则不分配任何值。

示例

这些示例演示了基于规则的自动标记在工作负载管理中的工作方式,其中索引模式是其主要属性。

多属性匹配

{
  "index_patterns": ["logs-prod-*"],
  "request_type": ["search", "count"],
  "workload_group": "production_search_workload_id"
}

{
  "index_patterns": ["logs-prod-*"],
  "workload_group": "production_workload_id"
}

属性特异性

{
  "index_patterns": ["logs-*"],
  "workload_group": "general_workload_id"
}

{
  "index_patterns": ["logs-prod-service-*"],
  "workload_group": "prod_service_workload_id"
}

最佳实践

遵循以下最佳实践来设计和操作基于规则的自动标记。

设计规则

在创建规则时,重点构建逻辑、具体的配置,以支持您的工作负载和访问模式。请考虑以下准则:

  • 确定用例最相关的属性。
  • 使用特定属性值进行精确控制。
  • 酌情组合多个属性。
  • 使用一致的命名约定。
  • 记录属性匹配行为。

管理属性

属性选择和配置显著影响规则的有效性。要成功管理属性,请执行以下操作:

  • 了解每个属性的匹配行为。
  • 从所需的最具体条件开始。
  • 除非有意,否则避免规则重叠。
  • 规划未来的属性值模式。

操作

持续操作和监控有助于保持规则质量。使用以下最佳实践确保您的功能规则可靠有效:

  • 在开发环境中测试新规则。
  • 监控系统日志中的规则匹配。
  • 记录规则配置。
  • 定期审查规则有效性。
  • 删除未使用的规则。

故障排除

创建规则时,可能会出现以下问题:

  • 未分配值:此问题通常发生在请求属性与任何现有规则都不匹配时。
    例如,假设 index_pattern 是一个有效的允许属性。如果发出搜索 logs_q1_2025 的请求,但该值不存在任何规则,则请求将不匹配任何规则,从而导致缺少分配。

  • 意外值:当定义了多个规则且条件重叠或冲突时,可能会发生这种情况。
    例如,考虑以下规则:

    1. { "username": ["dev*"], "index_pattern": ["logs*"] }
    2. { "index_pattern": ["logs*", "events*"] }

    如果用户名为 dev_john 的用户向 logs_q1_25 发送搜索请求,则它将根据 usernameindex_pattern 属性匹配第一个规则。即使 index_pattern 也符合条件,请求也不会匹配第二个规则。

您可以通过使用以下技术之一验证配置来解决这两个问题:

  • 使用示例请求测试规则:首先,使用 REST API 创建一个规则,然后发送一个与该规则属性匹配的请求。例如,对于具有 "index_pattern": ["logs*", "events*"] 的规则,您可以向 logsevents 索引发送请求。然后通过查询工作负载管理统计信息 API 来验证工作负载管理统计信息。

  • 使用列出规则 API 确认规则定义。