Давненько я хотел разобраться как мониторить сетевые интерфейсы локальной машины через snmp и рисовать графики через mrtg. Еще больше мне хотелось через тот же snmp мониторить загрузку CPU и памяти.
Вчера собственно я с этим и разобрался, о чем и хочу Вам поведать. 🙂
Ставим необходимый софт:
$ sudo apt-get install snmpd mrtg
После чего правим файл /etc/snmp/snmpd.conf всего лишь в одном месте. Было:
com2sec paranoid default public
#com2sec readonly default public
#com2sec readwrite default private
Стало:
#com2sec paranoid default public
com2sec readonly default public
#com2sec readwrite default private
Теперь перезапускаем snmpd:
$ sudo /etc/init.d/snmpd restart
SNMPd готов к использованию. Остается отрисовка графиков – mrtg. Правим файл /etc/mrtg.cfg, приводя его к примерно следующему виду:
# Global configuration
HtmlDir: /path/to/htdocs
ImageDir: /path/to/htdocs/images
LogDir: /path/to/htdocs/logs
EnableIPv6: no###########################
# Сетевой интерфейс маршрутизатораTitle[eth0]: Output interface
PNGTitle[eth0]: Interface to Internet
MaxBytes[eth0]: 64000
AbsMax[eth0]: 128000
Options[eth0]: growright, bits
SetEnv[eth0]: MRTG_INT_IP=”192.168.0.1″ MRTG_INT_DESCR=”eth0″
Target[eth0]: 2:public@localhost:
PageTop[eth0]: <h1> Output interface</h1>
YLegend[eth0]: bits/s
ShortLegend[eth0]: b/s
Legend1[eth0]: Incoming Traffic
Legend2[eth0]: Outgoing Traffic
Legend3[eth0]: Maximum Incoming Traffic
Legend4[eth0]: Maximum Outgoing Traffic
LegendI[eth0]: In:
LegendO[eth0]: Out:
WithPeak[eth0]: ymwd###########################
# CPULoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[cpu]:ssCpuRawUser.0&ssCpuRawUser.0:[email protected]+ssCpuRawSystem.0&ssCpuRawSystem.0:[email protected]+ssCpuRawNice.0&ssCpuRawNice.0:[email protected]
RouterUptime[cpu]: [email protected]
MaxBytes[cpu]: 100
Title[cpu]: CPU Load
PageTop[cpu]: <H1>Active CPU Load %</H1>
Unscaled[cpu]: ymwd
ShortLegend[cpu]: %
YLegend[cpu]: CPU Utilization
Legend1[cpu]: Active CPU in % (Load)
Legend2[cpu]:
Legend3[cpu]:
Legend4[cpu]:
LegendI[cpu]: Active
LegendO[cpu]:
Options[cpu]: growright,nopercent###########################
# MemoryLoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.6.0:public@localhost
PageTop[mem]: <H1>Free Memory</H1>
Options[mem]: nopercent,growright,gauge,noinfo
Title[mem]: Free Memory
MaxBytes[mem]: 1000000
kMG[mem]: k,M,G,T,P,X
YLegend[mem]: bytes
ShortLegend[mem]: bytes
LegendI[mem]: Free Memory:
LegendO[mem]:
Legend1[mem]: Free memory, not including swap, in bytes
Итого мы имеем отрисовку графиков сетевого интерфейса, загрузку процессора, использования памяти. Остается только нарисовать общий файл со всеми графиками:
$ sudo indexmaker /etc/mrtg.cfg > /path/to/htdocs/index.html
Собственно синтаксис файла конфигурации прост до безобразия. Кому интересно разобраться –

Да, если запятые на точки поменяешь. 🙂
Создаю pptp.cfg
# Сетевой интерфейс маршрутизатора
Title[eth0]: Output interface
PNGTitle[eth0]: Interface to Internet
MaxBytes[eth0]: 64000
AbsMax[eth0]: 128000
Options[eth0]: growright, bits
SetEnv[eth0]: MRTG_INT_IP=”172.17.0.133″ MRTG_INT_DESCR=”ppp0″
Target[eth0]: 2:public@localhost:
PageTop[eth0]: Output interface. (ppp0)
YLegend[eth0]: bits/s
ShortLegend[eth0]: b/s
Legend1[eth0]: Incoming Traffic
Legend2[eth0]: Outgoing Traffic
Legend3[eth0]: Maximum Incoming Traffic
Legend4[eth0]: Maximum Outgoing Traffic
LegendI[eth0]: In:
LegendO[eth0]: Out:
WithPeak[eth0]: ymwd
Сохранил.
root@lo1-desktop:/usr/local/src# indexmaker /etc/mrtg/pptp.cfg > /var/www/mrtg/pptp.html
ERROR: CFG Error in “setenv[eth0]”, line 10: MRTG_INT_IP=”172.17.0.133″ MRTG_INT_DESCR=”eth0″ must be XY=”dddd” AASD=”kjlkj” …
root@lo1-desktop:/usr/local/src#
Ой…Поменял везде с [eth0]: на [ppp0] .
Теперь пишет
ERROR: CFG Error in “setenv[ppp0]”, line 10: MRTG_INT_IP=”172.17.0.133″ MRTG_INT_DESCR=”ppp0″ must be XY=”dddd” AASD=”kjlkj” …
Сорри. Разобрался. Спасибо за внимание 🙂
Жаль нету конфигов на такие графики, как температура, загрузка ЦП, и тд…
Ситуация печальная. Html нормально, открывается норм, разделы на месте. Но все значения по 0. Картинки меняются согласно времени.
Где рыть?…
вот мож мой конфиг поможет…
# Global configuration
HtmlDir: /var/www/mrtg
ImageDir: /var/www/mrtg
LogDir: /var/log/mrtg
EnableIPv6: no
###########################
# Сетевой интерфейс маршрутизатора
Title[eth0]: Output interface
PNGTitle[eth0]: Interface to Internet
MaxBytes[eth0]: 100000000
AbsMax[eth0]: 1000000000
Options[eth0]: growright, bits
SetEnv[eth0]: MRTG_INT_IP=”10.109.4.45″ MRTG_INT_DESCR=”eth0″
Target[eth0]: 2:public@localhost:
PageTop[eth0]: Output interface
YLegend[eth0]: bits/s
ShortLegend[eth0]: b/s
Legend1[eth0]: Incoming Traffic
Legend2[eth0]: Outgoing Traffic
Legend3[eth0]: Maximum Incoming Traffic
Legend4[eth0]: Maximum Outgoing Traffic
LegendI[eth0]: In:
LegendO[eth0]: Out:
WithPeak[eth0]: ymwd
Title[ppp0]: Output interface
PNGTitle[ppp0]: Interface to Internet
MaxBytes[ppp0]: 1000000
AbsMax[ppp0]: 10000000
Options[ppp0]: growright, bits
SetEnv[ppp0]: MRTG_INT_IP=”192.168.208.4″ MRTG_INT_DESCR=”ppp0″
Target[ppp0]: 2:public@localhost:
PageTop[ppp0]: Output interface ppp0
YLegend[ppp0]: bits/s
ShortLegend[ppp0]: b/s
Legend1[ppp0]: Incoming Traffic
Legend2[ppp0]: Outgoing Traffic
Legend3[ppp0]: Maximum Incoming Traffic
Legend4[ppp0]: Maximum Outgoing Traffic
LegendI[ppp0]: In:
LegendO[ppp0]: Out:
WithPeak[ppp0]: ymwd
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[cpu]:ssCpuRawUser.0&ssCpuRawUser.0:[email protected]+ssCpuRawSystem.0&ssCpuRawSystem.0:[email protected]+ssCpuRawNice.0&ssCpuRawNice.0:[email protected]
RouterUptime[cpu]: [email protected]
MaxBytes[cpu]: 100
Title[cpu]: CPU Load
PageTop[cpu]: Active CPU Load %
Unscaled[cpu]: ymwd
ShortLegend[cpu]: %
YLegend[cpu]: CPU Utilization
Legend1[cpu]: Active CPU in % (Load)
Legend2[cpu]:
Legend3[cpu]:
Legend4[cpu]:
LegendI[cpu]: Active
LegendO[cpu]:
Options[cpu]: growright,nopercent
###########################
# Memory
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.6.0:public@localhost
PageTop[mem]: Free Memory
Options[mem]: nopercent,growright,gauge,noinfo
Title[mem]: Free Memory
MaxBytes[mem]: 1000000
kMG[mem]: k,M,G,T,P,X
YLegend[mem]: bytes
ShortLegend[mem]: bytes
LegendI[mem]: Free Memory:
LegendO[mem]:
Legend1[mem]: Free memory, not including swap, in bytes
Хотя проблемы, скорее всего, из-за snmp. Много ругательств в логе, но я не сильно понимаю, что оно хочет сказать :
SNMP Error:
Received SNMP response with error code
error status: noSuchName
index 2 (OID: 1.3.6.1.2.1.2.2.1.16.2)
SNMPv1_Session (remote host: “localhost” [127.0.0.1].161)
community: “public”
request ID: 1638629035
PDU bufsize: 8000 bytes
timeout: 2s
retries: 5
backoff: 1)
at /usr/share/perl5/SNMP_util.pm line 490
SNMPGET Problem for ifInOctets.2 ifOutOctets.2 sysUptime sysName on public@localhost::::::v4only
at /usr/bin/mrtg line 2043
Unknown SNMP var ssCpuRawUser.0
at /usr/bin/mrtg line 2043
Unknown SNMP var ssCpuRawUser.0
at /usr/bin/mrtg line 2043
2008-09-13 02:34:02: WARNING: Expected a number but got ‘1:07:17’
2008-09-13 02:34:02: WARNING: Expected a number but got ‘endo-ubuntu’
Unknown SNMP var ssCpuRawSystem.0
at /usr/bin/mrtg line 2043
Unknown SNMP var ssCpuRawSystem.0
at /usr/bin/mrtg line 2043
2008-09-13 02:34:02: WARNING: Expected a number but got ‘1:07:17’
2008-09-13 02:34:02: WARNING: Expected a number but got ‘endo-ubuntu’
Unknown SNMP var ssCpuRawNice.0
at /usr/bin/mrtg line 2043
Unknown SNMP var ssCpuRawNice.0
at /usr/bin/mrtg line 2043
2008-09-13 02:34:02: WARNING: Expected a number but got ‘1:07:17’
2008-09-13 02:34:02: WARNING: Expected a number but got ‘endo-ubuntu’
SNMP Error:
Received SNMP response with error code
error status: noSuchName
index 2 (OID: 1.3.6.1.4.1.2021.4.6.0)
SNMPv1_Session (remote host: “localhost” [127.0.0.1].161)
community: “public”
request ID: 2139819965
PDU bufsize: 8000 bytes
timeout: 2s
retries: 5
backoff: 1)
at /usr/share/perl5/SNMP_util.pm line 490
SNMPGET Problem for .1.3.6.1.4.1.2021.4.6.0 .1.3.6.1.4.1.2021.4.6.0 sysUptime sysName on public@localhost::::::v4only
at /usr/bin/mrtg line 2043
2008-09-13 02:34:02: ERROR: Target[eth0][_IN_] ‘ $target->[0]{$mode} ‘ did not eval into defined data
2008-09-13 02:34:02: ERROR: Target[eth0][_OUT_] ‘ $target->[0]{$mode} ‘ did not eval into defined data
2008-09-13 02:34:02: ERROR: Target[ppp0][_IN_] ‘ $target->[0]{$mode} ‘ did not eval into defined data
2008-09-13 02:34:02: ERROR: Target[ppp0][_OUT_] ‘ $target->[0]{$mode} ‘ did not eval into defined data
2008-09-13 02:34:02: ERROR: Target[cpu][_IN_] ‘ $target->[1]{$mode} + $target->[2]{$mode} + $target->[3]{$mode} ‘ (warn): Use of uninitialized value in addition (+) at (eval 24) line 1.
2008-09-13 02:34:02: ERROR: Target[cpu][_OUT_] ‘ $target->[1]{$mode} + $target->[2]{$mode} + $target->[3]{$mode} ‘ (warn): Use of uninitialized value in addition (+) at (eval 25) line 1.
2008-09-13 02:34:02: ERROR: Target[mem][_IN_] ‘ $target->[4]{$mode} ‘ did not eval into defined data
2008-09-13 02:34:02: ERROR: Target[mem][_OUT_] ‘ $target->[4]{$mode} ‘ did not eval into defined data
@aleksandr:
Александр, ктож вам запрещает использовать sensors (пакет кажется называется ld-sensors), а потом грепать нужную инфу? для примера выкладываю
что пишем в конфиге mrtg.conf
########################################
Title[temp]: [temp]
XSize[temp]: 600
YSize[temp]: 120
MaxBytes[temp]: 500
AbsMax[temp]: 600
Options[temp]: gauge, growright, nobanner, noinfo, nolegend
Target[temp]: `/etc/mrtg/temp`
PageTop[temp]: Temperature statistics
YLegend[temp]: temperature
ShortLegend[temp]: *C
Legend1[temp]: 3
Legend2[temp]: 4
Legend3[temp]: 5
Legend4[temp]: 6
LegendI[temp]: CPU:
LegendO[temp]: SYS:
WithPeak[temp]: ymwd
PageFoot[temp]: Back
########################################
теперь сам скрипт, который с правами на выполнение, лежит в папке etc/mrtg
#!/bin/bash
cpu=`sensors |grep CPU |awk {'print $3'}|replace '+' ''|replace '°C' ''`
mb=`sensors |grep Chip |awk {'print $3'}|replace '+' ''|replace '°C' ''`
a=0
b=0
echo $mb
echo $cpu
echo $a
echo $b
Аналогичными ручными скриптами выдергиваем инфу о памяти ( например `free | grep -m 1 ‘Mem:’ | awk {‘print $4’}` ) дисковом пространстве ( для примеру hdb5=`/bin/df | grep -m 1 ‘hdb5’ | awk {‘print $4’}` )
з.ы. если все еще непонятно, обращайтесь, [email protected]
@ Repsac:
Спасибо за отзычивость 🙂
Всё конекчто супер, груфики рисует НО ……. они у меня пустые 🙁
In: 0.0 b/s (0.0%) 0.0 b/s (0.0%) 0.0 b/s (0.0%)
Out: 0.0 b/s (0.0%) 0.0 b/s (0.0%) 0.0 b/s (0.0%)
конфиг такойже как и у вас…. подскажите…..