独学而无友,则孤陋而寡闻 。面试这种东西真的挺能学到东西,今天在上海兜了一个大圈 ,和某企业的面试官聊到自动化的一些东西的时候,确实对于自动化理念性的东西更好更深入的学了一课。闲言少叙,还原面试中关于监控自动化的两个问题 。

问题汇总

问题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 能够实现此功能,配置如下:

  1. zabbix web page — configuration — actions
  2. 设置 Period (seconds)
  3. 开启 Enable escalations
  4. 在Action operations 设置step

利用from和to的值以及Period控制报警的周期, Send message to 选择收件人, Send only to 选择发送的类型,最后save保存。

具体可以参看官方文档,在zabbix 1.8的版本里就已经有该功能。

nagios下同样有类似功能,定义主机的逐次通知

 1# vim ${NAGIOS_HOME}/etc/servers/host-escalation.cfg
 2-------------------------------------------------------------------
 3define hostescalation{
 4        hostgroup_name        linux-servers
 5        first_notification    2
 6        last_notification    3
 7        notification_interval    1440
 8        contact_groups        361way1
 9}
10define hostescalation{
11        hostgroup_name        linux-servers
12        first_notification    4
13        last_notification    0
14        notification_interval    0
15        contact_groups        admins
16}

定义服务的逐次通知

 1# vi ${NAGIOS_HOME}/etc/servers/service-escalation.cfg
 2-------------------------------------------------------------------
 3define serviceescalation{
 4        servicegroup_name    host-basic,host-info,host-perf,oracle-basic,oracle-self,mysql-basic
 5        first_notification    3  ;自第3条消息起,发送给本组员
 6        last_notification    5   ;0表示无限制通知,5表示只发送到第5条,此后的消息仍发送给前一组员。
 7        notification_interval    480  ;配置每条通知的时间间隔是480分钟,配置为0的话不表示不通知
 8        contact_groups        admins
 9}
10define serviceescalation{
11        servicegroup_name    host-basic,host-info,host-perf,oracle-basic,oracle-self,mysql-basic
12        first_notification    6
13        last_notification    7
14        notification_interval    1440
15        contact_groups        admins
16}
17define serviceescalation{
18        servicegroup_name    host-basic,host-info,host-perf,oracle-basic,oracle-self,mysql-basic
19        first_notification    8
20        last_notification    0
21        notification_interval    0
22        contact_groups        admins
23        escalation_options         c   ;紧急的消息,其他消息仍发送给上一组员
24}

具体也可以参看官方文档给出的web页面配置的文件法。

问题2

该问题,我最早想到的方法是通过通过告警的时候将相关信息也一并发送给通知人,显然这种方法即不合理又傻瓜,甚至还有sms bomb的感觉 。后来在回来的公车上想到之前在运维趋势上看到过的taobao的作法是robot机器人训练。原理大致是将很多即时查询性的东西做成API和监控系统进行整合,同时再和xmpp(甚至是目前的微信)进行整合 。需要获取当前资源信息状况时,通过spark、skype、weixin等client post一个数据请求过去 ,监控平台向主机搜集完数据后再返回给client 。

电脑上没有安装好的绘图工具,用word画了个简图如下:

auto-monitor

关于类似的实现在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等进行结合相同较容易 。