RAM Monitoring - wie?

hubutz

Registered User
Hallo zusammen,

ich würde gerne auf meinem Debian vServer ein RAM Monitoring implementieren, dass ab einer gewissen Auslastung eine Mail sendet.
Hat jemand eine Idee wie sich sowas realisieren lässt? Ich habe auf die schnelle nur NAGIOS gefundne, aber so wie das ganze für mich klingt, ist das sehr (zu) mächtig und braucht sicher viel RAM (den ich eben nicht habe).

Grüße,
hubutz
 

Firewire2002

Registered User
Kleines Shell Script das folgendes macht:
  • Speicherwerte mit free auslesen
  • mit grep und awk den Wert für die aktuelle Auslastung herrausfiltern
  • Prüfen ob der Wert größer als dein persönliches Limit ist (if)
  • Falls ja, mail senden (echo Ram ist voll > mail [email protected])
  • Falls nein, fertig.
 

LinuxAdmin

Moderator
Für Virtuozzo basierte vServer müssen entsprechend die Werte aus den UBC ausgelesen werden. Beispielsweise so:
Code:
#! /bin/bash

LIMFACTOR=0.8 # 80%
DELAY=10      # every 10 seconds
MAILTO=root   # e-mail address

getMem() {
    cat /proc/user_beancounters | grep privvmpages | \
    awk 'BEGIN {OFMT="%i"; cur=0 }{ cur+=$2 } END {print cur}'
}

getLimit() {
    cat /proc/user_beancounters | grep oomguarpages | \
    awk -v f=$LIMFACTOR 'BEGIN {OFMT="%i"; lim=0 }{ lim+=$4 } END {print lim*f}'
}


if [ `whoami` != root ]; then
    echo "$0: must be root"
    exit 2
fi

echo "$0 started;"
echo "Press ^C to stop"

while true; do

    current=`getMem`
    limit=`getLimit`

    if [ $current -gt $limit ]; then
        let cmb=$current/256
        let lmb=$limit/256
        echo "Memory usage execeeds limit: $cmb MB of $lmb MB " |mailx -s "$0: memory warning" $MAILTO
    fi
    sleep $DELAY
done
#
 

Firewire2002

Registered User
Virtualisieren das immer noch nicht alle? Mein vServer RootDS bei S4Y hats damals getan.
Aber stimmt schon, die UBC Werte sollten bei vServern bevorzugt werden. :eek:
 

hubutz

Registered User
Hallo ihr zwei,

danke für die ausführlliche Erklärung. Nur was "virtuzzo" ist, muss ich nochmal schauen. Mein vServer ist bei netcup, was die für ne Virtualisierungsoftware benutzen weiß ich net.

Werde heute aber nicht dazu kommen so ein Skript aufzusetzen (habe übers WE keinen PC, der ist im A**** (Mainboard defekt)). Falls ich noch Fragen hab, darf ich die euch 2 Gurus dann hier stellen?! :))

//EDIT mal schnell geschaut, ein File "*beancounter*" gibts bei mir net :)
Aber ich schau wie gesagt nächste Woche mal genauer!
 
Last edited by a moderator:

hubutz

Registered User
Huhu,
ich habe mir nun folgendes "asugedacht":

Code:
_sleep=60
_freeram=0
_usedswap=0
_limit=0

_freeram= free|awk '{print $4}'|grep "[0-9]"|head -1
_usedswap= free|awk '{print $4}'|grep "[0-9]"|tail -1
if
$_freeram -le $_limit
then
  top
fi
Allerdings bekomme ich immer:
Code:
./moni.sh: line 9: 0: command not found
Und um ehrlich zu sein, weiß ich nicht was daran falsch ist :/ Ich find aber diesen Shellkrams schon komisch, C wäre mir lieber :D
 

hubutz

Registered User
Bei C hätte ich das ganze ganz anders geschrieben -.-
Ich habe ja versucht mich der Syntax anzunähern *ggg*

Das mit der Klammer hatte ich tnicht bedacht, danke! aber eine auf jeder Seite schickt :)
 

LinuxAdmin

Moderator
[klug******]
... wobei die Klammern in diesem Fall jedoch nichts mit der Syntax zutun haben, was man auch leicht daran sieht, dass man die ']' ersatzlos streichen kann. '[' ist eine ausführbahres Programm. Es ist einfach nur ein Link auf /usr/bin/test. "test" nimmt die 3 Argumente "$_freeram" "-le" "$_limit" (das 4. Argument ']' fließt nicht in das Ergebnis ein) und setzt seinen exit-Code entsprechend.
[/klug******]
 

hubutz

Registered User
MOD: Full-Quote entfernt!
Huhu,
das heißt die Klammern sind unwichtig? Bzw. ich brauche nur "["? Komische Syntax, aber solange es geht:)

Vllt versteh ich das irgendwann auch nochmal.

Gruß
 
Last edited by a moderator:

cretter

Registered User
Kleines Shell Script das folgendes macht:
  • Speicherwerte mit free auslesen
  • mit grep und awk den Wert für die aktuelle Auslastung herrausfiltern
  • Prüfen ob der Wert größer als dein persönliches Limit ist (if)
  • Falls ja, mail senden (echo Ram ist voll > mail [email protected])
  • Falls nein, fertig.
und das Ganze dann noch als Job laufen lassen :)

Ich bin auch sehr interessiert an dem Script. Würde mich freuen wenn jemand das fertige Ergebnis postet. Mit Shellprogrammierung hab ichs noch nicht so ganz.
 

cretter

Registered User
so sieht's aus

Bei mir wird jetzt gewarnt wenn mehr als 300 MB belegt sind...

Code:
#!/bin/bash

x=$(cat /proc/user_beancounters |grep privvmpages|awk 'BEGIN{ cur=max=lim=0; }{ cur+=$2;
max+=$3;lim+=$5 } END {print cur*4/1024,max*4/1024,lim*4/1024}')
zugesichert=$(cat /proc/user_beancounters |grep oomguarpages|awk 'BEGIN{ cur=max=lim=0; }{ lim+=$4 } END { print lim*4/1024}')

declare -i momentan2
momentan=$(echo $x| awk '{print $1}')
# FLOAT in Integer umwandeln
momentan2=${momentan/\.*}

if [ "$momentan2" -ge "300" ]; then
echo "Aktueller Verbrauch: $momentan" | mail -s "Memory-Alarm: $momentan" [email protected]
fi
 
Last edited by a moderator:
Top