SELECT ll.UF
,ll.unidade AS metric
,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) = 0,3,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) = 1,3,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) > 0 AND AVG(ll.degra) < 1,3,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) = 0,0,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) = 1,1,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) > 0 AND AVG(ll.degra) < 1,1,if(AVG(ll.degra) = 0 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,if(AVG(ll.degra) = 1 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,if(AVG(ll.degra) > 0 AND AVG(ll.degra) < 1 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,3))))))))) AS value
FROM
(
SELECT hh.*
,if(hh.falha=1,0,1) AS ONLINE
,if(hh.falha=2,1,0) AS degra
FROM
(
SELECT dfd1.*
,SUM(if(dfd2.name = 'Perda de Pacote' OR dfd2.name = 'Tempo de resposta de ping ICMP alto',2,if(dfd2.name = 'ICMP Ping Indisponível',1,0))) AS falha
FROM
(
SELECT AT1.*
,AT2.itemid
FROM
(
SELECT hb.*
FROM
(
SELECT HOST
,LEFT(HOST,2) AS UF
,SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',2),'_',-1) AS Operadora
,SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1) AS unidade
,SUBSTRING_INDEX(HOST,'_',-1) AS tipo
,if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'HS.' ,
'hospital',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'VI.' ,
'vidaeimagem',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),7) = 'HAPCLI.' ,
'hapclinica',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'PA.' ,
'prontoatendimento',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'CD.' ,
'centrodedistribuicao',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),8) = 'MEDPREV.' ,
'medprev',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'LAB.' ,
'laboratorio',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'ADM.' ,
'administrativo',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'AMB.' ,
'ambulatorio','outros' ) ) ) ) ) ) ) ) ) AS modalidade
,hostid
FROM hosts
WHERE STATUS = 0
) AS hb
LEFT JOIN hosts_groups AS idgr
ON hb.hostid = idgr.hostid
WHERE idgr.groupid = 15
) AS AT1
LEFT JOIN items AS AT2
ON AT1.hostid = AT2.hostid
) AS dfd1
LEFT JOIN
(
SELECT gn2.itemid
,gn1.name
FROM
(
SELECT a1.*
FROM events AS a1
LEFT JOIN event_recovery AS a2
ON a1.eventid = a2.eventid
WHERE a2.r_eventid IS NULL
AND a1.value = 1
) AS gn1
LEFT JOIN functions AS gn2
ON gn1.objectid = gn2.triggerid
WHERE gn2.itemid IS NOT NULL
) AS dfd2
ON dfd1.itemid = dfd2.itemid
GROUP BY dfd1.host
) AS hh
) AS ll
GROUP BY ll.unidade
ORDER BY ll.UF ASC
,VALUE desc
Я смог открыть базу данных Zabbix и запустить запросы, которые мне нужны, но запрос занял около 15 секунд и потреблял много обработки (я использовал много внутреннего соединения между таблицами банков). /> < /p>
Я пытаюсь создать мониторинг панели панели для моей пользовательской сети, та, которая была реализована в Zabbix, не соответствует моим требованиям.
[code]SELECT ll.UF ,ll.unidade AS metric ,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) = 0,3,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) = 1,3,if(AVG(ll.ONLINE) = 0 AND AVG(ll.degra) > 0 AND AVG(ll.degra) < 1,3,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) = 0,0,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) = 1,1,if(AVG(ll.ONLINE) = 1 AND AVG(ll.degra) > 0 AND AVG(ll.degra) < 1,1,if(AVG(ll.degra) = 0 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,if(AVG(ll.degra) = 1 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,if(AVG(ll.degra) > 0 AND AVG(ll.degra) < 1 AND AVG(ll.ONLINE) > 0 AND AVG(ll.ONLINE) < 1,2,3))))))))) AS value FROM ( SELECT hh.* ,if(hh.falha=1,0,1) AS ONLINE ,if(hh.falha=2,1,0) AS degra FROM ( SELECT dfd1.* ,SUM(if(dfd2.name = 'Perda de Pacote' OR dfd2.name = 'Tempo de resposta de ping ICMP alto',2,if(dfd2.name = 'ICMP Ping Indisponível',1,0))) AS falha FROM ( SELECT AT1.* ,AT2.itemid FROM ( SELECT hb.* FROM ( SELECT HOST ,LEFT(HOST,2) AS UF ,SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',2),'_',-1) AS Operadora ,SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1) AS unidade ,SUBSTRING_INDEX(HOST,'_',-1) AS tipo ,if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'HS.' , 'hospital',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'VI.' , 'vidaeimagem',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),7) = 'HAPCLI.' , 'hapclinica',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'PA.' , 'prontoatendimento',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),3) = 'CD.' , 'centrodedistribuicao',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),8) = 'MEDPREV.' , 'medprev',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'LAB.' , 'laboratorio',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'ADM.' , 'administrativo',if( LEFT( SUBSTRING_INDEX(SUBSTRING_INDEX(HOST,'_',-2),'_',1),4) = 'AMB.' , 'ambulatorio','outros' ) ) ) ) ) ) ) ) ) AS modalidade ,hostid FROM hosts WHERE STATUS = 0 ) AS hb LEFT JOIN hosts_groups AS idgr ON hb.hostid = idgr.hostid WHERE idgr.groupid = 15 ) AS AT1 LEFT JOIN items AS AT2 ON AT1.hostid = AT2.hostid ) AS dfd1 LEFT JOIN ( SELECT gn2.itemid ,gn1.name FROM ( SELECT a1.* FROM events AS a1 LEFT JOIN event_recovery AS a2 ON a1.eventid = a2.eventid WHERE a2.r_eventid IS NULL AND a1.value = 1 ) AS gn1 LEFT JOIN functions AS gn2 ON gn1.objectid = gn2.triggerid WHERE gn2.itemid IS NOT NULL ) AS dfd2 ON dfd1.itemid = dfd2.itemid GROUP BY dfd1.host ) AS hh ) AS ll GROUP BY ll.unidade ORDER BY ll.UF ASC ,VALUE desc [/code] Я смог открыть базу данных Zabbix и запустить запросы, которые мне нужны, но запрос занял около 15 секунд и потреблял много обработки (я использовал много внутреннего соединения между таблицами банков). /> < /p> [code]CREATE TABLE `hosts` ( `hostid` BIGINT(20) UNSIGNED NOT NULL, `proxy_hostid` BIGINT(20) UNSIGNED NULL DEFAULT NULL, `host` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'utf8_bin', `status` INT(11) NOT NULL DEFAULT '0', `name` VARCHAR(128) NOT NULL DEFAULT '' COLLATE 'utf8_bin', `flags` INT(11) NOT NULL DEFAULT '0', `templateid` BIGINT(20) UNSIGNED NULL DEFAULT NULL, `description` TEXT NOT NULL COLLATE 'utf8_bin', `proxy_address` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_bin', `auto_compress` INT(11) NOT NULL DEFAULT '1', `discover` INT(11) NOT NULL DEFAULT '0', PRIMARY KEY (`hostid`) USING BTREE, INDEX `hosts_1` (`host`) USING BTREE, INDEX `hosts_2` (`status`) USING BTREE, INDEX `hosts_3` (`proxy_hostid`) USING BTREE, INDEX `hosts_4` (`name`) USING BTREE, INDEX `c_hosts_3` (`templateid`) USING BTREE, CONSTRAINT `c_hosts_1` FOREIGN KEY (`proxy_hostid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT `c_hosts_3` FOREIGN KEY (`templateid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE CASCADE ) COLLATE='utf8_bin' ENGINE=InnoDB ; < /code> Таблица связывания групп с именем хоста < /p> CREATE TABLE `hosts_groups` ( `hostgroupid` BIGINT(20) UNSIGNED NOT NULL, `hostid` BIGINT(20) UNSIGNED NOT NULL, `groupid` BIGINT(20) UNSIGNED NOT NULL, PRIMARY KEY (`hostgroupid`) USING BTREE, UNIQUE INDEX `hosts_groups_1` (`hostid`, `groupid`) USING BTREE, INDEX `hosts_groups_2` (`groupid`) USING BTREE, CONSTRAINT `c_hosts_groups_1` FOREIGN KEY (`hostid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE CASCADE, CONSTRAINT `c_hosts_groups_2` FOREIGN KEY (`groupid`) REFERENCES `zabbix`.`hstgrp` (`groupid`) ON UPDATE RESTRICT ON DELETE CASCADE ) COLLATE='utf8_bin' ENGINE=InnoDB ; < /code> Таблица, которая ссылается на элементы, чтобы запустить < /p> CREATE TABLE `items` ( `itemid` BIGINT(20) UNSIGNED NOT NULL, `hostid` BIGINT(20) UNSIGNED NOT NULL, `name` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_bin', PRIMARY KEY (`itemid`) USING BTREE, INDEX `items_1` (`hostid`, `key_`(255)) USING BTREE, INDEX `items_3` (`status`) USING BTREE, CONSTRAINT `c_items_1` FOREIGN KEY (`hostid`) REFERENCES `zabbix`.`hosts` (`hostid`) ON UPDATE RESTRICT ON DELETE CASCADE ) COLLATE='utf8_bin' ENGINE=InnoDB ; < /code> Таблица, которая связывает Event_recovery с событием < /p> CREATE TABLE `event_recovery` ( `eventid` BIGINT(20) UNSIGNED NOT NULL, `r_eventid` BIGINT(20) UNSIGNED NOT NULL, `c_eventid` BIGINT(20) UNSIGNED NULL DEFAULT NULL, `correlationid` BIGINT(20) UNSIGNED NULL DEFAULT NULL, `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (`eventid`) USING BTREE, INDEX `event_recovery_1` (`r_eventid`) USING BTREE, INDEX `event_recovery_2` (`c_eventid`) USING BTREE, CONSTRAINT `c_event_recovery_1` FOREIGN KEY (`eventid`) REFERENCES `zabbix`.`events` (`eventid`) ON UPDATE RESTRICT ON DELETE CASCADE, CONSTRAINT `c_event_recovery_2` FOREIGN KEY (`r_eventid`) REFERENCES `zabbix`.`events` (`eventid`) ON UPDATE RESTRICT ON DELETE CASCADE, CONSTRAINT `c_event_recovery_3` FOREIGN KEY (`c_eventid`) REFERENCES `zabbix`.`events` (`eventid`) ON UPDATE RESTRICT ON DELETE CASCADE ) COLLATE='utf8_bin' ENGINE=InnoDB ; < /code> События < /p> CREATE TABLE `events` ( `eventid` BIGINT(20) UNSIGNED NOT NULL, `source` INT(11) NOT NULL DEFAULT '0', `object` INT(11) NOT NULL DEFAULT '0', `objectid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0', `clock` INT(11) NOT NULL DEFAULT '0', `value` INT(11) NOT NULL DEFAULT '0', `acknowledged` INT(11) NOT NULL DEFAULT '0', `ns` INT(11) NOT NULL DEFAULT '0', `name` VARCHAR(2048) NOT NULL DEFAULT '' COLLATE 'utf8_bin', `severity` INT(11) NOT NULL DEFAULT '0', PRIMARY KEY (`eventid`) USING BTREE, INDEX `events_1` (`source`, `object`, `objectid`, `clock`) USING BTREE, INDEX `events_2` (`source`, `object`, `clock`) USING BTREE ) COLLATE='utf8_bin' ENGINE=InnoDB ; < /code> Функции таблицы < /p> CREATE TABLE `functions` ( `functionid` BIGINT(20) UNSIGNED NOT NULL, `itemid` BIGINT(20) UNSIGNED NOT NULL, `triggerid` BIGINT(20) UNSIGNED NOT NULL, `name` VARCHAR(12) NOT NULL DEFAULT '' COLLATE 'utf8_bin', `parameter` VARCHAR(255) NOT NULL DEFAULT '0' COLLATE 'utf8_bin', PRIMARY KEY (`functionid`) USING BTREE, INDEX `functions_1` (`triggerid`) USING BTREE, INDEX `functions_2` (`itemid`, `name`, `parameter`) USING BTREE, CONSTRAINT `c_functions_1` FOREIGN KEY (`itemid`) REFERENCES `zabbix`.`items` (`itemid`) ON UPDATE RESTRICT ON DELETE CASCADE, CONSTRAINT `c_functions_2` FOREIGN KEY (`triggerid`) REFERENCES `zabbix`.`triggers` (`triggerid`) ON UPDATE RESTRICT ON DELETE CASCADE ) COLLATE='utf8_bin' ENGINE=I < /code> Поэтому я обнаружил, что если я выполнял запросы отдельно и соберите таблицы через PHP, который является языком, который я использую для создания панели панели, он гораздо более эффективен. Однако я работаю над корреляцией двух запросов в один, используя php. < /P> Используя PHP, я делаю требование ниже: < /p>