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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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:</pre>
[/code]
 
Plik: iloscprocesow
 
[code lang="bash"]
<pre>#!/opt/bin/bash
ILOSC=`ps | wc -l`
echo $ILOSC
echo $ILOSC</pre>
<pre>[/code]</pre>
<strong>[h=4]Aktywne połączenia TCP/IP[/h]</strong>
 
mrtg.cfg
 
[code lang="bash"]
 
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
# 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:</pre>
[/code]

Plik: iloscprocesow

[code lang="bash"]
<pre>#!/opt/bin/bash
ILOSC=`ps | wc -l`
echo $ILOSC
echo $ILOSC</pre>
<pre>[/code]</pre>
<strong>
Aktywne połączenia TCP/IP
</strong> 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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>
#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

1
2
3
4
5
6
7
8
9
10
11
12
13
# 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>
# 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 *

Rozwiąż zagadkę aby kontynuować * Time limit is exhausted. Please reload CAPTCHA.