阿里云Elasticsearch应用实践

一、产品介绍

阿里云Elasticsearch提供Elasticsearch 5.5.3 和 6.3.2 版本及商业插件X-pack服务,致力于数据分析、数据搜索等场景服务。在开源Elasticsearch基础上提供企业级权限管控、安全监控告警、自动报表生成等功能。

X-Pack是Elasticsearch的一个商业版扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中。X-Pack被集成在Kibana中,为用户提供授权认证、角色权限管控、实时监控、可视化报表、机器学习等能力。

自动备份(数据快照)

阿里云ES实例有提供自动备份数据快照功能,您可以在阿里云ES控制台中的网络配置及数据备份界面开启自动备份功能,并根据自身实际业务需要设置自动备份周期,可以实现每天定时自动备份数据快照。该方案可实现一定程度的数据容灾。

自动备份快照恢复

可通过单击阿里云ES控制台中的网络配置及数据备份界面中的备份恢复功能文档按钮,根据实际业务需要参考文档中的数据快照恢复操作描述,恢复指定快照数据。


注意:

  • 自动备份只保存最近5天的快照数据。
  • 自动备份生成的快照只能用于恢复到原阿里云Elasticsearch实例中。

快照保存到对象存储(OSS)

阿里云ES实例支持将当前ES实例中的ES快照数据保存到阿里云对象存储(OSS)服务中(需要用户购买与阿里云ES实例相同区域的对象存储(OSS)服务),根据实际业务需要参考快照及恢复文档描述,通过手动执行创建快照命令,快照指定索引数据。

或手动执行恢复快照命令来恢复之前已经备份的指定快照中的索引数据,该方案可实现一定程度的数据容灾。

备份快照

  • 创建仓库
PUT _snapshot/my_backup
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "LTAIEcqjZTQj9eTM",
        "secret_access_key": "MJg0WCxp9zAFusTkc9CVThqdliayiI",
        "bucket": "es-zybackup",
        "compress": true
    }
}
  • 快照指定索引
PUT _snapshot/my_backup/snapshot_2
{
    "indices": "zhuyun_index,blog_index"
}
  • 列出快照信息
GET _snapshot/my_backup/snapshot_2

GET _snapshot/my_backup/_all

GET _snapshot/my_backup/snapshot_2/_status
  • 删除快照
DELETE _snapshot/my_backup/snapshot_2

恢复快照

在新的es集群执行下面步骤恢复快照到新集群

  • 创建仓库
PUT _snapshot/my_backup
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "LTAIEcqjZTQj9eTM",
        "secret_access_key": "MJg0WCxp9zAFusTkc9CVThqdliayiI",
        "bucket": "es-zybackup",
        "compress": true
    }
}
  • 从快照恢复
POST _snapshot/my_backup/snapshot_2/_restore?wait_for_completion=true

注意:

  • 建议使用标准存储类型对象存储(OSS)服务(不支持归档存储类型OSS)。

温馨提示:

  • 阿里云对象存储(OSS)服务中保存的数据快照,可恢复到相同区域下的不同阿里云Elasticsearch实例中。
  • 支持通过手动执行对应命令,主动创建数据快照或恢复指定数据快照中的索引数据。

负载均衡功能

阿里云ES实例支持负载均衡功能,目前只需要在应用程序中指定阿里云ES实例的内网地址或公网地址访问阿里云ES实例服务,即可实现负载均衡功能。

访问白名单

阿里云ES实例的内网地址和公网地址都支持配置ES系统黑白名单,只有符合ES系统黑白名单规则的IP地址所属设备才能访问阿里云ES实例服务。

二、监控报警

ES云监控报警

ES云监控报警

Watcher监控报警

默认阿里云ES实例未开启Watcher功能。开启步骤:进入es实例,ES集群配置--> YML文件配置,开启Watcher,会重启ES实例。

开启后可使用 X-Pack 的 Watcher 功能,请注意清理旧的 .watcher-history* 索引

1.概述

可以通过添加Watcher实现当满足某些条件时执行某些操作,比如当logs索引中出现ERROR日志时,自动发送报警邮件或钉钉消息,可以简单的理解为Watcher是一个基于ElasticSearch实现的监控报警服务。

2.功能介绍

XPack Watcher功能主要由Trigger、Input、Condition、Actions组成。

Trigger:确定何时检查,在配置Watcher时必须设置

Input:可以理解为您需要对监控的索引执行的筛选条件

Condition:执行Actions的条件。

Actions:当条件发生时,执行的具体操作。

3.配置方式

阿里云ES的Watcher功能不支持直接与公网进行通讯,需要基于阿里云ES实例内网地址来进行通讯(专有网络VPC环境)。如果您需要使用XPack Watcher,您需要通过架设一台能同时访问公网和阿里云ES实例的阿里云ECS实例做代理去执行Actions。

以配置Webhook Action为例(Webhook采用钉钉群机器人):

4.购买阿里云ECS

在阿里云官网购买一台与阿里云ES实例相同区域和VPC的阿里云ECS实例,并且需要能够访问公网。

5.配置安全组

ecs放开es内网访问权限

获取阿里云ES实例IP地址列表:

登陆您购买的阿里云ES实例的Kibana控制台,点击左侧Tab页面中的Monitoring,再点击nodes就可以看到您购买的阿里云ES实例所有节点的IP列表。

6.ecs安装并配置Nginx代理

server
  {
    listen 8080;#监听端口
    server_name localhost;#域名
    index index.html index.htm index.php;
    root /usr/local/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 https://oapi.dingtalk.com/robot/send?access_token=b8bec21ab53b084ab4273e21ca225f3a30d587445468b9b0d071230ae4af9322;
    }
    location ~ .*\.(js|css)?$
    {
      expires 15d;
   # access_log off;
    }
    access_log off;
  }
启动nginx:
/usr/local/nginx/sbin/nginx

7.设置报警

登陆阿里云ES实例Kibana控制台,点击左侧的Dev Tools Tab页面。下文以创建log_error_watch为例,每隔10s查询logs索引中是否出现ERROR日志,如果出现0次以上则触发报警。

PUT _xpack/watcher/watch/log_error_watch
{
  "trigger": {
    "schedule": {
      "interval": "1m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "zhuyun_index"
        ],
        "types": [],
        "body": {
          "size": 0,
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "message": "error"
                  }
                },
                {
                  "range": {
                    "@timestamp": {
                      "gte": "now-1m"
                    }
                  }
                }
              ]
            }
          },
          "sort": [
            {
              "@timestamp": {
                "order": "desc"
              }
            }
          ]
        }
      }
    }
  },
  "condition": {
    "compare": {
      "ctx.payload.hits.total": {
        "gt": 0
      }
    }
  },
  "actions": {
    "webhook-test": {
      "webhook": {
        "scheme": "http",
        "host": "10.0.0.29",
        "port": 8080,
        "method": "post",
        "params": {},
        "headers": {},
        "body": "{\"msgtype\": \"text\", \"text\": { \"content\": \"日志出现了error,请注意查看。\"}}"
      }
    }
  }
}
温馨提示:
上述actions中配置的url,必须是您购买的与阿里云ES实例相同区域和VPC的阿里云ECS实例的内网IP地址,并且已经按照上述方式进行了安全组配置,否则不能进行通信。

注意定期清理.watcher-history索引,阿里云ES目前没有定期清理.watcher-history索引的功能,需要根据您的具体需要定期清理.watcher-history没用的索引(可以在您购买的ECS上跑一个定时任务调用ElasticSearch删除索引的API)。

8.启动logstash输出日志测试告警

/usr/share/logstash-6.3.2/bin/logstash -f /etc/logstash/conf.d/elk.conf
上一篇:MySql数据类型


下一篇:winlogbeat收集windows系统日志