load des Servers überwachen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von SHP, 29.12.2011.

  1. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo zusammen,

    ich möchte die Load meines Serves überwachen und dachte da an folgende Zeile, um zunächst einmal den Wert zu bekommen:
    Code:
    top -b -n1 | grep 'load' | awk '{print $12}'
    Scheinbar kann ich "awk" jedoch in der Kombination nicht ausführen.
    Wie sähe das korrekt aus?

    Ziel ist es später diese Zeile in der "crontab" einzutragen und bei übertreten eines festgelegten Schwellwerts eine Mail auszulösen.
    Ist das so möglich, wie ich mir das vorstelle?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    hö ... jetzt bin ich grad irritiert worden...

    Das scheint so doch zu funktionieren. Da muss sich ein Sonderzeichen eingeschlichen haben.

    Wer möchte darf mir aber gerne ne bessere Lösung vorschlagen oder mit dem nächsten Schritt helfen.
    Bin leider alles andere als ein Guru auf dem Gebiet.

    Ansonsten, entschuldige ich mich für die doofe Frage!
     
  4. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    den grep brauchst du nicht, das kann der awk selber:
    Code:
    top -b -n 1 | awk '/load/ {print $12}'
     
  5. #4 HeadCrash, 29.12.2011
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Hallo,

    das ist durchaus so möglich.

    Es spricht auch nichts dagegen das Rad neu zu erfinden :D, aber grade im Berreich Systemmonitoring gibts für so gut wie alles schon fertige Skripte / Programme.
    Bei den Nagios-Plugins ist z. B. ein Skript "check_load" vorhanden, welches auch ohne Nagios verwendet werden kann.
    Wenn du nur einen einzelnen Host zu überwachen hast, ist eventuell auch Munin für dich interessant. Das Überwacht von Hause aus alles mögliche an Parametern und zeichnet auch gleich nette Kurven.

    mfg
    HeadCrash
     
  6. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Danke für eure Tipps.

    Habe mittlerweile noch etwas weiter gelesen und die Meinung gesehen, das man sich den Wert besser so holt, da diese Variante performanter sei:
    Code:
    cat /proc/loadavg | cut -d" " -f2
    Derzeit hänge ich mich am simplen "if" auf ... was daran ist nicht korrekt?
    Code:
    if [3 -gt 2] then echo "ist groesser" fi
    Mit dem "If" möchte ich später entscheiden, ob der Wert oben größer ist als ein festgelegter Schwellwert und dann wie folgt eine Mail versenden:
    Code:
    echo "Inhalt" | mail -s "Betreff" meine@mailadresse.de
    Das mit der Mail klappt einzeln schon mal.
     
  7. doc

    doc Kaffeetrinker

    Dabei seit:
    26.08.2006
    Beiträge:
    586
    Zustimmungen:
    0
    Ort:
    bremen
    Code:
    if [ 3 -gt 2 ]; then echo "ist groesser"; fi
     
  8. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    Tach.
    2 Ansätze finde ich gut:
    - programmieren (bzw. skripten) lernen zu wollen
    - mal Dinge selber auszuprobieren ohne auf von anderen verfasste Skripte zurückzugreifen
    Falls es sich aber um das superkritische System handelt, ohne das die Firma sofort baden geht, stimme ich HeadCrash natürlich zu. Und man kann ja von vorhandenen Skripten (z.B. check_load) auch lernen und mal nachsehen, wie die das so machen. Nagios Skripte sind ja auch nicht immer das Gelbe vom Ei :-)
    bye,
    yai
     
  9. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    hm... die Semikolons. Dachte das gestern auch schon mal versucht zu haben. Vermutlich hab ich das zweite vergessen.
    Danke jedenfalls, so klappt das if natürlich.

    Im Grunde will ich in dem Bereich gerne was dazulernen und mein Problem bei fertigen Scripts ist dann, das ich es mir nicht so leicht merken kann, als hätte ich es selbst mal geschrieben.
    Zudem, dachte ich mir, ist das ja was kleines und ich muss nicht irgend ein größeres Performance-Mess-Gedöns-Tool auf dem Server zum laufen bringen. Soll ja klein und schlank sein. Zudem ist es, dank meiner umfangreichen Kenntnisse, ein Managed Server. ;) Da darf/kann ich das dann ggf. gar nicht installieren ...

    Genug bla bla... ich danke allen nochmals für die Hilfestellungen bisher. Nun werde ich mich mal dran machen meine drei Brocken zu einem zusammenzuführen.
     
  10. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Das Zusammensetzen scheint mir doch noch gewisse Schwierigkeiten zu bereiten.

    Erster Schritt wäre mal den Load-Wert aus der Datei mit einem von mir definierten Wert zu vergleichen um dann eine Ausgabe zu machen.
    Also diese beiden Punkt zu verbinden:
    Code:
    cat /proc/loadavg | cut -d" " -f2
    Code:
    if [ 3 -gt 2 ]; then echo "ist groesser"; fi
    Habe nun diverses ausprobiert und natürlich nachgelesen, aber so richtig scheint das alles nicht gewesen zu sein.
    Ist denn schon mal korrekt, das ich Teil 1 so schreiben muss, damit ich den Wert des Befehls nutze?
    Code:
    echo $(cat /proc/loadavg | cut -d" " -f2)
    Dann dachte ich, müsste das "if" so aussehen:
    Code:
    if [ $(cat /proc/loadavg | cut -d" " -f2) -gt 1 ]; then echo "GRO"; fi
    -bash: [: 1.86: integer expression expected
    oder
    Code:
    if [$(cat /proc/loadavg | cut -d" " -f2) -gt 1]; then echo "GRO"; fi
    -bash: [1.76: command not found
    Hatte noch andere Ansätze mit gefühlten 5000 Klammern diverser Art, aber das führt ja zu nix...
    Also muss ich doch noch mal um Hilfe bitten.
     
  11. #10 HeadCrash, 30.12.2011
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Hi,

    Der vorletzte Ansatz sieht eigentlich richtig aus, dein Problem ist, dass die Bash nur Integer/Ganzzahlen verarbeiten kann

    Entweder du wirst die Kommastelle los, z.B. so
    Code:
    echo $LOAD * 100 | bc
    
    oder du verwendest eine andere Skriptsprache.

    mfg
    HeadCrash
     
  12. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    ok, das kann ich nachvollziehen.

    So bekomme ich nun einen Wertt "xyz.00" - also vermutlich noch nicht ganz ein "int":
    Code:
    echo "$(cat /proc/loadavg | cut -d" " -f2) * 100" | bc 
    Daher dann vielleicht so:
    Code:
    echo "$(cat /proc/loadavg | cut -d" " -f2) * 100" | bc | cut -d"." -f1
    Aber wie muss das nun im "if" aussehen? Das konnte ich bisher nicht ausführen.
     
  13. #12 HeadCrash, 30.12.2011
    Zuletzt bearbeitet: 30.12.2011
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Code:
    load=`echo "$(cat /proc/loadavg | cut -d" " -f2) * 100" | bc | cut -d"." -f1`
    if [ $loat -gt $load_warn ]; then
    
    würde ich so machen einfach damit ein bisschen Übersichtlichkeit erhalten bleibt.

    mfg
    HeadCrash

    PS: Es gibt irgendeinen Unterschied zwischen der Programausführung mit Backticks "`" und der Variante mit Klammern, aber welchen genau kann ich dir auch nicht verraten.
     
  14. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  15. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Ich bin nun auf ein sh-Script ausgewichen... glaube ich habs mir damit etwas schwer gemacht, alles in einer Zeile haben zu wollen.
    Darauf kam ich ja nur, weil es in nen "crontab" Eintrag aufgenommen werden soll, aber das kann ich über nen Shell Script Aufruf natürlich auch. Bloß ist es da nun viel simpler und übersichtlicher.

    Werde es nach Abschluss dann mal posten.
     
  16. SHP

    SHP Grünschnabel

    Dabei seit:
    29.12.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Code:
    #!/bin/sh
    
    loadAvgAll=$(cat /proc/loadavg)
    echo $loadAvgAll
    
    loadAvg5min=$(echo $loadAvgAll | cut -d" " -f2)
    echo $loadAvg5min
    
    loadAvg5min100=$(echo "$loadAvg5min * 100" | bc | cut -d"." -f1)			# avoid float; make it int
    #echo $loadAvg5min100
    
    loadThresholdValue100=$(echo "1.15 * 4 * 100" | bc | cut -d"." -f1)			# 1.15 == constant / 2 == amount of CPU cores / 100 == avoid float
    #echo $loadThresholdValue100
    
    # if load higher then threshold value
    if 
    	[ $loadAvg5min100 -gt $loadThresholdValue100 ]
    then 
    	echo "High load"
    	echo "Load: $loadAvgAll" | mailx -a From:mail@address.com -s "HIGH LOAD ON SERVER" mail@address.com
    fi
    Hatte schon fast vergessen den Code zu posten. Also so sieht er nun aus.
    Eine Frage und eine Bitte hab ich noch:
    1.
    Ich hab mal gelesen, das man den Grenzwert (Load), an dem der Server es nicht mehr schafft alle Anfragen sofort zu verarbeiten ungefähr so ermittelt werden kann: Konstante 1.15 * Anzahl CPU Kerne. Ist das eurer Meinung nach auch ok so? Oder kennt ihr eine bessere Formel, um das annähernd zu ermitteln? Kann mir nicht vorstellen, das das ausreichend ist, denn da spielen ja noch ein paar andere Faktoren eine Rolle neben der CPU.

    2.
    Es wäre nett, wenn ihr das Script mal auf mögliche Probleme und Performance durchschaut und mir mitteilen würdet, was hier zu optimieren wäre.

    So das sollte es dann sein. Ein frohes Neues noch an alle!
     
Thema:

load des Servers überwachen

Die Seite wird geladen...

load des Servers überwachen - Ähnliche Themen

  1. Bootloader sichern und wiederherstellen mit dd

    Bootloader sichern und wiederherstellen mit dd: Hi, im Netz gibt es einige Guides in denen beschrieben ist wie man mit dd den Bootloader, den gesamten MBR oder den MBR inkl. des versteckten...
  2. Schadsoftware in Linux Mint-Downloads gefunden

    Schadsoftware in Linux Mint-Downloads gefunden: Wie das Linux Mint-Projekt bekannt gab, wurden die Server der Distribution kompromittiert und mit einem Schädling infiziert, der Passwörter...
  3. SoftMaker startet »Load and Help 2015«

    SoftMaker startet »Load and Help 2015«: Wer bis zum Heiligabend kostenfrei eine Vollversion von SoftMaker FreeOffice herunterlädt, trägt gleichzeitig zu einer wohltätigen Spende bei. Wie...
  4. Sicherung der Systempartition inkl. Bootloader + ein paar Verständnisfragen

    Sicherung der Systempartition inkl. Bootloader + ein paar Verständnisfragen: Hallo, ich habe 2 Mediacenter-PC im Wohn- und Schlafzimmer in denen jeweils Ubuntu auf einer SSD installiert wurde. Einer läuft mit einem Bios,...
  5. Opensuse 13.1 Download Geschwindigkeit zu langsam

    Opensuse 13.1 Download Geschwindigkeit zu langsam: Hallo zusammen, ich habe momentan OpenSuse 13.1 installiert und hat auch bis jetzt immer alles geklappt. Aber jetzt habe ich seit einigen Tagen...