专栏首页南非骆驼说大数据腾讯云Elasticsearch如何配置Alert 实现邮件告警功能
原创

腾讯云Elasticsearch如何配置Alert 实现邮件告警功能

一、前言

众所周知,由于云平台网络架构的安全限制,用户自2020年5月20日之前购买的Elasticsearch集群包括白金版均不能使用 Alert Watcher邮件告警功能。2020年5月20日开始,随着腾讯云平台网络架构的升级优化-------集群双网卡功能的推出,ES集群邮件告警功能也逐步得以实现。

腾讯云ES集群双网卡功能的推出,使得新购的ES集群的节点能直接访问同VPC下的网络,但是不能直接访问同VPC以外的外部网络,如果要实现正常的外部邮件的转发,则必须能访问到对端SMTP邮件服务器,才能实现邮件的发送。因此,本文将通过CVM配置Nginx反向代理的方式实现腾讯云Elasticsearch集群的邮件告警功能。

二、前提条件

  1. ES集群必须是2020年5月20日以后新购买的白金版集群;
  2. 腾讯云内部客户通过云梯购买的Elasticsearch集群暂不支持该功能;

三、本次方案拓扑架构、基础条件

ES集群: Elasticsearch 7.10.1 白金版 3个节点 CVM: OS : 7.2 仅具备内网,不能上外网;

CVM: 与ES集群同VPC Nginx 1.14.2 Kibana 7.10.1 具备外网功能;

本次方案拓扑

四、腾讯云Elasticsearch配置邮件告警功能实践

步骤如下:

首先,需要在ES集群的节点配置发送消息邮箱,集群有几个节点,就需要配置多少个节点,这里需要修改elasticserach.yml的配置文件,这里以一台节点为例,配置QQ发送邮箱,配置如下:

xpack.notification.email.account:
    mail_account:  # 发件箱配置名称,可以随意指定,但是一定要记住这个,后面需要调用;
        profile: standard # 采用默认的邮件模板,如果不是outlook或者gmail,就填这个即可。
        email_defaults: # 设置默认发件箱
            from: 541180694@qq.com  # 发件箱跟下面的user要保持一致。
        smtp:
            auth: true # 开启账号验证
            starttls.enable: true # 开启ssl
            host: 10.0.2.47 # smtp地址   //这里写同VPC下的内网的代理服务器的地址
            port: 28 # 邮件代理服务器的端口
            user: 541180694@qq.com # 用来认证的SMTP服务器的账号,与上面的from账号保持一致。

其次,设置发件箱密码 说明,使用QQ邮箱,163邮箱的话,需要注意,在配置发件箱中使用的密码不是登陆这个邮箱使用的密码,而是使用这个邮箱的邮箱授权码,也就是说,接下来要设置的密码是QQ或者163官方授予的密码,不能随意指定创建,否则后面会认证失败。一般QQ、163邮件服务器都会提供这样的授权码。

执行如下命令,设置发件箱密码,有几个节点,执行几个节点;

bin/elasticsearch-keystore add xpack.notification.email.account.mail_account.smtp.secure_password

说明,这个mail_account名字必须与上面确定的发件箱配置名字保持一致。

执行完后,检查一下是否有如下结果:

[elastic@s1 elasticsearch-7.10.1]$ bin/elasticsearch-keystore list
keystore.seed    //系统自带的
xpack.notification.email.account.mail_account.smtp.secure_password   //确保每台机器都要有这个。

再次,重启ES集群,每个节点都重启一下;

接下来,配置CVM侧,Nginx反向代理;

Ngix1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。我们测试下通过nginx动态加载模块,添加stream模块实现tcp反向代理功能。

  1. 下载一个Nginx, 可以在这里下载:http://nginx.org/en/download.html
  2. 安装\配置Nginx,步骤如下:执行如下命令:

第一、yum install gcc-c++

第二、yum install -y pcre pcre-devel

第三、yum install -y zlib zlib-devel

第四、yum install -y openssl openssl-devel

第五、 编译安装,重点关注 --prefix=/usr/local/nginx --with-stream=dynamic

第六、make & make install

第七:启动nginx 、并验证

附上Nginx TCP 反向代理文件

load_module "/usr/local/nginx/modules/ngx_stream_module.so";
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    include       ext/*;
    default_type  application/octet-stream;
    sendfile        on;
     keepalive_timeout  65;
     server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        } 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }     
    }
   
    server {
        listen       8000;
        server_name  127.0.0.1;

        location / {
            root   /usr/local/nginx/html;
            index  index.php;
        }
            location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }
    }   

    include ext/*;

}
stream {
    #虚拟服务
    upstream mailstream {
        #设置真实的邮件服务器地址,其中ip和port替换成真实地址和端口
        server smtp.qq.com:25;
    }
    server {
        #监听端口,此端口为代理服务器的端口
        listen 10.0.2.47:28;  #本机内网IP
        proxy_connect_timeout 5s;
        proxy_timeout 5s;
        #设置代理转发到哪里
        proxy_pass mailstream;
    }
 
}

那么以上,我们整个配置过程就已经全部操作完毕。

五、验证 Kibana中设置Watcher 邮件告警

1,在Kibana > Management > Stack Management > Wathcer中,设置如下:

在下面的页面配置中,选择如下:

Action 选择Email邮箱操作

设置完后,点击"立即试发送邮件"告警,如下:

配置邮箱发送

邮件发送成功,链路测试成功;

当然,我的邮箱也收到了相关的邮件告示。

邮件告警确认消息

那么,这样,我们就能实现 Alert 邮件告警功能的设置。以上就是整个过程,完毕。

六、配置邮件过程中可能遇到的问题、分析

问题一,Nginx 安装配置中需要编译安装stream模块实现tcp反向代理功能;

问题二,日志中报这样的IP超时错误提示,如下图所示:

IP连接超时错误

这个时候需要检查CVM nginx配置的代理的IP地址是否与ES集群配置的IP一致。一般是IP不一致或者网络不通造成。可以telnet 测试。

问题三,IP网络没问题,还是有如下报错:

端口异常报错提示

这个样子大致是smtp配置的代理服务器的端口无法将请求转发到25口,导致链接失败。由于用户这里测试用的是腾讯QQ企业邮箱。经过查阅可以知道:smtp.qq.com的587端口是开启了ssl之后对外提供的链接端口,而不是25.修改如下:

修改QQ邮箱的smtp端口

使用starttls协议,smtq.qq.com的587端口,默认的25端口没有使用starttls。

参考链接:https://www.haiyun.me/archives/1242.html

问题四、Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: 10.16.0.17, 25; timeout 120000

如有这个问题,应该是ES后台额配置没有下发成功。

原因:架平侧有bug,代理端口是28,但是这个配置项没有下发下去,需要后台再重新下发一下配置。

问题五、有些用户自己购买的云服务IAAS企业邮箱,并没有发件箱密码,如果不设置,会有如下报错:

发件箱授权码无设置

由于用户用的是微软的Office 365企业邮箱,确认无发件箱邮件的授权码后,我们设置了该用户的发件箱邮件密码,然后验证成功。附上其NG关键配置。

stream {
    #虚拟服务
    upstream mailstream {
        #设置真实的邮件服务器地址,其中ip和port替换成真实地址和端口
#       server smtp.qq.com:25;
        server partner.outlook.cn:587;  
    }
    server {
        #监听端口,此端口为代理服务器的端口
        listen 192.168.XXX.XXX:587;  #本机内网IP
        proxy_connect_timeout 5s;
        proxy_timeout 5s;
        #设置代理转发到哪里
        proxy_pass mailstream;
    }
 
}

所有这些问题最多的都是smtp对外提供的端口问题,NG配置问题,邮件授权码问题。具体情况还需具体分析。

七、外网环境下的邮件告警设置

如果直接在外网,就不需要设置邮件反向代理,直接ES.yml如下设置邮箱信息即可。配置简单如下,其他配置同上:

XXXXXXXXXXX:
        smtp:
            auth: true # 开启账号验证
            starttls.enable: true # 开启ssl
            host: smtp.qq.com # smtp地址
            port: 25 # 端口
            user: 541180694@qq.com # 发件箱

更多官方关于邮件告警的设置,参考:

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/actions-email.html

https://www.elastic.co/guide/en/kibana/7.10/watcher-ui.html

八、常见问题:

1,发送邮件时,日志提示邮件认证失败,这个主要是发件箱密码设置错误导致。

2,Nginx配置反向代理时,转发错误。需要详细排查NG的配置。

九、本节总结

今天发了点时间整理了这个Watcher邮件告警功能设置,主体是验证实现了整体的流程。具体告警细节需要用户根据自己的场景特定的有针对性的设置以满足实际需求。好的,本文就讲到这里,这里一致鸣谢本文实践过程中参考的文章链接:

https://cloud.tencent.com/developer/article/1457384

https://www.cnblogs.com/sanduzxcvbnm/p/12021538.html

https://www.cnblogs.com/langkyeSir/p/13268289.html

https://www.cnblogs.com/godfather007/p/10806020.html

https://www.linuxba.com/archives/7931

https://cloud.tencent.com/developer/article/1678768

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/actions-email.html#configuring-email

https://www.kafan.cn/A/43y8mw1jnr.html outlook登陆的企业邮箱怎么开通授权码

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 腾讯云Elasticsearch Watcher 功能之 Webhook实践

    Elasticsearch 的商业包 x-pack 给我们提供了很多高阶功能,其中有一个非常重要的用来检测日志是否异常并及时发送警报信息的功能,我们称这个功能为...

    南非骆驼说大数据
  • ELK 日志报警插件 ElastAlert

    在日常运维中使用 elk 对业务访问日志,设备以及软件运行日志进行统一管理、存储、追溯、分析。日常运维理想的状态是能够实时监测日志的状态,当异常日志产生...

    Kevin song
  • 如何选择Elastic Stack中的Alert和Watcher

    警报是Elastic Stack的一个重要组成部分。你可以使用存储在Elasticsearch中的数据,在满足特定条件时触发警报。警报动作可能涉及发送电子邮件或...

    点火三周
  • ElastAlert监控日志告警Web攻击行为

    由于公司需要监控web攻击行为,而因某些原因搭不了waf,才不得不用ElastAlert进行告警,此为前提。 一、ELK安装 Elasticsearch 是一个...

    FB客服
  • 使用Alerting监控ES集群

    为保证Elasticsearch集群的正常运行,需要对集群的CPU负载,JVM使用率,磁盘使用率等指标进行监控。当这些指标达到阈值时及时处理,保证Elastic...

    michelmu
  • 云原生监控配置自建alertmanager实现告警

    当前k8s的主流监控软件主要是prometheus,为了能够更好的监控腾讯云上的tke集群,腾讯云也推出了prometheus的服务,叫做云原生监控,云原生监控...

    聂伟星
  • 实时监控:基于流计算 Oceanus(Flink) 实现系统和应用级实时监控

    本文描述了如何使用腾讯云大数据组件来完成实时监控系统的设计和实现,通过实时采集并分析云服务器(CVM)及其 App 应用的 CPU和内存等资源消耗数据,以短信、...

    吴云涛
  • Elasticsearch service通过企业微信定期发送报告

    在上一篇文章《如何选择Elastic Stack中的Alert和Watcher》中,我们介绍了Alert和Watcher的使用场景。也提到Watcher与Kib...

    点火三周
  • 实时监控:基于流计算 Oceanus ( Flink ) 实现系统和应用级实时监控

    ---- 作者:吴云涛,腾讯 CSIG 高级工程师 本文描述了如何使用腾讯云大数据组件来完成实时监控系统的设计和实现,通过实时采集并分析云服务器(CVM)及...

    腾讯技术工程官方号
  • 实时监控:基于流计算 Oceanus ( Flink ) 实现系统和应用级实时监控

    ---- 作者:吴云涛,腾讯 CSIG 高级工程师 本文描述了如何使用腾讯云大数据组件来完成实时监控系统的设计和实现,通过实时采集并分析云服务器(CVM)及...

    腾讯QQ大数据
  • 基于时序数据库的监控告警系统搭建实践

    随着云计算技术的广泛应用,越来越多的项目部署和迁移到云端,传统的监控告警系统在短时间内还不能适配云上的服务。为了实现实时系统运行状态的展示、故障的及时告警、历史...

    JimmyDeng
  • Elasticsearch 再发数据泄露事件,包含 27 亿邮箱数据和10 亿明文密码,波及多家中国大厂用户数据!

    就在不到一个月之前,安全人员 Bob Diachenko 和 Vinny Troia 发现了一个公开可访问的 Elasticsearch 服务器,其中包含 1...

    iMike
  • Elastic Stack最佳实践:7.10.1与7.14.2的功能比较

    在上一篇文章Elastic Stack最佳实践:7.10.1与7.14.2的性能比较中,我们列举了一些esrally压测的结果,用于帮助大家判断是否需要从7.1...

    点火三周
  • 监控产品上新月报【12月】

    应用性能观测 APM 1. 支持将APM 页面嵌入您的自建系统,更方便您查看应用性能数据。操作文档: https://cloud.tencent.com/doc...

    腾讯云监控团队
  • 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统

    The following article is from 腾讯技术工程 Author 腾讯程序员 作者:龙逸尘,腾讯 CSIG 高级工程师 为什么要构建...

    腾讯QQ大数据
  • Elasticsearch 日志监控方案

    现在大部分公司都会选择将应用、中间件、系统等日志存储在 Elasticsearch 中,如何发现日志中的异常数据并且及时告警通知就显得十分重要。本文将会介绍两种...

    Se7en258

扫码关注腾讯云开发者

领取腾讯云代金券