今天聊一下,关于zabbix二次开发的一些事情。
有两种想法用来提高zabbix的报警告警的速度,试想下,在一个互联网公司那么多的业务,每个业务人员大约都可以收到500多封的邮件,这是最少的了。一些互联网公司邮件用的不是linux方案的postfix,而是微软的exchange,毕竟这个oa集成方便。这东西速度确实堪忧,我们这边smtp连过去,然后发邮件,一般用时在3.5s左右。zabbix对于每次报警都是fork一个进程,这开销有点大了。。。所以我们用zabbix来模拟zabbix http报警接口方案,我们把报警耗时间的动作扔给报警平台处理,我这边就简单的http post数据。
第一个是:
从数据库里面取出来,触发报警的时候,不要选择报警方式,就让他把结果给入库。我们起一个进程,专门从库里面取数据,然后告警。
mysql> mysql> desc alerts; +-------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+---------+-------+ | alertid | bigint(20) unsigned | NO | PRI | NULL | | | actionid | bigint(20) unsigned | NO | MUL | NULL | | | eventid | bigint(20) unsigned | NO | MUL | NULL | | | userid | bigint(20) unsigned | YES | MUL | NULL | | | clock | int(11) | NO | MUL | 0 | | | mediatypeid | bigint(20) unsigned | YES | MUL | NULL | | | sendto | varchar(100) | NO | | | | | subject | varchar(255) | NO | | | | | message | text | NO | | NULL | | | status | int(11) | NO | MUL | 0 | | | retries | int(11) | NO | | 0 | | | error | varchar(128) | NO | | | | | nextcheck | int(11) | NO | | 0 | | | esc_step | int(11) | NO | | 0 | | | alerttype | int(11) | NO | | 0 | | +-------------+---------------------+------+-----+---------+-------+ 15 rows in set (0.00 sec) mysql> mysql> desc media; +-------------+---------------------+------+-----+-----------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+-----------------+-------+ | mediaid | bigint(20) unsigned | NO | PRI | NULL | | | userid | bigint(20) unsigned | NO | MUL | NULL | | | mediatypeid | bigint(20) unsigned | NO | MUL | NULL | | | sendto | varchar(100) | NO | | | | | active | int(11) | NO | | 0 | | | severity | int(11) | NO | | 63 | | | period | varchar(100) | NO | | 1-7,00:00-24:00 | | +-------------+---------------------+------+-----+-----------------+-------+ 7 rows in set (0.00 sec) mysql>
还有一种比较干脆,写一个脚本,他主要是把系统给的三个参数,传给python写的http api上,然后让报警中心来进行告警。 这样就可以为zabbix提供get post http报警接口了。