通过为阿里云Elasticsearch添加X-Pack Watcher,可以实现当满足某些条件时执行某些操作。例如,当logs索引中出现error日志时,触发系统自动发送钉钉消息。本文介绍如何配置钉钉机器人接收X-Pack Watcher报警。
前提条件
- 已创建阿里云Elasticsearch实例。 具体操作,请参见创建阿里云Elasticsearch实例。 说明- 旧网络架构下,X-Pack Watcher功能仅支持单可用区Elasticsearch实例,不支持多可用区实例。 
- 新网络架构下,需要配置实例私网连接打通网络限制。具体操作,请参见配置实例私网连接。 
 - 关于网络架构,请参见【通知】网络架构调整。 
- 已开启Elasticsearch实例的X-Pack Watcher功能。 具体操作,请参见配置YML参数。 
- 已在用户VPC下创建ECS实例。具体操作,请参见自定义购买实例。 
操作步骤
步骤一:创建并配置钉钉机器人
- 创建一个钉钉报警接收群。具体操作,请参见钉钉入门教程。 
- 在群的右上角单击  图标,在群设置面板中,单击机器人。 图标,在群设置面板中,单击机器人。
- 单击添加机器人。 
- 在机器人对话框中,单击添加机器人。 
- 单击自定义机器人,单击添加。 
- 选中自定义关键词,并输入关键词。 重要- 关键词必须包含在您设置的报警信息中。 
- 选中免责条款后,单击完成。 
- 单击Webhook后的复制,复制机器人的Webhook地址。 - 请保管好Webhook地址,以备后用。同时不要将其公布在外部网站上,泄露Webhook地址有安全风险。 
更多信息,请参见获取自定义机器人Webhook和安全设置。
步骤二:配置Nginx代理和ECS安全组
- 在ECS上配置Nginx代理。 - Nginx代理的作用是转发报警信息。Elasticsearch的X-Pack Watcher服务把报警信息发送到Nginx上,Nginx再把报警信息转发到钉钉或者企业微信中。 - 在ECS上安装Nginx。 - 安装方法,请参见Nginx安装配置。 
- 配置nginx.conf文件。 - 使用以下配置替换nginx.conf文件中 - server部分的配置。- server { listen 8080;#监听端口 server_name localhost;#域名 index index.html index.htm index.php; root /usr/local/webserver/nginx/html;#站点目录 location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; # access_log off; } location / { proxy_pass <Webhook地址>; } location ~ .*\.(js|css)?$ { expires 15d; # access_log off; } access_log off; }- <Webhook地址>替换为接收报警消息的钉钉机器人的Webhook地址。 
- 加载修改后的配置文件并重启Nginx。 - /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启Nginx
 
- 配置ECS安全组。 - 允许ECS上的Nginx代理接收来自Elasticsearch实例的报警信息。 
步骤三:配置Watcher报警
- 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。 - 登录Kibana控制台的具体操作,请参见登录Kibana控制台。 说明- 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。 
- 在左侧导航栏,单击Dev Tools。 
- 在Console中,执行如下命令创建一个报警文档。 - 以下示例以创建log_error_watch文档为例,每隔10s查询logs索引中是否出现error日志,如果出现0次以上则触发报警。 - PUT _xpack/watcher/watch/log_error_watch { "trigger": { "schedule": { "interval": "10s" } }, "input": { "search": { "request": { "indices": ["logs"], "body": { "query": { "match": { "message": "error" } } } } } }, "condition": { "compare": { "ctx.payload.hits.total": { "gt": 0 } } }, "actions" : { "test_issue" : { "webhook" : { "method" : "POST", "url" : "http://<yourAddress>:8080", "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"error 日志出现了,请尽快处理\"}}" } } } }- 表 1. 关键参数说明 - 参数 - 网络类型 - 配置说明 - url - 新网络架构 - 配置为终端节点域名地址,请求通过终端节点域名进行转发。获取终端节点域名,请参见配置阿里云Elasticsearch私网互通。 - 旧网络架构 - 配置为以下任一地址: - Nginx代理IP地址:请求通过同VPC下Nginx代理经公网进行转发。 
- 钉钉机器人的Webhook地址。 
 - body - 新网络架构 
- 旧网络架构 
 - 根据钉钉机器人的安全设置配置。 - 例如,步骤一:创建并配置钉钉机器人中选择安全设置方式为自定义关键词,且添加了一个自定义关键词:error,那么body中的content字段必须包含error,钉钉机器人才会推送报警信息。 说明- 如果在执行以上命令时,出现 - No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]异常,表示您购买的阿里云Elasticsearch实例未开启X-Pack Watcher功能,请开启后再执行以上命令。具体步骤,请参见配置YML参数。
步骤四:查看报警结果
正常情况下,当集群中的数据达到步骤三:配置Watcher报警中配置的报警条件时,您可以在钉钉群中收到类似error 日志出现了,请尽快处理的报警信息。
如果您不再需要执行报警任务,可执行以下命令删除该报警任务。
DELETE _xpack/watcher/watch/log_error_watch