Mysql NAgios Log: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
м (Защищена страница «Mysql NAgios Log» [edit=sysop:move=sysop])
 
(не показаны 32 промежуточные версии этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Linux]]
  +
[[Категория:Nagios]]
  +
[[Категория:MySQL]]
  +
[[Категория:GeneralSQL]]
 
=Анализ логов нагиоса=
 
=Анализ логов нагиоса=
  +
==Загрузить логи в Mysql==
  +
<PRE>
  +
CREATE TABLE `nm` (
  +
`date` int(10) DEFAULT NULL,
  +
`host_name` varchar(128) DEFAULT NULL,
  +
`check_name` varchar(128) DEFAULT NULL,
  +
`check_status` varchar(128) DEFAULT NULL,
  +
`f1` varchar(128) DEFAULT NULL,
  +
`f2` varchar(128) DEFAULT NULL,
  +
`f3` varchar(128) DEFAULT NULL,
  +
`f4` varchar(128) DEFAULT NULL,
  +
`f5` varchar(128) DEFAULT NULL,
  +
KEY `host_name` (`host_name`),
  +
KEY `check_name` (`check_name`),
  +
KEY `check_status` (`check_status`),
  +
KEY `date` (`date`)
  +
) ENGINE=MyISAM DEFAULT CHARSET=latin1
  +
</PRE>
  +
  +
<PRE>
  +
mkfifo mysql.fifo
  +
tail -f ./mysql.fifo | mysql mydatabase -uUSER -pPASSWORD
  +
</PRE>
  +
  +
<PRE>
  +
tail spd_hy-netrac-p1.core.sdn.telia.se.log | grep -v ^$ | sed s/"\t"/"@@"/g | awk -F"@@" '{print "INSERT INTO nm VALUES (\"" $1"\", \""$2"\",\""$3"\",\""$4"\",\""$5"\",\""$6"\",\""$7"\",\""$8"\",\""$9"\");" }'
  +
</PRE>
  +
  +
==Удалить лишние записи==
  +
Очень просто - удалить запись если она "такая же" как предыдущяя
  +
<PRE>
  +
DROP PROCEDURE GetAllerts;
  +
delimiter //
  +
CREATE PROCEDURE GetAllerts()
  +
BEGIN
  +
DECLARE done INT DEFAULT 0;
  +
DECLARE current_host_name VARCHAR(255);
  +
DECLARE current_check_name VARCHAR(255);
  +
DECLARE current_check_status VARCHAR(255);
  +
DECLARE prev_host_name VARCHAR(255);
  +
DECLARE prev_check_name VARCHAR(255);
  +
DECLARE prev_check_status VARCHAR(255);
  +
DECLARE current_date1 INT(10);
  +
DECLARE prev_date INT(10);
  +
DECLARE cursor_alert CURSOR FOR SELECT date,host_name,check_name,check_status FROM nm ORDER BY host_name,check_name,date;
  +
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
  +
  +
SET prev_host_name = '';
  +
SET prev_check_name = '';
  +
SET prev_check_status = '';
  +
-- SELECT "This is my stored procedure";
  +
OPEN cursor_alert;
  +
FETCH cursor_alert INTO current_date1, current_host_name, current_check_name, current_check_status;
  +
WHILE done = 0 DO
  +
-- SELECT current_date1, current_host_name, current_check_name, current_check_status;
  +
-- SELECT prev_date, prev_host_name, prev_check_name, prev_check_status;
  +
IF ( (current_host_name = prev_host_name ) AND ( current_check_name = prev_check_name ) AND ( current_check_status = prev_check_status))
  +
THEN
  +
-- SELECT "DELETE FROM nm WHERE host_name=current_host_name AND check_status=current_check_status AND date=current_date1;";
  +
DELETE FROM nm WHERE host_name=current_host_name AND check_status=current_check_status AND date=current_date1;
  +
END IF;
  +
SET prev_host_name = current_host_name;
  +
SET prev_check_name = current_check_name;
  +
SET prev_check_status = current_check_status;
  +
  +
FETCH cursor_alert INTO current_date1, current_host_name, current_check_name, current_check_status;
  +
  +
END WHILE;
  +
CLOSE cursor_alert;
  +
END
  +
//
  +
delimiter ;
  +
  +
</PRE>

Текущая версия на 15:39, 28 сентября 2012

Анализ логов нагиоса

Загрузить логи в Mysql

 CREATE TABLE `nm` (
  `date` int(10) DEFAULT NULL,
  `host_name` varchar(128) DEFAULT NULL,
  `check_name` varchar(128) DEFAULT NULL,
  `check_status` varchar(128) DEFAULT NULL,
  `f1` varchar(128) DEFAULT NULL,
  `f2` varchar(128) DEFAULT NULL,
  `f3` varchar(128) DEFAULT NULL,
  `f4` varchar(128) DEFAULT NULL,
  `f5` varchar(128) DEFAULT NULL,
  KEY `host_name` (`host_name`),
  KEY `check_name` (`check_name`),
  KEY `check_status` (`check_status`),
  KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
mkfifo mysql.fifo
tail -f ./mysql.fifo | mysql mydatabase -uUSER -pPASSWORD
tail spd_hy-netrac-p1.core.sdn.telia.se.log  | grep -v ^$ | sed s/"\t"/"@@"/g | awk -F"@@" '{print "INSERT INTO nm VALUES (\"" $1"\", \""$2"\",\""$3"\",\""$4"\",\""$5"\",\""$6"\",\""$7"\",\""$8"\",\""$9"\");" }'

Удалить лишние записи

Очень просто - удалить запись если она "такая же" как предыдущяя

DROP PROCEDURE GetAllerts;
delimiter // 
CREATE PROCEDURE GetAllerts()
BEGIN 
    DECLARE done INT DEFAULT 0; 
    DECLARE current_host_name VARCHAR(255);
    DECLARE current_check_name VARCHAR(255);
    DECLARE current_check_status VARCHAR(255);
    DECLARE prev_host_name VARCHAR(255);
    DECLARE prev_check_name VARCHAR(255);
    DECLARE prev_check_status VARCHAR(255);
    DECLARE current_date1 INT(10);
    DECLARE prev_date INT(10);
    DECLARE cursor_alert CURSOR FOR  SELECT date,host_name,check_name,check_status FROM nm ORDER BY host_name,check_name,date;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 

    SET prev_host_name = '';
    SET prev_check_name = '';
    SET prev_check_status = '';
--    SELECT "This is my stored procedure";
    OPEN cursor_alert; 
    FETCH  cursor_alert INTO current_date1, current_host_name, current_check_name, current_check_status;
    WHILE done = 0 DO 
--          SELECT current_date1, current_host_name, current_check_name, current_check_status;
--          SELECT prev_date,     prev_host_name,    prev_check_name,    prev_check_status;
          IF ( (current_host_name = prev_host_name ) AND  ( current_check_name = prev_check_name ) AND  ( current_check_status = prev_check_status))
          THEN
--              SELECT "DELETE FROM nm WHERE host_name=current_host_name AND check_status=current_check_status  AND date=current_date1;";
              DELETE FROM nm WHERE host_name=current_host_name AND check_status=current_check_status  AND date=current_date1;
          END IF;
          SET prev_host_name = current_host_name;
          SET prev_check_name = current_check_name;
          SET prev_check_status = current_check_status;
          
          FETCH  cursor_alert INTO current_date1, current_host_name, current_check_name, current_check_status;
   
    END WHILE; 
    CLOSE cursor_alert; 
END 
// 
delimiter ;