Elasticsearch X-Pack Watcher可跟踪网络,具备对基础设施、索引数据和集群健康等指标的监控和报警能力。您可以在Kibana控制台上获取跨集群复制CCR(Cross Cluster Replication)功能相关的监控,并通过X-Pack Watcher监控CCR异常实现报警。本文介绍如何将CCR获取的读数据请求耗时及CCR Checkpoint作为预警条件,实现CCR异常报警通知。
前提条件
已创建阿里云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.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中,执行如下命令创建一个报警文档。
PUT _watcher/watch/ccr_watcher { "trigger": { "schedule": { "interval": "10s" } }, "input": { "search": { "request": { "indices": [ ".monitoring-es*" ], "body": { "size": 0, "sort": [ { "timestamp": { "order": "desc" } } ], "query": { "bool": { "must": [ { "range": { "timestamp": { "gte": "now-10m" } } }, { "term": { "type": { "value": "ccr_stats" } } }, { "bool": { "should": [ { "range": { "ccr_stats.time_since_last_read_millis": { "gte": 600000 } } }, { "script": { "script": "long gap = doc['ccr_stats.leader_global_checkpoint'].value - doc['ccr_stats.follower_global_checkpoint'].value;\n return gap>1000;" } } ] } } ] } }, "aggs": { "NAME": { "terms": { "field": "ccr_stats.follower_index", "size": 1000 } } } } } } }, "condition": { "compare": { "ctx.payload.hits.total": { "gt": 0 } } }, "transform": { "script": """ StringBuilder message = new StringBuilder(); for (def bucket : ctx.payload.aggregations.NAME.buckets) { message.append(bucket.key).append(' ') } return [ 'delay_indices' : message.toString().trim() ] """ }, "actions" : { "add_index": { "index": { "index": "ccr_delay_indices", "doc_type": "doc" } }, "my_webhook": { "webhook" : { "method" : "POST", "url" : "http://<yourAddress>:8080", "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"Please note: {{ctx.payload}}\"}}" } } } }
部分关键参数说明如下。
参数
说明
trigger
检测周期,请根据实际业务进行配置。以上示例设置为每10s检测一次。
input.search.request.indices
查询检测的目标索引。.monitoring-es*索引保存集群支持的所有监控指标,其中也包括CCR指标。
input.search.request.body
查询体。以上示例从系统监控索引查询近10分钟的CCR状态信息,当查询满足以下条件中的其中一个,CCR将进入下一步:
ccr_stats.time_since_last_read_millis>600000ms(10min):读请求发送到Leader节点的延时时间大于10min。请根据您CCR的实际业务使用进行配置。
ccr_stats.leader_global_checkpoint-ccr_stats.follower_global_checkpoint>1000:Follower Checkpoint落后于Leader Checkpoint的程度大于1000。请根据您CCR的实际业务使用进行配置。
condition
报警条件。以上示例表示满足input.search.request.body中的条件,且返回的聚合文档数大于0即可报警。
transform
预处理。以上示例表示循环获取buckets key值,并通过空格进行分割,过滤出延迟索引名。
actions
满足条件时,执行的具体操作。以上示例设置两个action:
add_index:将上面返回的结果写入索引中,在调试Watcher配置环节,定义index进行调试。
my_webhook:通过Webhook方式发送报警信息。
<yourAddress>
接收报警信息的服务器的访问地址:
新网络架构下,配置为终端节点域名地址,请求通过终端节点域名进行转发。获取终端节点域名,请参见配置阿里云Elasticsearch私网互通。
旧网络架构下,配置为以下任一地址:
Nginx代理IP地址:请求通过同VPC下Nginx代理经公网进行转发。
钉钉机器人的Webhook地址。
body
根据钉钉机器人的安全设置配置。
例如,步骤一:创建并配置钉钉机器人中选择安全设置方式为自定义关键词,且添加了一个自定义关键词:note,那么body中的content字段必须包含note,钉钉机器人才会推送报警信息。
说明如果在执行以上命令时,出现
No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]
异常,表示您购买的阿里云Elasticsearch实例未开启X-Pack Watcher功能,请开启后再执行以上命令。具体步骤,请参见配置YML参数。
步骤四:查看报警结果
正常情况下,当CCR状态达到步骤三:配置Watcher报警中配置的报警条件时,您可以钉钉群中收到如下报警信息。
如果您不再需要执行报警任务,可执行以下命令删除该报警任务。
DELETE _xpack/watcher/watch/ccr_watcher