示例监视器

edit

以下示例展示了如何设置一个监视器来:

有关更多示例监视器,您可以将其用作构建自定义监视器的起点,请参阅 Elastic 示例库中的 示例监视器

监控 Elasticsearch 集群的状态

edit

您可以轻松配置一个基本监视器来监控您的 Elasticsearch 集群的健康状况:

安排监视并添加输入

edit

一个监视器计划控制监视器触发的频率。 监视器输入获取您要评估的数据。

定义计划的最简单方法是指定一个间隔。例如,以下计划每10秒运行一次:

PUT _watcher/watch/cluster_health_watch
{
  "trigger" : {
    "schedule" : { "interval" : "10s" } 
  }
}

调度通常配置为运行频率较低。此示例将间隔设置为10秒,以便您可以轻松看到监视器被触发。由于此监视器运行如此频繁,请不要忘记在完成实验后删除监视器

要获取集群的状态,您可以调用集群健康API

GET _cluster/health?pretty

要将健康状态加载到您的手表中,您只需添加一个调用集群健康 API 的 HTTP 输入

PUT _watcher/watch/cluster_health_watch
{
  "trigger" : {
    "schedule" : { "interval" : "10s" }
  },
  "input" : {
    "http" : {
      "request" : {
        "host" : "localhost",
        "port" : 9200,
        "path" : "/_cluster/health"
      }
    }
  }
}

如果你使用的是Security,那么你还需要在watch配置中提供一些认证凭证:

PUT _watcher/watch/cluster_health_watch
{
  "trigger" : {
    "schedule" : { "interval" : "10s" }
  },
  "input" : {
    "http" : {
      "request" : {
        "host" : "localhost",
        "port" : 9200,
        "path" : "/_cluster/health",
        "auth": {
          "basic": {
            "username": "elastic",
            "password": "x-pack-test-password"
          }
        }
      }
    }
  }
}

为使用这种监控配置,创建一个具有最低权限要求的用户是一个好主意。

根据您的集群配置,在监视器可以访问您的集群之前,可能需要额外的设置,例如密钥库、信任库或证书。有关更多信息,请参阅Watcher设置

如果您查看监视历史记录,您会看到每次执行监视时,集群状态都会作为watch_record的一部分被记录下来。

例如,以下请求从观看历史记录中检索最后十个观看记录:

GET .watcher-history*/_search
{
  "sort" : [
    { "result.execution_time" : "desc" }
  ]
}

添加一个条件

edit

一个条件评估您加载到监视中的数据,并确定是否需要采取任何行动。由于您已经定义了一个加载集群状态到监视中的输入,您可以定义一个检查该状态的条件。

例如,您可以添加一个条件来检查状态是否为红色。

PUT _watcher/watch/cluster_health_watch
{
  "trigger" : {
    "schedule" : { "interval" : "10s" } 
  },
  "input" : {
    "http" : {
      "request" : {
       "host" : "localhost",
       "port" : 9200,
       "path" : "/_cluster/health"
      }
    }
  },
  "condition" : {
    "compare" : {
      "ctx.payload.status" : { "eq" : "red" }
    }
  }
}

调度通常配置为运行频率较低。此示例将间隔设置为10秒,以便您可以轻松看到监视器被触发。

如果您查看监视历史记录,您会看到每次执行监视时,条件结果都会作为watch_record的一部分被记录下来。

要检查条件是否满足,您可以运行以下查询。

GET .watcher-history*/_search?pretty
{
  "query" : {
    "match" : { "result.condition.met" : true }
  }
}

采取行动

edit

在观看历史记录中记录watch_records是很好的,但Watcher的真正强大之处在于能够在警报响应时执行某些操作。一个观察的actions定义了当观察条件为真时要执行的操作——您可以发送电子邮件、调用第三方webhooks,或者在满足观察条件时将文档写入Elasticsearch索引或日志。

例如,您可以在状态为RED时添加一个操作来索引集群状态信息。

PUT _watcher/watch/cluster_health_watch
{
  "trigger" : {
    "schedule" : { "interval" : "10s" }
  },
  "input" : {
    "http" : {
      "request" : {
       "host" : "localhost",
       "port" : 9200,
       "path" : "/_cluster/health"
      }
    }
  },
  "condition" : {
    "compare" : {
      "ctx.payload.status" : { "eq" : "red" }
    }
  },
  "actions" : {
    "send_email" : {
      "email" : {
        "to" : "username@example.org",
        "subject" : "Cluster Status Warning",
        "body" : "Cluster status is RED"
      }
    }
  }
}

为了使 Watcher 发送电子邮件,您必须在您的 elasticsearch.yml 配置文件中配置一个电子邮件账户并重新启动 Elasticsearch。要添加电子邮件账户,请设置 xpack.notification.email.account 属性。

例如,以下代码片段配置了一个名为 work 的单个 Gmail 账户:

xpack.notification.email.account:
  work:
    profile: gmail
    email_defaults:
      from: <email> 
    smtp:
      auth: true
      starttls.enable: true
      host: smtp.gmail.com
      port: 587
      user: <username> 
      password: <password> 

替换为您希望从中发送通知的电子邮件地址。

替换为您的 Gmail 用户名(通常是您的 Gmail 地址)。

替换为您的 Gmail 密码。

如果您为电子邮件帐户启用了高级安全选项, 您需要采取额外步骤从 Watcher 发送电子邮件。有关更多信息,请参阅 配置电子邮件帐户

您可以查看观看历史记录或status_index以确认操作已执行。

GET .watcher-history*/_search?pretty
{
  "query" : {
    "match" : { "result.condition.met" : true }
  }
}

删除监视

edit

由于cluster_health_watch配置为每10秒运行一次,请确保在完成实验后删除它。否则,您将无限期地给自己发送垃圾信息。

要移除监视器,请使用删除监视器 API

DELETE _watcher/watch/cluster_health_watch