全部產品
Search
文件中心

Elasticsearch:配置DingTalk機器人接收X-Pack Watcher警示

更新時間:Jun 30, 2024

通過為Elasticsearch添加X-Pack Watcher,可以實現當滿足某些條件時執行某些操作。例如,當logs索引中出現error日誌時,觸發系統自動發送DingTalk訊息。本文介紹如何配置DingTalk機器人接收X-Pack Watcher警示。

前提條件

  • 已建立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機器人

  1. 建立一個DingTalk警示接收群。

  2. 在群的右上方單擊設定.png表徵圖,在群設定面板中,單擊機器人

  3. 單擊添加機器人

  4. 機器人對話方塊中,單擊添加機器人

  5. 單擊自訂機器人,單擊添加

  6. 選中自訂關鍵詞,並輸入關鍵詞。

    重要

    關鍵詞必須包含在您設定的警示資訊中。

  7. 選中免責條款後,單擊完成

  8. 單擊Webhook後的複製,複製機器人的Webhook地址。

    請保管好Webhook地址,以備後用。同時不要將其公布在外部網站上,泄露Webhook地址有安全風險。

步驟二:配置Nginx代理和ECS安全性群組

  1. 在ECS上配置Nginx代理。

    Nginx代理的作用是轉寄警示資訊。Elasticsearch的X-Pack Watcher服務把警示資訊發送到Nginx上,Nginx再把警示資訊轉寄到DingTalk或者企業微信中。

    1. 在ECS上安裝Nginx。

    2. 配置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地址。

    3. 載入修改後的設定檔並重啟Nginx。

      /usr/local/webserver/nginx/sbin/nginx -s reload            # 重新載入設定檔
      /usr/local/webserver/nginx/sbin/nginx -s reopen            # 重啟Nginx
  2. 配置ECS安全性群組。

    允許ECS上的Nginx代理接收來自Elasticsearch執行個體的警示資訊。

    1. 登入阿里雲ECS控制台

    2. 在左側導覽列,單擊執行個體

    3. 執行個體頁面,單擊目標執行個體名稱。

    4. 單擊安全性群組頁簽。

    5. 安全性群組列表頁簽,單擊目標安全性群組名稱。

    6. 入方向頁簽,單擊手動添加

    7. 填寫相關參數。

      參數

      說明

      授權策略

      選擇允許

      優先順序

      保持預設。

      協議類型

      選擇自訂TCP

      連接埠範圍

      填寫您常用的連接埠(配置Nginx時需要用到,本文以8080為例)。

      授權對象

      添加您購買的Elasticsearch執行個體所有節點的IP地址。

      說明

      參見查看節點的基本資料,擷取Elasticsearch執行個體中所有節點的IP地址。

      描述

      輸入對規則的描述。

    8. 單擊儲存

步驟三:配置Watcher警示

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 在左側導覽列,單擊Dev Tools
  3. 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代理經公網進行轉寄。

    • DingTalk機器人的Webhook地址。

    body

    • 新網路架構

    • 舊網路架構

    根據DingTalk機器人的安全設定配置。

    例如,步驟一:建立並配置DingTalk機器人中選擇安全設定方式為自訂關鍵詞,且添加了一個自訂關鍵詞:error,那麼body中的content欄位必須包含error,DingTalk機器人才會推送警示資訊。

    說明

    如果在執行以上命令時,出現No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]異常,表示您購買的Elasticsearch執行個體未開啟X-Pack Watcher功能,請開啟後再執行以上命令。具體步驟,請參見配置YML參數

步驟四:查看警示結果

正常情況下,當叢集中的資料達到步驟三:配置Watcher警示中配置的警示條件時,您可以在DingTalk群中收到類似error 日誌出現了,請儘快處理的警示資訊。

說明

如果您不再需要執行警示任務,可執行以下命令刪除該警示任務。

DELETE _xpack/watcher/watch/log_error_watch