背景:
1、公司已经对服务器加上了zabbix监控,后续将继续接入服务器进行监控
2、zabbix dashboard上问题太细,领导想做个汇总展示
3、zabbix接入服务器根据业务,由不同的同事负责
目标:
1、展示zabbix 现存问题的统计
2、按负责人分类展示zabbix 现存问题的统计
3、按问题严重性分类展示zabbix 现存问题的统计
探索:
1、对数据库进行厘清,理清楚各表之间的关系,关联字段等
2、接入数据库监控,进行zabbix可视化展示
准备:
1、数据库结构和关系
涉及的表很多,主要提一下
rights表关联主机和用户表rights.id=hstgrp.groupid,rights.groupid=usrgrp.usrgrpid
functions表关problem和items:functions.triggerid=problem.objectid
items关联主机items.hostid=hosts.hostid
problems表关联triggers表triggerid=problem.objectid
2、大致厘清之后,写sql。
这里使用创建视图的方式,这样zabbix 执行sql的时候需要敲入一大串代码
本想视图中加入负责人,但是查询有点问题,所以分成两大sql
a:问题汇总.sql (也可以将下面的多个负责人的数据进行相加,不过笔者偷懒,不再测试方法了)
包含所有负责人的,所以此此处没有负责人这个字段
CREATE VIEW `zabbix`.`problems_all` AS
SELECT DISTINCT
MIN(`t`.`datetime2`) AS `alert_time`,
`t`.`ip` AS `ip`,
`t`.`hostname` AS `hostname`,
GROUP_CONCAT(`t`.`groupname`
SEPARATOR ',') AS `groupname`,
`t`.`problem` AS `problem`,
`t`.`severity` AS `severity`
FROM
(SELECT
`a`.`name` AS `problem`,
`a`.`severity` AS `severity`,
FROM_UNIXTIME(`a`.`clock`) AS `datetime2`,
`a`.`objectid` AS `objectid`,
`b`.`itemid` AS `itemid`,
`c`.`hostid` AS `hostid`,
`d`.`ip` AS `ip`,
`e`.`name` AS `hostname`,
`h`.`name` AS `groupname`
FROM
(((((((`zabbix`.`problem` `a`
JOIN `zabbix`.`functions` `b`)
JOIN `zabbix`.`items` `c`)
JOIN `zabbix`.`interface` `d`)
JOIN `zabbix`.`hosts` `e`)
JOIN `zabbix`.`triggers` `f