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執行個體。具體操作,請參見自訂購買執行個體。
說明Elasticsearch的X-Pack Watcher功能不支援直接與公網通訊,需要基於執行個體的私網地址(Virtual Private Cloud環境)通訊。因此,使用者VPC下的ECS執行個體需要持有公網IP或通過配置SNAT實現公網訪問。更多資訊,請參見綁定Elastic IP Address或配置SNAT。
操作步驟
步驟一:建立並配置DingTalk機器人
建立一個DingTalk警示接收群。
在群的右上方單擊表徵圖,在群設定面板中,單擊機器人。
單擊添加機器人。
在機器人對話方塊中,單擊添加機器人。
單擊自訂機器人,單擊添加。
選中自訂關鍵詞,並輸入關鍵詞。
重要關鍵詞必須包含在您設定的警示資訊中。
選中免責條款後,單擊完成。
單擊Webhook後的複製,複製機器人的Webhook地址。
請保管好Webhook地址,以備後用。同時不要將其公布在外部網站上,泄露Webhook地址有安全風險。
步驟二:配置Nginx代理和ECS安全性群組
在ECS上配置Nginx代理。
Nginx代理的作用是轉寄警示資訊。Elasticsearch的X-Pack Watcher服務把警示資訊發送到Nginx上,Nginx再把警示資訊轉寄到DingTalk或者企業微信中。
在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地址>替換為接收警示訊息的DingTalk機器人的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代理經公網進行轉寄。
DingTalk機器人的Webhook地址。
body
根據DingTalk機器人的安全設定配置。
例如,步驟一:建立並配置DingTalk機器人中選擇安全設定方式為自訂關鍵詞,且添加了一個自訂關鍵詞:note,那麼body中的content欄位必須包含note,DingTalk機器人才會推送警示資訊。
說明如果在執行以上命令時,出現
No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]
異常,表示您購買的Elasticsearch執行個體未開啟X-Pack Watcher功能,請開啟後再執行以上命令。具體步驟,請參見配置YML參數。
步驟四:查看警示結果
正常情況下,當CCR狀態達到步驟三:配置Watcher警示中配置的警示條件時,您可以DingTalk群中收到如下警示資訊。
如果您不再需要執行警示任務,可執行以下命令刪除該警示任務。
DELETE _xpack/watcher/watch/ccr_watcher