MRTG, wykresy, statystyki

MRTG + DDWRT via SNMP/i nie tylko. Mało jest konkretnych rozwiązan odnośnie konfiguracji wykresów MRTG dla typowego routera/openwrt lub samego SNMP. Dlatego wrzucam kilka własnych rozwiązań opartych o skrypty nabazgrane w bashu. Część skryptów korzysta z SNMP który musi być włączony,a druga część – z skryptów generujących dwie linijki (aktualne zużycie/max). Cała paczka mrtg jest dostępna z polecenia opt-ipkg install mrtg (Czasem bedzie potrzebny pakiet mini-snmpd z powodu braku ./snmpget – należy z pakietem uważać, moze naruszyc konfiguracje juz działającego procesu. Wtedy wchodzimy w Serices/Services, dajemy APPLY,SAVE – powinno pomóc przywrócic działanie), a cały proces budowania w czasie wrzucamy do crona, np.:

root /opt/bin/mrtg /opt/etc/mrtg/config.cfg && /opt/bin/indexmaker /opt/etc/mrtg/config.cfg --output /opt/share/www/mrtg/index.html

Full MRG

UPTIME

Target[server-uptime]: `/opt/etc/mrtg/uptime.pl`
Colours[server-uptime]: LIGHT BLUE#7AAFFF,BLUE#1000FF,DARK GREEN#006000,VIOLET#FF00FF
Options[server-uptime]: gauge,noinfo, nopercent, growright, unknaszero
MaxBytes[server-uptime]: 200
Title[server-uptime]: server uptime
YLegend[server-uptime]: Hours
ShortLegend[server-uptime]: Hours
Legend1[server-uptime]: Uptime
Legend2[server-uptime]:
LegendI[server-uptime]:
LegendO[server-uptime]: uptime :
PageTop[server-uptime]:
#!/opt/bin/bash
DAY=`snmpget -v 1 -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 | awk '{print $5}'`

shopt -s extglob
if [[ "$DAY" = +([0-9]) ]]; then
 		HOUR=`snmpget -v 1 -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 | awk '{print $7}' | cut -f1 -d ":"`
    else
		DAY=0;
 		HOUR=`snmpget -v 1 -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 | awk '{print $5}' | cut -f1 -d ":"`
fi

TOTALHOURS=$(($DAY * 24 + $HOUR))
echo $TOTALHOURS
echo $TOTALHOURS

PING GOOGLE

Options[google_ping]: nobanner,gauge,noinfo,nopercent,growright 
Target[google_ping]: `/opt/etc/mrtg/google.ping.pl` 
MaxBytes[google_ping]: 200 
YLegend[google_ping]: RTT (ms) 
Unscaled[google_ping]: ymwd 
LegendI[google_ping]: Ping 
LegendO[google_ping]: Suppress[google_ping]: y
#!/opt/bin/bash
PING="/opt/bin/ping"
ADDR="google.pl"
DATA=`$PING -c 4 $ADDR`
LOSS=`echo $DATA | /opt/bin/grep 'loss' | awk '{print $18}' | cut -f1 -d"%"`
LATENCY=`echo $DATA | /opt/bin/grep 'round-trip' | awk -F/ '{print $5}' | cut -f1 -d"."`
if [ "$LOSS" = "100" ] ; then
  echo 0
else
  echo "$LATENCY"
fi
echo 0

SWAP

Target[swap]: `/opt/etc/mrtg/swaper`
MaxBytes[swap]: 50000
Title[swap]:Memory State of Server
ShortLegend[swap]:  
kmg[swap]:kB,MB
YLegend[swap]: Swap Usage
Legend1[swap]: Total Swap
Legend2[swap]: Used Swap
LegendI[swap]: Total Swap
LegendO[swap]: Used Swap
Options[swap]: growright,gauge,nopercent
PageTop[swap]:
#!/bin/sh
MAX=`cat /proc/meminfo | /opt/bin/grep "SwapTotal" | /bin/sed 's/ //g' | /opt/bin/cut -d ':' -f2 | /opt/bin/cut -d 'k' -f1`
USED=`free|/opt/bin/grep Swap:|/opt/bin/awk '{print $3}'`
let MAXKB="$MAX"
echo "$MAXKB"
let USEKB="$USED"
echo "$USEKB"

Ilość procesów / Processes

# ILOSC PROCESOW
Target[procesy]: `/opt/etc/mrtg/iloscprocesow`
Options[procesy]: growright, gauge, nopercent, integer
MaxBytes[procesy]: 30000
#kilo[procesy]: 1
Title[procesy]: Procesy
PageTop[procesy]: <center> <H1>Procesy</H1>
ShortLegend[procesy]: &nbsp;
YLegend[procesy]: Procesy
Legend1[procesy]: Ilosc wszystkich procesow w systemie
Legend2[procesy]: Ilosc działających procesów
LegendI[procesy]: procesy:
LegendO[procesy]: aktywne procesy:
#!/opt/bin/bash
ILOSC=`ps | wc -l`
echo $ILOSC
echo $ILOSC

TCP/IP connections

Target[tcpopen]: `wc -l /proc/net/ip_conntrack | awk '{print $1"\n"$1}'`
Options[tcpopen]: nopercent,growright,gauge,noinfo
Title[tcpopen]: Open TCP connections
PageTop[tcpopen]: <H1>Aktywne polaczenia TCP</H1>
MaxBytes[tcpopen]: 10000
YLegend[tcpopen]: # conns
ShortLegend[tcpopen]: Polaczen
LegendI[tcpopen]: Polaczen:
LegendO[tcpopen]:
Legend1[tcpopen]: Open TCP connections

HDD/Pendrive usage

#pendrive
Target[pendrive]: `df | grep "/opt" | awk '{print $1"\n"$2}'`
MaxBytes[pendrive]: 520000
Title[pendrive]:Wykorzystanie Pendrive
ShortLegend[pendrive]: &nbsp;
kmg[pendrive]:kB,MB
kilo[procesy]: 1000
YLegend[pendrive]: Usage
Legend1[pendrive]: Total
Legend2[pendrive]: Used
LegendI[pendrive]: Total
LegendO[pendrive]: Used
Options[pendrive]: growright,gauge,nopercent
PageTop[pendrive]:<H1>Pendrive</H1>

RAM

# RAM
Target[ram]: `free | grep Mem | awk '{print $2"\n"$3}'`
MaxBytes[ram]: 50000
Title[ram]:RAM
ShortLegend[ram]: &nbsp;
kmg[ram]:kB,MB
YLegend[ram]: RAM Usage
Legend1[ram]: Total RAM
Legend2[ram]: Used RAM
LegendI[ram]: Total RAM
LegendO[ram]: Used RAM
Options[ram]: growright,gauge,nopercent
PageTop[ram]:<H1>RAM</H1>

Rozwiązania nie są idealne, sporo skryptów korzysta z awk, grep, cut – co dla typowego routera na mipsi’e z 300Mhz i 32Mb daje popalić i zjada sporo zasobów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Anty-Spam test

ENG: Third planet of the solar system? PL: Trzecia planeta układu słonecznego?

  1.    Pluton / Pluto
  2.    Jupiter / Jowisz
  3.    Ziemia / Earth
  4.    Mars / Mars
  5.    Wenus / Venus
  6.    Sun / Słońce
  7.    Merkury / Mercury