HMonitor是一个用于从Zabbix处接收告警后,进行告警管理、告警自动化处理等功能的一个工具平台。目前提供的功能包括:
- 查看告警事件。使用者可以在“事件查看”标签下查看自己订阅的告警以及所有告警,并且了解有哪些告警需要自己处理
- 告警通知的订阅管理。在“订阅管理”标签下使用者可以订阅告警,对告警进行屏蔽,并查看一段时间内的告警情况
- 告警的自动修复。在“自动修复”标签下使用者可以查看目前提供的自动修复脚本,并且可以将告警事件和对应的修复脚本绑定,绑定后后续的告警会首先由修复脚本尝试修复,修复失败后才会告警。同时在该标签页下可以查看修复的成功率以及修复失败的原因。
- 在Zabbix处配置script类型的媒体类型,脚本设置为HMonitor源码目录下的scripts/zabbix_hm.py
- 配置trigger,trigger名需要以HM-打头
- 配置相应的接收告警用户,用户的send to配置为HMonitor的地址
- 在某台主机安装MySQL
- 执行HMonitor源码目录下的db.sql建立对应的表
- 执行hmonitor.py即可运行HMonitor/AutoFixer
- 执行hmonitor_agent.py即可运行HMonitor Agent
- 执行scripts/zabbix_hm_trigger_sync.py可以同步zabbix的trigger
HMonitor/AutoFixer属于无状态服务,如果集群中告警或需要自动处理的主机较多,可以启动多个HMonitor/AutoFixer并将他们放在如nginx之类的LB后面。
点击订阅告警,即可查看所有可以被订阅的告警。如果对某个告警赶兴趣则可以在操作栏下点击订阅告警,如果不想再次接收这个告警则可以点击取消订阅。
订阅告警后,可以在我的订阅下面查看自己订阅的告警。不同级别的告警被不同颜色标记。
如果某端时间某个主机在做类似扩容的操作,期间会触发很多IO wait的告警,则可以在这段时间内屏蔽这些告警。屏蔽告警可以在告警屏蔽中进行。
另外,可以在告警统计下查看最近一段时间的告警发送情况。
在订阅了告警后,就可以看到自己订阅的告警产生的事件了。这个在我的事件中可以查看。
如果想查看所有事件,可以在所有事件中查看。
在HMonitor中,可以预先上传一些自动修复的脚本(这个下面会专门讲到)。上传后可以在修复脚本中查看这些脚本。
告警项需要和修复脚本关联后,相应的告警才能被脚本自动处理。关联操作可以在绑定关系中进行。
可以在修复统计中查看修复情况。
所有的告警自动化处理的脚本都是Python格式的,在HMonitor启动的时候,会的去hmonitor/autofix/scripts中加载所有的.py文件,文件名既是自动修复脚本名。下面是一个样例文件。
# -*- coding: utf-8 -*-
from hmonitor.autofix.scripts import AutoFixBase
class JustShowEventInfo(AutoFixBase):
def do_fix(self, trigger_name, hostname, executor, event, *args, **kwargs):
raise Exception("ERROR TEST")
def get_author(self):
return "Qin TianHuan"
def get_version(self):
return "1"
def get_description(self):
return u"测试用脚本"
def get_create_date(self):
return "2015-06-30 09:00:00"
大部分method的含义根据其名称就能明白。真正会被调用执行自动修复的method为do_fix。其参数说明如下:
- trigger_name:告警项名称
- hostname:发生告警的主机名
- executor:一个HMonitor允许的可以执行远程调用的对象。下面会说到
- event:告警的其它信息,一般不会用到
当修复脚本被调用的时候,do_fix就会的被调用,一般只需要trigger_name和hostname就能明白什么主机上出了什么问题,因此这是两个最常会被用到的参数。
由于大部分操作都需要去故障主机执行一些命令,因此HMonitor提供了executor,目前的executor只是SSH。比如我想在远端主机执行一个过滤文件的操作,则代码可以如下:
ret, result = executor.execute("ls -l | grep 'helloworld'")
注意,executor执行的命令是发生在产生告警的主机上的。
由于远程执行命令存在较多的安全隐患,所以根据实际情况可以选择不同的executor类型。如果要实现一个新的executor类型,则可以仿造hmonitor/utils/executor/ssh.py进行开发。实现基类的方法即可。实际使用的时候,配置文件中的”executor_driver“改成新实现的executor类型即可。无需改动其它已有代码。
对于自动修复脚本,如果一切执行顺利,则do_fix直接返回即可。如果修复过程中出现了意外,比如do_fix当前的逻辑无法修复某个问题,则直接抛出异常即可。比如上面的样例程序,其do_fix直接抛出了异常,因此HMonitor会捕获这个异常,知道自动修复失败了,然后告警会发给相应的告警接收人,由接收人进行处理。异常信息中建议写明原因,之后可以在”修复统计“页面看到失败的原因。