监控 Elasticsearch 集群状态
编辑监控 Elasticsearch 集群状态编辑
您可以轻松配置一个基本手表来监控 Elasticsearch 集群的健康状况。
安排手表并添加输入编辑
手表 计划 控制手表触发的频率。手表 输入 获取您要评估的数据。
定义计划的最简单方法是指定一个间隔。例如,以下计划每 10 秒运行一次。
计划通常配置为不太频繁地运行。此示例将间隔设置为 10 秒,以便您可以轻松地看到手表被触发。由于此手表运行如此频繁,请不要忘记在您完成实验后 删除手表。 |
要获取集群的状态,您可以调用 集群健康 API。
response = client.cluster.health( pretty: true ) puts response
GET _cluster/health?pretty
要将健康状况加载到您的手表中,您只需添加一个 HTTP 输入,它调用集群健康 API。
PUT _watcher/watch/cluster_health_watch { "trigger" : { "schedule" : { "interval" : "10s" } }, "input" : { "http" : { "request" : { "host" : "localhost", "port" : 9200, "path" : "/_cluster/health" } } } }
如果您使用的是安全功能,那么您还需要在手表配置中提供一些身份验证凭据。
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
的一部分被记录下来。
例如,以下请求从手表历史记录中检索最后十个手表记录。
response = client.search( index: '.watcher-history*', body: { sort: [ { 'result.execution_time' => 'desc' } ] } ) puts response
GET .watcher-history*/_search { "sort" : [ { "result.execution_time" : "desc" } ] }
添加条件编辑
一个 条件 评估您已加载到手表中的数据,并确定是否需要采取任何措施。由于您已定义一个输入,它将集群状态加载到手表中,因此您可以定义一个条件来检查该状态。
例如,您可以添加一个条件来检查状态是否为红色。
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" } } } }
如果您检查手表历史记录,您将看到条件结果作为每次手表执行的 watch_record
的一部分被记录下来。
要检查条件是否满足,您可以运行以下查询。
response = client.search( index: '.watcher-history*', pretty: true, body: { query: { match: { 'result.condition.met' => true } } } ) puts response
GET .watcher-history*/_search?pretty { "query" : { "match" : { "result.condition.met" : true } } }
采取行动编辑
在手表历史记录中记录 watch_records
很好,但 Watcher 的真正强大之处在于能够对警报做出响应。手表的 操作 定义了当手表条件为真时该做什么——您可以发送电子邮件、调用第三方 Webhook 或将文档写入 Elasticsearch 索引或日志,当手表条件满足时。
例如,您可以添加一个操作,当状态为红色时索引集群状态信息。
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" : "[email protected]", "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>
将 |
|
将 |
|
将 |
如果您为您的电子邮件帐户启用了高级安全选项,则需要采取其他步骤才能从 Watcher 发送电子邮件。有关更多信息,请参阅 配置电子邮件帐户。
您可以检查手表历史记录或 status_index
以查看操作是否已执行。
response = client.search( index: '.watcher-history*', pretty: true, body: { query: { match: { 'result.condition.met' => true } } } ) puts response
GET .watcher-history*/_search?pretty { "query" : { "match" : { "result.condition.met" : true } } }
删除手表编辑
由于 cluster_health_watch
配置为每 10 秒运行一次,请确保在您完成实验后将其删除。否则,您将无限期地给自己发送垃圾邮件。
要删除手表,请使用 删除手表 API。
response = client.watcher.delete_watch( id: 'cluster_health_watch' ) puts response
DELETE _watcher/watch/cluster_health_watch