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安裝配置。
配置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