MRTG — визуальный мониторинг сети, HDD, CPU

Опубликовано:

MRTG (Multi Router Traffic Grapher) — это свободное програмное обеспечение,  для визуального мониторинга по SNMP-протоколу. Но в данном примере я буду его использовать для визуализации текущей загрузки интернет канала провайдера.
Подразумевается, что у вас уже установлен web-сервер Apache или другой.
Обновляем порты и начинаем установку:

[root@router /]# cd /usr/ports/net-mgmt/mrtg
 [root@router /usr/ports/net-mgmt/mrtg]#make install clean

После установки нас попросят добавить mrtg в rc.conf:

[root@router /]# cat /etc/rc.conf | grep mrtg
 mrtg_daemon_enable="YES"
 [root@router /]#

В даном случае MRTG не будет брать статистику с клиентов по SNMP протоколу, а с PF. Для этого мы создадим скрипт который будет считать количество InOut пакетов на сетевом интерфейсе:

[root@router /]#cat > /usr/local/etc/mrtg/tun0.sh
#!/bin/sh
 /sbin/pfctl -sI -vv -i tun0 | grep "In4/Pass" | awk '{print $6}'
 /sbin/pfctl -sI -vv -i tun0 | grep "Out4/Pass" | awk '{print $6}'
 echo tun0

Отредактируем конфиг mrtg под себя:

[root@router /]#cat > /usr/local/etc/mrtg/mrtg.cfg

#Общие параметры

HtmlDir: /usr/local/www/mrtg
ImageDir: /usr/local/www/mrtg/img
LogDir: /usr/local/www/mrtg
Language: russian
Options[^]: growright, unknaszero, nobanner, transparent, noinfo, nopercent, integer
Background[_]: #B0C4DE
XSize[_]: 400
YSize[_]: 100# Мониторинг на сетевом интерфейсе
Target[tun0]: `/usr/local/etc/mrtg/tun0.sh`
Title[tun0]: ADSL Ukrtelecom External
Pagetop[tun0]: <H1>ADSL Ukrtelecom OGO</H1>
Options[tun0]: bits
MaxBytes[tun0]:1250000

#Смотрим температуру CPU

 Target[cpu_temp]: `sysctl dev.cpu | awk '/temperature/ {print int($2)}' && sysctl dev.cpu | awk '/temperature/ {print int($2)}'`
 Title[cpu_temp]: CPU Temperature Server
 PageTop[cpu_temp]: <h1>CPU Server Temperature</h1>
 Options[cpu_temp]: gauge
 LegendI[cpu_temp]: Temperature CPU 0
 LegendO[cpu_temp]: Temperature CPU 1
 YLegend[cpu_temp]: C
 ShortLegend[cpu_temp]: C.
 MaxBytes[cpu_temp]: 70
 Legend1[cpu_temp]: CPU Temperature Server CPU 0
 Legend2[cpu_temp]: CPU Temperature Server CPU 1

#Количество клиентов mpd

 Target[mpd]: `/usr/local/etc/mrtg/mpd.sh`
 MaxBytes[mpd]: 1
 AbsMax[mpd]: 1250000
 Title[mpd]: mpd online users
 PageTop[mpd]: <h1>mpd online users</h1>
 Options[mpd]: gauge
 YLegend[mpd]: Users per Hour
 ShortLegend[mpd]: users
 LegendI[mpd]: Online users
 LegendO[mpd]: -
 Legend1[mpd]: Online users
 Legend2[mpd]: -

#Мониторинг ejabberd сервера

 Target[ejabberd]: `/usr/local/sbin/ejabberdctl connected_users_number && echo 0`
 MaxBytes[ejabberd]: 1
 AbsMax[ejabberd]: 1250000
 Title[ejabberd]: ejabberd statistics
 PageTop[ejabberd]: <h1>ejabberd statistics</h1>
 Options[ejabberd]: gauge
 YLegend[ejabberd]: Users per Hour
 ShortLegend[ejabberd]: users
 LegendI[ejabberd]: Online users
 LegendO[ejabberd]: -
 Legend1[ejabberd]: Online users
 Legend2[ejabberd]: -

#Смотрим температуру HDD

 Title[hdd_temp]: HDD Temperature Home Server
 Target[hdd_temp]: `/usr/local/sbin/smartctl -a -s on /dev/ad4 | grep Temp | awk -F " " '{print $10}'`
 LegendI[hdd_temp]: Temperature HDD
 LegendO[hdd_temp]: -
 YLegend[hdd_temp]: C
 MaxBytes[hdd_temp]: 1
 AbsMax[hdd_temp]: 200
 ShortLegend[hdd_temp]: Grad
 PageTop[hdd_temp]: <h1>HDD Temperature Home Server</h1>
 Legend1[hdd_temp]: HDD Temperature Server

# ipfw user_2

 Target[user_2]: `ipfw show 300 | awk '{ print $3 }' && ipfw show 400 | awk '{ print $3 }'`
 Title[user_2]: user_2
 Pagetop[user_2]: <H1>user 192.168.100.2</H1>
 Options[user_2]: bits
 MaxBytes[user_2]:1250000

*Для снятия значений с датчиков температуры CPU, необходимо выполнить:

*Для снятия количества виртуальных ин-ов ng*:

[root@pdcserv ~]#cat mpd.sh
#!/usr/local/bin/perl
 $count=0;
 open(vpn, "ifconfig | grep 'ng' |");
 while(<vpn>)
 {
 $count++;
 }
 print $count,"n";
 print $count,"n";
 close(PASS);

Intel
Подгрузить модуль «coretemp.ko»:

kldload coretemp.ko

и добавим строку в /boot/loader.conf, что бы подгружался при загрузке FreeBSD:

coretemp_load="YES"

или добавить в ядро:

device coretemp

и пересобрать его.
После этого можно проверить работоспособность:
После того, как вы сделали одно из действий описанных выше, проверим работоспособность:

vlymar@host2:~$ sysctl -a | grep temperature
 dev.cpu.0.temperature: 37,5C

AMD:
Для процессоров AMD, все по аналогии, только подставляем:

#kldload amdtemp.ko

или в ядре:

device          amdtemp

Теперь необходимо сделать «скелет» html-странички:

[root@router /]# mkdir -p /usr/local/www/data/mrtg
 [root@router /usr/local/etc/mrtg]# indexmaker /usr/local/etc/mrtg/mrtg.cfg --bodyopt bgcolor="#B0C4DE" --output /usr/local/www/mrtg/index.html

С генерируем графические элементы для этой странички. Эту команду необходимо выполнить 3-ри раза, первые 2 раза он матерится на отсутствие в WorkDir файлов с расширением *.png, *.log и *.old.

[root@router /usr/local/etc/mrtg]#mrtg /usr/local/etc/mrtg/mrtg.cfg
2010-10-09 14:34:38, Rateup WARNING: /usr/local/bin/rateup could not read the primary log file for tun0
2010-10-09 14:34:38, Rateup WARNING: /usr/local/bin/rateup The backup log file for tun0 was invalid as well
2010-10-09 14:34:38, Rateup WARNING: /usr/local/bin/rateup Can't remove tun0.old updating log file
2010-10-09 14:34:38, Rateup WARNING: /usr/local/bin/rateup Can't rename tun0.log to tun0.old updating log file
[root@router /usr/local/etc/mrtg]# mrtg /usr/local/etc/mrtg/mrtg.cfg
2010-10-09 14:34:43, Rateup WARNING: /usr/local/bin/rateup Can't remove tun0.old updating log file
 2010-10-09 14:34:44, Rateup WARNING: /usr/local/bin/rateup Can't remove rl0.old updating log file
[root@router /usr/local/etc/mrtg]# mrtg /usr/local/etc/mrtg/mrtg.cfg

Далее добавим его в cron, минимальное значение для обновления графиков в mrtg — 5 минут.:

[root@router /]#cat >> /etc/crontab
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg --logging /var/log/mrtg.log

Добавим виртуалхост в апач:

<VirtualHost *>
 ServerAdmin admin@local
 ServerName noc.local
 DocumentRoot /usr/local/www/data/mrtg
 DirectoryIndex index.php index.php3 index.html
 AddType application/x-httpd-php .php .php3
 Action  application/x-httpd-php /cgi-bin/php-cgi
 ErrorLog /var/log/noc-error.log
 CustomLog /var/log/noc-custom.log combined
 </VirtualHost>

Теперь можно наблюдать визуально вот такие графики:

unix1
 

Понравилась статья, расскажи о ней друзьям, нажми кнопку!