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>
Теперь можно наблюдать визуально вот такие графики: