问题汇总
问题1、逐渐告警,问题出现时,第一时候通知XX人,多长时间没解决,通知XXX人
问题2、问题主机出现告警时,想要获取其他相关监控值的情况,如load、cpu等,同时也可能会需要获取到其他会受影响主机的情况。
解决方法
问题1
很多开源的监控产品里都有escalations功能,如常见的zabbix 、nagios (这个确实是没关注到过的知识点)
zabbix根据问题持续的时间发送给不同的人 来处理的配置方法:
例如:
代码如下 | 复制代码 |
1 – 5 min mail to user_a 6 – 10 min mail to user_b 11 -15 sms to phone_a 16 -20 sms to phone_b |
查了一些zabbix的资料发现escalations 能够实现此功能,配置如下:
zabbix web page — configuration — actions
设置 Period (seconds)
开启 Enable escalations
在Action operations 设置step
利用from和to的值以及Period控制报警的周期, Send message to 选择收件人, Send only to 选择发送的类型,最后save保存。
具体可以参看官方文档,在zabbix 1.8的版本里就已经有该功能。
nagios下同样有类似功能
定义主机的逐次通知
代码如下 | 复制代码 |
# vim ${NAGIOS_HOME}/etc/servers/host-escalation.cfg ------------------------------------------------------------------- define hostescalation{ hostgroup_name linux-servers first_notification 2 last_notification 3 notification_interval 1440 contact_groups 361way1 } define hostescalation{ hostgroup_name linux-servers first_notification 4 last_notification 0 notification_interval 0 contact_groups admins } |
定义服务的逐次通知
代码如下 | 复制代码 |
# vi ${NAGIOS_HOME}/etc/servers/service-escalation.cfg ------------------------------------------------------------------- define serviceescalation{ servicegroup_name host-basic,host-info,host-perf,oracle-basic,oracle-self,mysql-basic first_notification 3 ;自第3条消息起,发送给本组员 last_notification 5 ;0表示无限制通知,5表示只发送到第5条,此后的消息仍发送给前一组员。 notification_interval 480 ;配置每条通知的时间间隔是480分钟,配置为0的话不表示不通知 contact_groups admins } define serviceescalation{ servicegroup_name host-basic,host-info,host-perf,oracle-basic,oracle-self,mysql-basic first_notification 6 last_notification 7 notification_interval 1440 contact_groups admins } define serviceescalation{ servicegroup_name host-basic,host-info,host-perf,oracle-basic,oracle-self,mysql-basic first_notification 8 last_notification 0 notification_interval 0 contact_groups admins escalation_options c ;紧急的消息,其他消息仍发送给上一组员 } |
具体也可以参看官方文档给出的web页面配置的文件法。
问题2
该问题,我最早想到的方法是通过通过告警的时候将相关信息也一并发送给通知人,显然这种方法即不合理又傻瓜,甚至还有sms bomb的感觉 。后来在回来的公车上想到之前在运维趋势上看到过的taobao的作法是robot机器人训练。原理大致是将很多即时查询性的东西做成API和监控系统进行整合,同时再和xmpp(甚至是目前的微信)进行整合 。需要获取当前资源信息状况时,通过spark、skype、weixin等client post一个数据请求过去 ,监控平台向主机搜集完数据后再返回给client 。
电脑上没有安装好的绘图工具,用word画了个简图如下:
关于类似的实现在github上有一个skype的sevabot的项目 ,不过没有和监控平台进行结合 。关于和client的交互有三种设想:
1、像zabbix、nagios都提供了jabber协基client的通知,这个做过二次开发后可以实现上面的post请求,而国内基于jabber协议实现的client应用有陌陌和新浪微博,显然这两个都不大适合 ;
2、sms的方式,需要实现短信接口,实现想对也较麻烦 ;
3、和weixin的结合,由于winxin官方提供了相应的开发API ,而且网上相对应的开发教程也较多,所认这个实现起来应该是最好的。
接口完成后实现的效果如发送A-system,则返回A主机的所有cpu、内存等相关的系统信息 ;发送A-tomcat则返回A主机上tomcat相应的信息 。关于weixin的整合,个人认为和zabbix、nagios结合的难度相对大此,和saltstack等进行结合相同较容易 。