Связка snmpd + mrtg

Давненько я хотел разобраться как мониторить сетевые интерфейсы локальной машины через 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]: &nbsp;In:
LegendO[eth0]: &nbsp;Out:
WithPeak[eth0]: ymwd

###########################
# CPU

LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1+ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1+ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
RouterUptime[cpu]: public@127.0.0.1
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

###########################
# 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]: <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

Собственно синтаксис файла конфигурации прост до безобразия. Кому интересно разобраться — милости прошу читать.

Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

20 комментариев(я)

  • 26.07.2008 16:42, Silver Ghost сказал:

    Да, если запятые на точки поменяешь. :)

    • 26.07.2008 16:44, aleksandr сказал:

      Создаю 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#

      • 26.07.2008 16:47, aleksandr сказал:

        Ой…Поменял везде с [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» …

        • 26.07.2008 16:48, aleksandr сказал:

          Сорри. Разобрался. Спасибо за внимание :)

          • 26.07.2008 18:10, aleksandr сказал:

            Жаль нету конфигов на такие графики, как температура, загрузка ЦП, и тд…

            • 13.09.2008 01:32, Endo сказал:

              Ситуация печальная. 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:public@127.0.0.1+ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1+ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
              RouterUptime[cpu]: public@127.0.0.1
              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

              • 13.09.2008 01:37, Endo сказал:

                Хотя проблемы, скорее всего, из-за 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

                • 12.12.2008 08:09, repsac сказал:

                  @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’}` )

                  з.ы. если все еще непонятно, обращайтесь, nucbka@gmail.com

                  • 14.12.2008 18:03, aleksandr сказал:

                    @ Repsac:
                    Спасибо за отзычивость :)

                    • 20.01.2009 15:08, AracooL сказал:

                      Всё конекчто супер, груфики рисует НО ……. они у меня пустые :(

                      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%)

                      конфиг такойже как и у вас…. подскажите…..

                      • 10 старых комментариев не отображается. Нажмите, чтобы отобразить все.
                      (Обязательно)
                      (Обязательно, не публикуется)

                      Я пришел к тебе с дискетой - рассказать, что сеть упала
                      Яндекс.Метрика beget