数据、服务报警机制是产品中比较常用的安全机制,一般而言报警功能都是预置的产品中,但是在实际项目中,根据部署架构的实际要求,可能通过脚本的方式进行邮件报警。
目前公司产品均采用K8S容器化的部署方式,,但在实际项目中,由于Linux服务器系统、架构的不同,对于系统资源以及一些特殊的容器需要单独进行监控,。
总体说明
在产品运行的过程中,对系统资源、环境、产品的监控都是产品稳定运行的重要保证,尤其涉及系统集成的环境,一旦服务异常就会直接影响多个系统或模块的功能,对实际业务的影响比较大,所以要有必要的监控手段对环境进行监控,以保证提前暴露问题,及时修复,将业务的影响降低最低。
1.应用场景
在生产环境中,一般需要监控和报警的内容包括系统资源和产品运行,而产品又是基于K8S的容器化部署,所以也需要对K8S服务以及相关容器进行监控:
1.:监控K8S集群节点状态,保证服务器节点的稳定;
2:监控kube-system命名空间下的容器,保证K8S集群稳定运行的基础;
3.:监控Ingress容器状态,保证外部访问时可以完成代理和容器的访问;
4.:监控NFS服务端服务,保证NFS磁盘资源共享;
5.:监控Node节点的共享磁盘挂载,保证NFS磁盘资源共享;
6.:监控运行容器的CPU和内存消耗,及时处理内存泄露等问题;
7.:验证产品访问地址的可用性,保证产品的正常访问;
8.:监控UMC平台运行的稳定性,避免产品容器无法连接UMC异常;
9.:监控外部Redis集群的稳定性,避免UMC无法连接Redis导致访问异常。
2.报警机制
一般平台的报警主要是在系统监控到异常时记录相应的错误日志,然后通过平台的消息功能进行消息提醒,再由管理员或者运维人员根据异常进行问题处理。而为了提高问题发现以及处理的效率,对于紧急问题往往需要通过短信、微信、邮件等方式进行提醒,以达到更快报告问题的目的。
1.:通过Linux服务器进行短信发送有两种方式,一种是通过服务器AT指令和串口的方式,二是通过短信平台的API接口方式;
2.:微信/企业微信以及其他平台一般会提供API接口,可以直接调用API进行消息推送;
3.:在Linux服务器上部署邮件工具,通过脚本和命令的方式进行邮件发送。
3.配置过程
本次主要介绍邮件报警,在Linux服务器部署脚本,通过脚本监控相关资源,在出现异常时调用邮件工具发送邮件进行报警。根据项目环境的具体情况,邮件报警的过程。
1.在Linux服务器上部署邮件工具,通过rpm包进行安装;
2.邮件工具配置,配置发件服务器以及发件人邮箱;
3.部署shell脚本,通过脚本进行资源监控,并根据异常信息发送报警邮件。
基础环境
本次以CentOS 7系统为例,在服务器上部署邮件工具,并配置相关信息,包括发件服务器、发件人邮箱、用户名/密码等,如果是生产环境的内网服务器,还需要考虑通过Nginx进行网络代理,以便服务器向外网发送邮件。
1.软件安装
本次通过sendmail和mailx工具来进行邮件发送,其中sendmail是邮件服务器,mailx是客户端,CentOS 7默认没有安装该工具,需要手动安装。
1.如果服务器已经连接外网,或者可以通过yum proxy的方式连接外网,直接通过yum的方式进行安装:
2.如果服务器无法连接外网,需要通过rpm的方式进行安装:
注意:mailx安装时需要安装依赖,包括cyrus-sasl-2.1.26-24.el7_9.x86_64.rpm、hesiod-3.2.1-3.el7.x86_64.rpm、procmail-3.22-36.el7_4.1.x86_64.rpm。
2.外部代理
一般生产环境大多部署在内网服务器上,不能直接连接外网,而在发送邮件时需要向外网发送,所以需要连接外网,这里有两种方式:
1.一是在外网服务器(DMZ区)通过Nginx代理邮件服务器地址,内网服务器通过调用代理端口实现邮件服务器的调用;
2.二是在外网服务器(DMZ区)部署邮件工具,通过DMZ服务器调用内网服务器脚本实现服务监控。
由于跨服务器调用脚本监控服务比较麻烦,所以推荐采用第一种方式,并且Nginx只代理邮件服务器,也能避免内网服务器被攻击的风险。
3.配置主机
安装邮件工具后,在服务器上直接配置发件邮箱信息,修改配置文件:
测试验证
邮件发件服务器完成后就可以通过mail命令进行邮件发送测试,可以直接在服务器上执行mail命令发送邮件。但对于监控功能而言,为了便于后续排查,可以将监控信息写入日志文件,并基于日志文件进行邮件发送。
1.邮件脚本
直接扩展一个K8S节点监控的脚本,通过脚本进行邮件的发送测试,监控脚本:
1.通过kubectl命令监控K8S集群node的状态,如果状态异常则写入node-send-mail.txt文件;
2.脚本执行的最后根据node-send-mail.txt的内容判断是否发送邮件,如果文件非空则通过mail发送邮件。
2.发送测试
1.调用shell脚本,进行邮件发送测试:
2.node-send-mail.txt文件内记录了错误信息:
3.检查邮件,已经成功接收到了对应的报警邮件:
3.定时任务
1.配置crontab定时任务,定时进行资源监控,并发送报警邮件:
2.每间隔10分钟执行一次脚本,进行邮件报警。
注意事项
在部署mail工具进行资源的过程中,由于部署架构、网络环境、监控脚本不同等原因,配置过程也会有所区别。
1.命令相关
Mail工具常用命令如下:
1.用户地址为接收人邮箱地址,可以配置多个,用“,”分隔;
2.邮件正文可以是文本,也可以是一个文本文件,在发送邮件时会将文本内容作为邮件正文发送;
3.另外如果单独执行mail命令,可以查询接收的邮件:
2.SSL证书
在实际项目中,很多时间会采用企业邮箱,而企业邮箱一般会采用SSL的方式来提高安全性。对于启用SSL的邮箱,需要下载配置SSL证书文件,以163邮箱为例:
1.创建证书目录:
2.获取邮件服务器证书:
:SSL证书不能直接进行copy操作,如果服务器无法联网,可以和邮件的外部代理一样,通过DMZ区的Nginx代理,将smtp.163.com:465代理成内网地址,再将上述命令的smtp.163.com:465换成代理后的地址和端口,从而实现证书下载。
3.添加执行权限:
4.添加SSL证书到数据库:
5.添加global证书到数据库:
6.指定受信任证书,防报错:
7.列出安全数据库中的证书:
8.修改邮箱配置:
3.系统邮件
对于系统接收到的邮件可以通过mail命令进行查看
另外邮件也会保存在/var/spool/mail/root目录下,可以直接进行访问查看。
分析总结
对于平台来说,,大多数平台都会有对应的功能,但是在实际项目中,由于项目环境、网络、开发等内容的要求,可能平台的内容未必能全部满足实际需要,所以有时也需要直接通过服务器进行功能的补充。
1.系统维护
目前公司产品均采用K8S容器化的部署方式,由于K8S集群以及网络、组件的复杂性,所以对于项目实施和运维人员来说,。
2.平台功能
对于平台化的产品,必要的监控是保证产品稳定运行的基础,所以在平台开发的过程中,需要加强对平台运维监控能力的提升,从,才能有效支撑项目的实施与交付。
3.项目支持
在实际项目实施的过程中,由于等多方面的要求,往往会出现需要定制化的内容,并且有的定制化的内容是不适合直接移植到产品中,对于这些项目级的内容,在平台功能无法完全满足的情况下,往往会需要通过服务器或外部工具结合来处理。
项目和产品是相辅相成的,产品的研发为项目提供支持,保证项目的实施交付,而在项目过程中,项目中遇到的问题、场景等又可以反馈给产品进行优化完善。所以对于项目实施和产品研发人员来说,需要相互了解对方的内容,实施人员了解产品功能的使用场景,能够根据场景匹配对应的业务,提高实施的效果,研发人员针对实际业务场景进行开发,保证开发的内容可以有效支撑项目业务,最终才能相互支持、相互成就。
本文由@数通畅联原创,欢迎转发,仅供学习交流使用,引用请注明出处!谢谢~