通过为阿里云Elasticsearch添加X-Pack Watcher,可以实现当满足某些条件时执行某些操作。例如当logs索引中出现error日志时,触发系统自动发送报警邮件或机器人消息。可以简单地理解为X-Pack Watcher是一个基于Elasticsearch实现的监控报警服务。

前提条件

  • 创建单可用区的阿里云Elasticsearch。
    具体操作步骤请参见创建阿里云Elasticsearch实例
    注意 多可用区实例暂不支持X-Pack Watcher。
  • 为实例开启X-Pack Watcher功能。

    具体操作步骤请参见修改YML参数配置

  • 购买阿里云ECS实例。

    购买的ECS实例要与阿里云Elasticsearch实例在同一个区域和专有网络VPC(Virtual Private Cloud)下,并且能够访问公网,具体操作步骤请参见创建ECS实例

背景信息

X-Pack Watcher功能主要由Trigger、Input、Condition和Actions组成:
  • Trigger

    确定何时检查,在配置Watcher时必须设置。支持多种调度触发器,详情请参见Schedule Trigger

  • Input

    需要对监控的索引执行的筛选条件,详情请参见Inputs

  • Condition

    执行Actions的条件。

  • Actions

    当条件发生时,执行的具体操作。本文以配置Webhook Action为例。

操作步骤

  1. 配置ECS安全组。
    1. 登录阿里云ECS控制台,在左侧导航栏,单击实例
    2. 实例列表页面,单击对应实例右侧操作列下的更多 > 网络和安全组 > 安全组配置
    3. 在安全组列表右侧的操作列下,单击配置规则
    4. 安全组规则页面,单击入方向页签下的手动添加
    5. 填写相关参数。
      添加安全组规则
      参数 说明
      授权策略 选择允许
      优先级 保持默认。
      协议类型 选择自定义 TCP
      端口范围 填写您常用的端口(配置Nginx时需要用到,本文以8080为例)。
      授权对象 添加阿里云Elasticsearch实例中所有节点的IP地址。
      说明 您可以参见查看节点信息,获取Elasticsearch实例中所有节点的IP地址。
      描述 输入规则描述。
    6. 单击保存
  2. 配置Nginx代理。
    1. 在ECS上安装Nginx。
      具体安装方法请参见Nginx安装配置
    2. 配置nginx代理转发。
      使用以下配置替换nginx.conf文件中server部分的配置。
      server {
              listen 8080;
              server_name _;
              root /usr/share/nginx/html;
              # Load configuration files for the default server block.
              include /etc/nginx/default.d/*.conf;
      
                location / {
                  proxy_pass <企业微信机器人Webhook地址>;
                }
              error_page 404 /404.html;
                  location = /40x.html {
              }
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }

      <企业微信机器人Webhook地址>:请替换为接收报警消息的企业微信机器人的Webhook地址。

    3. 加载修改后的配置文件并重启Nginx。
      /usr/local/webserver/nginx/sbin/nginx -s reload            # 重新载入配置文件
      /usr/local/webserver/nginx/sbin/nginx -s reopen            # 重启Nginx
  3. 设置X-Pack Watcher报警规则。
    1. 登录对应阿里云Elasticsearch实例的Kibana控制台。
      具体操作步骤请参见登录Kibana控制台
    2. 在左侧菜单栏,单击Dev Tools(开发工具)。
    3. Console中执行如下命令创建一个报警文档。
      以下示例以创建developer_count_watch为例,每隔10s查询zl-testgaes索引中是否出现developer字段,如果出现158974次以上则触发报警。
      PUT _xpack/watcher/watch/developer_count_watch
      {
        "trigger": {
          "schedule": {
            "interval": "10s"
          }
        },
        "input": {
          "search": {
            "request": {
              "indices": ["zl-testgaes"],
              "body": {
                "query": {
          "bool": {
            "must": [
              {"match": 
               {
                 "developer" : "Nintendo"    
              }
              },
              {
              "range": {
                "year_of_release": {
                  "gte": "2011-09-20T16:00:00.000Z",
                  "lte": "2011-12-31T16:00:00.000Z"
                        }
                    }
              }
            ]
          } 
        }
              }
            }
          }
        },
        "condition": {
          "compare": {
            "ctx.payload.hits.total": {
              "gt": 158974
            }
          }
        },
        "actions" : {
        "test_issue" : {
          "webhook" : {
            "method" : "POST",
            "url" : "http://<ECS的内网IP地址>:8080",
            "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"developer is Nintendo,More than 158974\"}}"
          }
        }
      }
      }
      触发报警后,企业微信机器人将收到如下报警。企业微信机器人报警配置