• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

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
 
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 meine@mail.tld)
  • Falls nein, fertig.
 
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
#
 
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:
 
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:
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
 
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 :)
 
[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******]
 
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:
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 meine@mail.tld)
  • 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.
 
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" hallo@hallowelt.de
fi
 
Last edited by a moderator:
Back
Top