有很多企业用户会使用 Zabbix 做监控,然后想要使用 DataEase 获取 Zabbix 的仪表板数据进行分析,Zabbix 使用的是 MySQL 数据库,但是由于很多用户并不了解 Zabbix 的数据库表结构,想要获取数据就变得很困难。

为了能给大家提供一些帮助,我们研究了一下 Zabbix 数据库的表结构,整理了一些获取 Zabbix 仪表板数据的 SQL 语句,你可以直接使用这些 SQL 语句在 DataEase 中创建 SQL 数据集。

zabbix.png

1 主机数量

select COUNT(*) from hosts WHERE flags = '0';

已启用/已禁用/模板:

select `status`,
(CASE status
WHEN  '0' THEN
'已启用'
WHEN '1' THEN
'已禁用'
WHEN '2' THEN
'未知'
ELSE
'模板'
END
) 主机状态,
count(status) 主机数量 
from hosts
WHERE flags = '0'
GROUP BY status;

2 监控项数量

select COUNT(*) from items WHERE flags='0' and hostid in (
 select hostid from `hosts` WHERE status='0' and flags = '0'
);

已启用/已禁用/不支持:

select state,
(CASE state
WHEN  '0' THEN
'已启用'
WHEN '1' THEN
'不支持'
ELSE
'未知'
END
) 监控项状态,
COUNT(state) as '监控项数量'
from items 
WHERE flags='0' and hostid in (
select hostid from `hosts` WHERE status='0' and flags = '0'
)
GROUP BY state;

3 触发器数量(已启用/已禁用 [问题/正常])

-- 已启用数量 
select COUNT(*) from triggers WHERE triggerid in (select objectid from events);

问题/正常:

select `value`,
(CASE `value`
WHEN  '1' THEN
'问题'
ELSE
'正常'
END
) 状态,
COUNT(`value`) as '触发器数量'
from `triggers` WHERE triggerid in (select objectid from `events`) 
GROUP BY `value`;

4 用户数(线上)

select COUNT(*) from users;

登陆过的有效用户数:

select COUNT(*) from users WHERE userid in (select userid from sessions);