前言
本文主要给大家介绍ES中的高级特性监视器Watcher的使用。
需要注意的是,ES免费版本中暂不支持该特性。
一、什么是监视器?
通过使用 Watcher 监视数据中的更改或异常,并执行必要的响应操作。
官方文档:Watcher
典型使用场景:
监控社交媒体,作为检测面向用户的自动化系统(如 ATM 或票务系统)故障的另一种方式。 当某个区域的推文和帖子数量超过重要阈值时,通知服务技术人员。
监控您的基础设施,随着时间的推移跟踪磁盘使用情况。 当任何服务器在接下来的几天内可能用完可用空间时,请打开服务台票证。
跟踪网络活动以检测恶意活动,并主动更改防火墙配置以拒绝恶意用户。
监控 Elasticsearch,如果节点离开集群或查询吞吐量超出预期范围,立即通知系统管理员。
跟踪应用程序响应时间,如果页面加载时间超过 SLA 超过 5 分钟,请打开服务台票证。 如果超过 SLA 一个小时,请呼叫值班管理员。
总结:
采用监视器Watcher,你可以监控索引中的数据指标,集群服务器的磁盘使用情况,网络活动情况,ES集群的状态,程序的相应时间等属性,并根据监控到的情况做出相应的动作。
这些场景的特点是,相关数据或数据变化可以通过定期的 Elasticsearch 查询来识别,并可以根据条件检查查询结果。
如果条件为真 — 发送电子邮件、通知第三方系统或存储查询结果,则执行一个或多个操作。
二、监视器是如何工作的?
1、Schedule 调度计划
用于运行查询和检查条件的调度。
2、Query 查询
作为条件的输入运行的查询。监视器支持完整的 Elasticsearch 查询语言,包括聚合。
3、Condition 条件
决定是否执行动作的条件。 您可以使用简单的条件(始终为真),或者将脚本用于更复杂的场景。
4、Actions 行动
一项或多项操作,例如发送电子邮件、通过 Webhook 将数据推送到 3rd 方系统或索引查询结果。
Watcher执行过程说明:
在监视器Watcher执行上下文中将输入数据作为有效负载加载。这使得数据可用于执行过程中的所有后续步骤。这个步骤由Watcher的输入控制。
计算监视器Watcher条件Condition,以确定是否继续处理Watcher。如果满足条件(计算结果为 true) ,则处理进入下一步。如果不满足(计算结果为 false) ,则停止执行Watcher。
将转换应用于监视有效负载(如果需要)。
当添加满足且Watcher不被限制,则执行Watcher动作。
三、如何创建一个监视器Watcher
1、Trigger
确定何时检查Watcher。 Watcher中必须有触发器。
2、Input
将数据加载到Watcher负载中。 如果未指定输入,则加载空负载。
3、Condition
控制是否执行监视操作Actions。 如果未指定条件,则条件默认为始终。
4、Transform
处理监视负载数据使其为监视操作Actions做好准备。
可以在监视级别定义转换或定义特定于操作的转换。 数字转换是可选配置。
5、Actions
指定满足监视条件时发生的情况。
示例:
说明:创建监听器log_errors,监控索引log-events中出现状态为error的记录数超过5个,则触发Actions操作。
PUT _watcher/watch/log_errors { "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 }} }, "transform" : { "search" : { "request" : { "indices" : "log-events", "body" : { "query" : { "match" : { "status" : "error" } } } } } }, "actions" : { "my_webhook" : { "webhook" : { "method" : "POST", "host" : "mylisteninghost", "port" : 9200, "path" : "/{{watch_id}}", "body" : "Encountered {{ctx.payload.hits.total}} errors" } }, "email_administrator" : { "email" : { "to" : "sys.admino@host.domain", "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" } } } }
参数说明:
1、Metadata - 可以将可选的静态元数据附加到Watcher。
2、Trigger - 监视器每5分钟触发一次检测。
3、Input - 查询索引log-events中的异常记录,并将查询响应结果加载到watch的负载中。
4、condition-此条件检查是否有超过5个错误事件(在搜索响应中命中)。如果有,则继续执行所有操作。
5、Transform - 如果满足监视条件,则此转换通过使用默认搜索类型 query_then_fetch 搜索错误将所有错误加载到监视负载中。 所有监视操作都可以访问此有效负载。
6、Actions - 这款手表有两个动作。 my_webhook 操作将问题通知第 3 方系统。 email_administrator 操作向系统管理员发送高优先级电子邮件。 包含错误的监视负载附加到电子邮件中。
四、删除监视器
DELETE _watcher/watch/log_error_watch
五、查看监视器执行历史
查看监视器执行历史记录,根据执行时间倒序排序:
GET .watcher-history*/_search { "sort" : [ { "result.execution_time" : "desc" } ] }
查看监视器执行历史记录,匹配出满足监视器condition条件的记录:
GET .watcher-history*/_search?pretty { "query" : { "match" : { "result.condition.met" : true } } }
六、监视器使用限制
为了使用ES中监视器Watcher的特性,必须获取一个包含该特性的证书。
ES各版本特性说明:https://www.elastic.co/subscriptions
ES证书管理:License management
免费开源的版本中是不包含Watcher功能的。
总结
本文主要对ES监视器Watcher的使用进行了详细介绍。
通过采用监视器Watcher,我们可以监控索引中的数据指标,集群服务器的磁盘使用情况,网络活动情况,ES集群的状态,程序的相应时间等属性,并根据监控到的情况做出相应的动作。