Документация по ОС FreeBSD Четверг, 25.04.2024, 02:29
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Web Frontend для collectd [2012]
Продолжим наши изыскания с collectd. В прошлой статье мы уже настроили создание и обновление rrd баз с статистикой использования сетевых интерфейсов.  Теперь займемся web интерфейсом для визуализации данных.
 
Будем использовать тот же принцип, что и в cacti — динамическая генерация png изображений непосредственно php скриптом. Как и для любого более менее приличного приложения нам понадобится mysql сервер. Создадим таблицу collectd  следующим запросом:
 
CREATE TABLE `collectd` (
 
`id` int(11) NOT NULL AUTO_INCREMENT,
 `host` varchar(15) NOT NULL,
 `iface` varchar(15) NOT NULL,
 `descr` varchar(63) NOT NULL,
 `type` varchar(15) NOT NULL,
 `state` tinyint(1) NOT NULL DEFAULT '1',
 `order` int(11) NOT NULL,
 PRIMARY KEY (`id`)
 )  DEFAULT CHARSET=utf8;

Поля имеют следующий смысл:
  • host — имя сервера, можно мониторить сразу несколько, например WWW;
  • iface — имя сетевого интерфейса (em0, eth0 и т.д.);
  • descr — описание интерфейса, которое показывается над графиками
  • type — типа графика (octets, packets, errors) ;
  • state — состояние графика,  если 1, то отображение разрешено, если 0 — запрещено;
  • order — используется для определения порядка отображения. 
Далее создадим  в рабочей директорий сайта два файла.
 
index.php следующего содержания:
 
'; } ?>      
 
   </tr>
 </table>
 </body> 
 require('config.php');
 
if (isset($_GET['host'])) {
   $host = $_GET['host'];
 } else {
   $host = 'WWW';
 }
 ?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
   <meta http-equiv="content-style-type" content="text/css" />
   <meta name="generator" content="Billing" />
   <meta http-equiv="Pragma" content="no-cache" />
   <meta content="no-cache" http-equiv="no-cache" />
   <meta http-equiv="Cache-Control" content="no-cache" />
   <title>Collctd </title>
   <meta name="description" content="Collectd " />   
</head>
 <body>
 
 $result_ifaces = mysql_query("SELECT DISTINCT `iface` 
    FROM `collectd` WHERE `state`=1 AND `host`='{$host}' RDER BY `order`");
 $i = 1; 
$datas = array();
 while ($iface = mysql_fetch_array($result_ifaces)) {
     $ifaces[$i] = $iface['iface'];
     $result_name = mysql_query("SELECT `descr`,`type` 
        FROM `collectd` WHERE `state`=1  AND `host`='{$host}' AND `iface`='{$iface['iface']}'");    
     $j = 0;
     while ($data = mysql_fetch_array($result_name)) {
         $descrs[$i][$j] = $data['descr'];
         $types[$i][$j] = $data['type']; 
        $j++;       
    }
     $i++;
 }
 ?>
 <div align="center"> <h2>Monitoring </h2></div>
 <table border="0" style="width: 100%; text-align: center;">
   <tr>
 
     $iface = $ifaces[$i];
     $path = 'http://admin.local.net/collectd/'; 
 ?>  
      <td align="center">
         <h3>-==  ==-</h3>  
         
            $params = '?iface=' . $iface . '&type=' . $types[$i][$j] . '&host=' .  $host; 
            $imgUrl =  $path . 'graph.php' . $params;           
            $url = $path . 'detail.php?' . $params;
         ?>  
         <a href=""><img src="" alt="" /></a>        
         <hr size="2" color="black" />
         
       </td> 
     

и graph.php следующего содержания:
 
<!--?php <br ?--> if (isset($_GET['host'])) {
 $host = $_GET['host'];
 } else {
 $host = 'WWW';
 }
 if (isset($_GET['iface'])) {
 $iface = $_GET['iface'];
 } else {
 $iface = 'em0';
 }
 if (isset($_GET['ifname'])) {
 $ifname = $_GET['ifname'];
 } else {
 $ifname = 'em0';
 }
 if (isset($_GET['type'])) {
 $type = $_GET['type'];
 } else {
 $type = 'octets';
 }
 
$rrdDb = '/usr/local/var/db/collectd/' . $host . '/interface/if_' . $type . '-' . $iface . '.rrd';
 $title = implode(' ', array($host, $iface, $type));
 
switch ($type) {
 case 'octets': {
 $areaColor = '#00CF00';
 $lineColor = '#0000ff';
 $actionCdef = '8,*';
 break;
 }
 case 'packets': {
 $areaColor = '#FFF200';
 $lineColor = '#00234B';
 $actionCdef = '1,*';
 break;
 }
 case 'errors': {
 $areaColor = '#F51D30';
 $lineColor = '#00694A';
 $actionCdef = '1,*';
 break;
 }
 default: break;
 }
 
$cmd = '/usr/local/bin/rrdtool graph - '
 . " -e now -s 'end - 200 minutes' -S 10 --title=\"{$title}\""
 . ' --imgformat PNG --slope-mode -w 450 -h 140 --interlaced'
 . " DEF:aa=\"{$rrdDb}\":tx:MAX DEF:bb=\"{$rrdDb}\":rx:MAX"
 . ' CDEF:a=aa,' . $actionCdef
 . ' CDEF:b=bb,' . $actionCdef
 . " 'AREA:b{$areaColor}:In'"
 . ' GPRINT:b:LAST:"Current\:%8.2lf %s"'
 . ' GPRINT:b:AVERAGE:"Average\:%8.2lf %s"'
 . ' GPRINT:b:MAX:"Maximum\:%8.2lf %s\n"'
 . " 'LINE1:a{$lineColor}:Out'"
 . ' GPRINT:a:LAST:"Current\:%8.2lf %s"'
 . ' GPRINT:a:AVERAGE:"Average\:%8.2lf %s"'
 . ' GPRINT:a:MAX:"Maximum\:%8.2lf %s\n"';
 
$fp = popen( "{$cmd}", 'r');
 if (isset($fp) && is_resource($fp)) {
 $line = "";
 while (!feof($fp)) {
 $line .= fgets($fp, 4096);
 }
 header("Content-type: image/png");
 echo $line;
 }
 pclose($fp); 

Конечно быдлокод, но тем не менее. Посмотрим результаты:
  • cacti
  • collectd
 

Согласитесь, что при интервале дискретизации 10 секунд информативность графиков значительно выше, чем если дискретизация равна 5 минут. В общем ставьте и пользуйтесь.


Источник: http://myfreebsd.ru/freebsd_as_server/web-frontend-dlya-collectd
Категория: Net | Добавил: oleg (11.01.2012)
Просмотров: 1083 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024