观察器操作编辑

当满足观察器的条件时,将执行其操作,除非它被限制。一个观察器可以执行多个操作。这些操作一次执行一个,并且每个操作都独立执行。执行操作时遇到的任何故障都会记录在操作结果和观察器历史记录中。

如果未为观察器定义任何操作,则不会执行任何操作。但是,watch_record 仍然会写入观察器历史记录。

操作可以访问执行上下文中的有效负载。它们可以以任何需要的方式使用它来支持其执行。例如,有效负载可以作为模板化电子邮件正文的模型。

观察器支持以下操作

确认和限制编辑

在观察器执行期间,一旦满足条件,就会针对每个配置的操作决定是否应限制该操作。操作限制的主要目的是防止对同一观察器的同一操作执行次数过多。

例如,假设您有一个观察器,用于检测应用程序日志条目中的错误。观察器每五分钟触发一次,并在最后一小时内搜索错误。在这种情况下,如果存在错误,则在一段时间内会检查观察器并根据相同的错误多次执行其操作。结果,系统管理员会收到有关同一问题的多个通知,这可能会很烦人。

为了解决这个问题,观察器支持基于时间的限制。您可以将限制期限定义为操作配置的一部分,以限制操作的执行频率。设置限制期限后,如果观察器已在限制期限时间范围内(now - 限制期限)执行,则观察器会阻止重复执行该操作。

以下代码段显示了上述场景的观察器 - 将限制期限与 email_administrator 操作相关联

PUT _watcher/watch/error_logs_alert
{
  "metadata" : {
    "color" : "red"
  },
  "trigger" : {
    "schedule" : {
      "interval" : "5m"
    }
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : "log-events",
        "body" : {
          "size" : 0,
          "query" : { "match" : { "status" : "error" } }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
  },
  "actions" : {
    "email_administrator" : {
      "throttle_period": "15m", 
      "email" : { 
        "to" : "[email protected]",
        "subject" : "Encountered {{ctx.payload.hits.total}} errors",
        "body" : "Too many error in the system, see attached data",
        "attachments" : {
          "attached_data" : {
            "data" : {
              "format" : "json"
            }
          }
        },
        "priority" : "high"
      }
    }
  }
}

后续 email_administrator 操作执行之间至少间隔 15 分钟。

有关更多信息,请参阅电子邮件操作

您还可以在观察器级别定义限制期限。观察器级别的限制期限用作观察器中定义的所有操作的默认限制期限

PUT _watcher/watch/log_event_watch
{
  "trigger" : {
    "schedule" : { "interval" : "5m" }
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : "log-events",
        "body" : {
          "size" : 0,
          "query" : { "match" : { "status" : "error" } }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
  },
  "throttle_period" : "15m", 
  "actions" : {
    "email_administrator" : {
      "email" : {
        "to" : "[email protected]",
        "subject" : "Encountered {{ctx.payload.hits.total}} errors",
        "body" : "Too many error in the system, see attached data",
        "attachments" : {
          "attached_data" : {
            "data" : {
              "format" : "json"
            }
          }
        },
        "priority" : "high"
      }
    },
    "notify_pager" : {
      "webhook" : {
        "method" : "POST",
        "host" : "pager.service.domain",
        "port" : 1234,
        "path" : "/{{watch_id}}",
        "body" : "Encountered {{ctx.payload.hits.total}} errors"
      }
    }
  }
}

后续操作执行之间至少间隔 15 分钟(适用于 email_administratornotify_pager 操作)

如果您未在操作或观察器级别定义限制期限,则应用全局默认限制期限。最初,此值设置为 5 秒。要更改全局默认值,请在 elasticsearch.yml 中配置 xpack.watcher.execution.default_throttle_period 设置

xpack.watcher.execution.default_throttle_period: 15m

观察器还支持基于确认的限制。您可以使用确认观察器 API确认观察器,以防止在观察器条件保持为 true 时再次执行观察器操作。这实质上是告诉观察器“我收到了通知,我正在处理它,请不要再通知我有关此错误”。已确认的观察器操作在观察器的条件评估为 false 之前一直处于 acked 状态。当发生这种情况时,操作的状态将更改为 awaits_successful_execution

要确认操作,请使用确认观察器 API

POST _watcher/watch/<id>/_ack/<action_ids>

其中,<id> 是观察器的 ID,<action_ids> 是您要确认的操作 ID 的逗号分隔列表。要确认所有操作,请省略 actions 参数。

下图说明了在观察器执行期间为其每个操作做出的限制决策

action throttling

将 SSL/TLS 与 OpenJDK 一起使用编辑

由于每个发行版都可以自由选择如何打包 OpenJDK,因此即使版本完全相同,OpenJDK 发行版也可能在不同的 Linux 发行版下包含不同的部分。

这可能会导致使用 TLS 的任何操作或输入出现问题,例如 jirapagerdutyslackwebhook,因为缺少 CA 证书。如果您在编写连接到 TLS 端点的观察器时遇到 TLS 错误,则应尝试升级到适用于您平台的最新可用 OpenJDK 发行版,如果这没有帮助,请尝试升级到 Oracle JDK。