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

09.10.2010 - 14:21

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. Для этого мы создадим скрипт который будет считать количество In\Out пакетов на сетевом интерфейсе:

[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

*работа с smartctl описана Разбираем SMART
*Для снятия значений с датчиков температуры 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.png

Ваша оценка: Нет Средняя: 2.7 (9 votes)

Комментарии:


Мониторинг сети? ХМ, полезно. Есть еще статьи по этому поводу?