配置钉钉机器人接收X-Pack Watcher报警

通过为阿里云Elasticsearch添加X-Pack Watcher,可以实现当满足某些条件时执行某些操作。例如,当logs索引中出现error日志时,触发系统自动发送钉钉消息。本文介绍如何配置钉钉机器人接收X-Pack Watcher报警。

前提条件

  • 已创建阿里云Elasticsearch实例。 具体操作,请参见创建阿里云Elasticsearch实例

    说明
    • 旧网络架构下,X-Pack Watcher功能仅支持单可用区Elasticsearch实例,不支持多可用区实例。

    • 新网络架构下,需要配置实例私网连接打通网络限制。具体操作,请参见配置实例私网连接

    关于网络架构,请参见【通知】网络架构调整

  • 已开启Elasticsearch实例的X-Pack Watcher功能。 具体操作,请参见配置YML参数

  • 已在用户VPC下创建ECS实例。具体操作,请参见自定义购买实例

    说明

    阿里云ElasticsearchX-Pack Watcher功能不支持直接与公网通讯,需要基于实例的私网地址(专有网络VPC环境)通讯。因此,用户VPC下的ECS实例需要持有公网IP或通过配置SNAT实现公网访问。更多信息,请参见绑定弹性公网IP配置SNAT

操作步骤

步骤一:创建并配置钉钉机器人

  1. 创建一个钉钉报警接收群。具体操作,请参见钉钉入门教程

  2. 在群的右上角单击设置.png图标,在群设置面板中,单击机器人

  3. 机器人对话框中,单击自定义机器人,单击添加

  4. 选中自定义关键词,并输入关键词。

    重要

    关键词必须包含在您设置的报警信息中。

  5. 选中免责条款后,单击完成

  6. 单击Webhook后的复制,复制机器人的Webhook地址。

    请保管好Webhook地址,以备后用。同时不要将其公布在外部网站上,泄露Webhook地址有安全风险。

更多信息,请参见获取自定义机器人Webhook安全设置

步骤二:配置Nginx代理和ECS安全组

  1. ECS上配置Nginx代理。

    Nginx代理的作用是转发报警信息。ElasticsearchX-Pack Watcher服务把报警信息发送到Nginx上,Nginx再把报警信息转发到钉钉或者企业微信中。

    1. ECS上安装Nginx。

      安装方法,请参见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地址>替换为接收报警消息的钉钉机器人的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

      访问来源

      添加您购买的阿里云Elasticsearch实例所有节点的IP地址。

      说明

      参见查看节点的基本信息,获取Elasticsearch实例中所有节点的IP地址。

      访问目的

      填写您常用的端口(配置Nginx时需要用到,本文以8080为例)。

      描述

      输入对规则的描述。

    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地址:请求通过同VPCNginx代理经公网进行转发。

    • 钉钉机器人的Webhook地址。

    body

    • 新网络架构

    • 旧网络架构

    根据钉钉机器人的安全设置配置。

    例如,步骤一:创建并配置钉钉机器人中选择安全设置方式为自定义关键词,且添加了一个自定义关键词:error,那么body中的content字段必须包含error,钉钉机器人才会推送报警信息。

    说明

    如果在执行以上命令时,出现No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT]异常,表示您购买的阿里云Elasticsearch实例未开启X-Pack Watcher功能,请开启后再执行以上命令。具体步骤,请参见配置YML参数

步骤四:查看报警结果

正常情况下,当集群中的数据达到步骤三:配置Watcher报警中配置的报警条件时,您可以在钉钉群中收到类似error 日志出现了,请尽快处理的报警信息。

说明

如果您不再需要执行报警任务,可执行以下命令删除该报警任务。

DELETE _xpack/watcher/watch/log_error_watch