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 @ musznik.ath.cx

[box]

UPTIME godzinowy

mrtg.cfg

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

Plik uptime.pl

#!/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

[/box]

[box]

PING GOOGLE

mrtg.cfg

Title[google_ping]: Ping  google.pl
PageTop[google_ping]:

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

Plik: google.ping.pl

#!/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

[/box]

[box]

Plik wymiany SWAP, wykorzystanie

mrtg.cfg

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

Plik: swaper

#!/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"

[/box]

[box]

Inne

Ilość procesów

mrtg.cfg

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

Plik: iloscprocesow

#!/opt/bin/bash
ILOSC=`ps | wc -l`
echo $ILOSC
echo $ILOSC

Aktywne połączenia TCP/IP

mrtg.cfg

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

Plik: brak, wystarczy konfiguracja w mrtg.cfg

Wykorzystanie Pendrive/HDD

mrtg.cfg

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

Plik: brak, wystarczy konfiguracja w mrtg.cfg

Wykorzystanie pamięci RAM

mrtg.cfg

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

Plik: brak, wystarczy konfiguracja w mrtg.cfg

[/box]

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. Ale, router nie może nocami marnować tych kilku mikroFlopów.

Ten wpis został opublikowany w kategorii Code, Ideas. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *