Skip to content

By Тодор in Linux

Ще дам пример със статистика на мрежов интерфейс на линукс компютър.
Какво е необходимо:
1. Инсталиран и конфигуриран SNMP демон – пример.
2. Инсталиран и работещ RRDTool.
3. Добре охладена халба бира и кофа с чипс.

SNMP ще ни предостави достъп до всички системни „броячи“, ако мога така да ги нареча:
# snmpwalk -v2c -c public localhost
Ще видите доста дълъг списък.
Като начало ни трябват само мрежовите интерфейси, с които разполага машината:

# snmpwalk -v2c -c public localhost IF-MIB::ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1
IF-MIB::ifDescr.4 = STRING: eth2
IF-MIB::ifDescr.5 = STRING: eth3

От тук ни трябва само индекса на мрежовата карта, която ще следим – да кажем eth0, която е с индекс 2.

За да получим изпратените от интерфейса байтове:

# snmpwalk -v2c -c public localhost IF-MIB::ifHCOutOctets.2
IF-MIB::ifHCOutOctets.2 = Counter64: 6377552360

За да получим приетите от интерфейса байтове:

# snmpwalk -v2c -c public localhost IF-MIB::ifHCInOctets.2
IF-MIB::ifHCInOctets.2 = Counter64: 135903877111

Да, но на нас ни трябват само цифрите от брояча, и вместо да парсваме целия този стринг, който получаваме от snmpwalk, добавяме параметрите -Oqv:

# snmpwalk -v2c -c public -Oqv localhost IF-MIB::ifHCOutOctets.2
6377552360

и
# snmpwalk -v2c -c public -Oqv localhost IF-MIB::ifHCInOctets.2
135903877111

Малко по-добре нали 🙂

Така, вече имаме данните от броячите. Сега трябва да подготвим RRD базата данни за съхранението им:

/opt/rrdtool/bin/rrdtool create eth0.rrd --step 300 --start N \
            DS:in:DERIVE:600:0:U   \
            DS:out:DERIVE:600:0:U   \
            RRA:AVERAGE:0.5:1:288      \
            RRA:AVERAGE:0.5:6:2016      \
            RRA:AVERAGE:0.5:24:8640

Като съответно корегирате пътя до rrdtool с този на вашата инсталация. Не би трябвало да се налага корекция на която и да е от цифрите, които виждате тук. Изпълнението на тази команда ще създаде файл eth0.rrd, в който ще съхраняваме отчитанията на броячите на мрежовия интерфейс.

Примерен скрипт, който проверява броячите и ги съхранява в базата данни:

#!/bin/bash
out=`snmpwalk -v2c -Oqv -c public localhost IF-MIB::ifHCOutOctets.2`
in=`snmpwalk -v2c -Oqv -c public localhost IF-MIB::ifHCInOctets.2`
/opt/rrdtool/bin/rrdtool update eth0.rrd -t in:out N:$in:$out

Това кодче трявба да се изпълнява на всеки 5 минути.
Добавяме го в cron:
# crontab -e
И добавяме следния ред:
*/5 * * * * /rrd/updaterrd >> /rrd/rrd.log
Изхода от всяко изпълнение ще се записва във файла /rrd/rrd.log – помага при търсене на грешки.

Настроихме компютъра да отчита и събира статистиките за интерфейса, остана да ги изрисуваме:

/opt/rrdtool/bin/rrdtool graph -a PNG eth0.png \
        --title "Daily stats" --start -1day \
        DEF:i=eth0.rrd:in:AVERAGE DEF:o=eth0.rrd:out:AVERAGE \
  -h 80 -w 250 \
  AREA:o#0903FF:"Out" LINE1:i#00ff00:"In\n" 

Това ще изрисува статистиката за последният ден. Можете да я генерирате директно в директория достъпна от уеб сървъра, за да може да бъде поставена по-късно в уеб сайт.

Графиката показва скоростта на натоварване в MB/s мегабайти в секунда (не мегабити).

RRDTool е много мощен инструмент, и ако се зачетете в документацията му ще откриете куп параметри, с които да направите вашите графики максимално удобни за четене и с външен вид, който ви допада.

Сега докато си изпиете бирата и си изхрупате чипса ще са се събрали достатъчно данни, за да проверите какво сте направили.

Очаквайте продължение…

Tags: , , , , ,

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.