Ankündigung

Einklappen
Keine Ankündigung bisher.

Einfaches monitoring von linuxrechnern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [callidomus] Einfaches monitoring von linuxrechnern

    Hi,
    mit dem Netzwerkplugin kann man sich ein recht einfaches Monitoring von Linux Rechnern aufbauen.
    systemload.JPG

    Das geht so. Man aktiviert das Netzwerkplugin, der Hacken beim UDP muss gesetzt sein. Am besten beläst man den Port bei 2727
    Unbenannt.JPG


    Als nächstes Legt man sich Items an.

    Ein Item vom Type String das das Attibut "loadavg" mit dem Wert X hat.
    und unter diesem noch 6 Kinderitems vom Type num. / Werte Aufzeichen würde ich für diese kinderitems auf unendlich stellen.

    Am einfachsten importiert ihr diese csv file.

    Code:
    "path";"type";"cache";"loadavg";"name";"nw";"trace";"value"
    "#Date";"2017-03-28 22:49:28+02:00";"";"";"";"";"";""
    "#Type";"Nodes";"";"";"";"";"";""
    "#Version";"3";"";"";"";"";"";""
    "Monitoring.wiregate";"str";"1";"X";"System Load";"1";"";"0 0 0 0/0 0"
    "Monitoring.wiregate.LastRunning";"num";"";"";"Last Running Process";"";"1";""
    "Monitoring.wiregate.Load15min";"num";"";"";"";"";"0";""
    "Monitoring.wiregate.Load1min";"num";"";"";"";"";"0";""
    "Monitoring.wiregate.Load5min";"num";"";"";"";"";"0";""
    "Monitoring.wiregate.Processes";"num";"";"";"Total Number of Processes";"";"0";""
    "Monitoring.wiregate.Runnable";"num";"";"";"Number of runnable Threads";"";"0";""
    Jetzt legt ihr noch eine Logik an. Es ist wichtg das "*:loadavg" bei den Abhängigkeiten eingetragen ist, das diese Logik auf alle Items hört die das Attribut loadavg haben.
    loadavg.JPG


    im codeblock der Logik steht dann folgends.

    Code:
    #logger.debug(trigger)
    
    if( trigger.by == "Item"):
        # trigger.value = '0.82 0.35 0.13 4/123 3079'
        # logger.debug( trigger.value )
        list = trigger.value.split()
        trigger.node.Load1min =  list[0]
        trigger.node.Load5min =  list[1]
        trigger.node.Load15min =  list[2]
        trigger.node.LastRunning = list[4]
        list2 = list[3].split("/")
        trigger.node.Runnable = list2[0]
        trigger.node.Processes = list2[1]
    Die Logik wird jetzt immer ausgeführt wenn sich etwas an dem Item ändert welches das Attribut loadavg hat. Nachdem die Logik angelegt wurde müsst ihr den core restarten.

    Die Logik geht davon aus das in dem Item (im Beispielfall ist das Monitoring.wiregate) der Inhalt steht wie man im sieht wenn man cat /proc/loadavg auf einem Linuxrechner ausführt.

    Diesen String bekommt man in das Item über das Netzwerkplugin. Dazu wird auf dem entfernten Rechner folgendes Kommando ausgeführt.

    Code:
    echo \"item|[COLOR=#FF0000]Monitoring.wiregate[/COLOR]|`cat /proc/loadavg`\" | nc -uw 1 -q 9 [COLOR=#FF0000]192.168.XXX.XXX[/COLOR] 2727
    Den Item namen und eure IP müsst ihr natürlich für euch passend machen.

    Für das Wiregate habe ich das mit einem Plugin gelöst. Achtung Marcus weggucken Perl code!

    Code:
    # Eigenen Aufruf-Zyklus setzen (Zyklisches prüfen)
      $plugin_info{$plugname.'_cycle'} = 60;
      system("echo \"item|Monitoring.wiregate|`cat /proc/loadavg`\" | nc -uw 1 -q 9 192.168.102.51 2727");
    Das Plugin läuft dann jede Minute.

    Alternative kann man das auch in die crontab, des zu überwachenden Linuxrechners, reinhängen.

    Wenn es Minütlich laufen soll schaut das so aus.Item und IP müsst ihr natürlich anpassen.

    Code:
    * * * * * echo "item|[COLOR=#FF0000]Monitoring.max2play[/COLOR]|`cat /proc/loadavg`" | nc -uw 1 -q 9 [COLOR=#FF0000]192.168.xxx.xxx [/COLOR]2727
    Viele Grüsse
    Jürgen








    Zuletzt geändert von heckmannju; 29.03.2017, 07:15.

    #2
    Hi,
    hat einer noch eine idee wie ich noch einbauen kann das es einen Alarm gibt wenn es mehr wie 10 minuten keinen update mehr gab?
    VG
    Jürgen

    Kommentar


      #3
      Hi Jürgen,

      ich habe an vielen Items, deren Werte zyklisch reinkommen, immer noch ein "Valid"-Item, das von dem zyklischen abhängt. Hier als Beispiel für die Temperatur:
      Code:
                          [[[[[[Valid]]]]]]
                              #Ist die Temperatur noch gültig
                              name = Gültig?
                              type = bool
                              code = 1 if int(value) <= 100 else 0
                              trigger = ..
                              autotimer = 6m = 500
      Das hängt unter dem Temperatur-Item, der trigger ist der parent, das Item wird 1 wenn der value, mit dem getriggert wurde valide ist. Ein Autotimer setzt das Ganze nach 6 Minuten zurück mit einem Wert, der garantiert nicht valide ist.

      So was kannst Du auch an Dein load-Item hängen. Oder - da Du ja sowieso eine Logik an dem Item hast, einfach nur den autotimer anhängen, z.B. mit dem Wert 'DOWN' nach 10 Minuten, und dann in der Logik 'DOWN' auswerten.

      Gruß, Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #4
        Hi,
        was kann man den machen das der Autotimer nach einem restart aufgezogen wird?
        VG
        Jürgen

        Kommentar


          #5
          Hi Jürgen,

          da hast Du recht, das habe ich noch nicht gelöst. Ich habe beim "Valid"-Item noch ein value = 1 stehen (beim Start ist Valid somit "gültig"), aber wenn dann 6 Minuten keine Temperatur kommt, bleibt das Item auf 1 und fällt nicht auf 0.

          Versuch mal einen timer mit delay und value = 1, da musst Du mal in der Doku nach der genauen Syntax nachlesen, das sollte aber klappen.

          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar


            #6
            Hi,

            eigentlich ist es eher ein Bug wenn ich mir das recht überlege. Weil eigentlich verlasse ich mich darauf das Callidomus mir das ausführt und restarts nach jeder änderung notwendig sind.

            Viele Grüsse
            Jürgen

            Kommentar

            Lädt...
            X