SQL-ausgabe von free splitten und speichern

  • hi,


    ich habe folgenden code der die ausgabe von uptime splittet und speichert:

    Code
    $text = exec("uptime");
      $text = substr($text, strpos($text,"load average") + strlen("load average: "));
      $datetime = date("Y-m-d G:i:s");
      $loads = split(", ", $text);
      $abfrage = "INSERT INTO server_usage (datetime, load1, load5, load15) VALUES (\"$datetime\", \"$loads[0]\", \"$loads[1]\", \"$loads[2]\")";
      $result = mysql_query($abfrage) or die (mysql_error());

    funkt auch vom feinsten.
    jetzt möchte ich das gleiche auch für "free" machen und nur:
    total, used und free speichern und habe dies:

    Code
    $text = exec("free");
      $text = substr($text, strpos($text,"Mem") + strlen("Mem: "));
      $datetime = date("Y-m-d G:i:s");
      $mem = split(", ", $text);
      $abfrage = "INSERT INTO server_mem (datetime, total, used, free) VALUES (\"$datetime\", \"$mem[0]\", \"$mem[1]\", \"$mem[2]\")";
      $result = mysql_query($abfrage) or die (mysql_error());

    bei $text= substr
    und $mem = split
    definition weiss ich nicht wie es richtig ist und die ausgaben getrennt werden zum einlesen. ich hab da ja keine kommas.


    vieleicht kann jemand helfen.


    vielen dank

    Logic will take you from A to B. Imagination will take you everywhere.(A.Einstein)
    Nur wer sein Ziel kennt findet auch den Weg!

  • Warum liest du nicht einfach /proc/meminfo ein? Das kannst dann viel leichter verarbeiten, ein Beispiel dafür hättest in meinem Script, dass ich dir erst gesendet habe. Ansonsten mach folgendes:
    [PHP]<?php


    $results = array(
    'total' => 0,
    'used' => 0,
    'free' => 0,
    );


    exec('free', $result, $code);
    if($code === 0 && isset($result[1]))
    {
    $temp = preg_split('/[ ]+/', $result[1]);
    $results['total'] = (isset($temp[1])) ? intval($temp[1]) : 0;
    $results['used'] = (isset($temp[2])) ? intval($temp[2]) : 0;
    $results['free'] = (isset($temp[3])) ? intval($temp[3]) : 0;
    }


    var_dump($results);


    ?>[/PHP]



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Falls Du das via Cron aufrufen willst, kannst Du auch ein Shellscript nutzen. Dann musst Du den Beinbruch über PHP nicht machen.
    Hier mal ein Ausschnitt aus meinem vServer Monitor:


    $MYSQL_HOST, _DB, _PASS, und _USER musst Du natürlich durch die richtigen Daten ersetzen.

  • KB19
    dann habe ich das jetzt mal so gemacht:

    nach dem ich das fehlende (s) in 2x $result gefunden hatte.
    auf jeden fall läuft es und bringt die richtigen daten.
    DANKE!


    @sim4000
    dazu müsste ich dann auch wohl ne andere db/tabellen-aufbau haben.


    ich kann zwar prg. lesen und recht gut verstehen aber das hier sind meine ersten schritte, und mit 53 ist es doch nicht soooo leicht.


    aber,
    DANKE!

    Logic will take you from A to B. Imagination will take you everywhere.(A.Einstein)
    Nur wer sein Ziel kennt findet auch den Weg!

  • oooops, geändert...läuft auch.(ihr lacht euch sicher kaputt).
    da ich absolut kein "exec" in den php.ini´s erlauben will, gehe ich diesen weg.


    wenn morgen ein paar mehr daten gesammelt sind erzähl und zeige ich mehr.


    nochmals DANKE!

    Logic will take you from A to B. Imagination will take you everywhere.(A.Einstein)
    Nur wer sein Ziel kennt findet auch den Weg!

  • Zitat von FidiBus;6582

    ihr lacht euch sicher kaputt


    Würde ich nie machen, jeder hat mal angefangen :)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • so...damit die LIEBEN HELFER auch sehen das ihre hilfe von nutzen war:


    [Blockierte Grafik: http://fidibus.be/server_mem.jpg]


    und:
    [Blockierte Grafik: http://fidibus.be/server_load.jpg]


    lässt sich sicher noch schöner machen. aber ich will eigentlich nur die peaks sehen welche ja jeweils links oben angegeben sind.
    der vorteil für mich bei meiner "idee" ist, dass ich das script mit einem parameter aufrufe wo ich dann sage ob ich die statistic für einen tag oder xxx tage haben will. so bekomme ich einen recht guten überblick wie sich das teil so benimmt.
    da das optimieren (apache/mysql) ja ne längere aktion ist, kann es ja sehr hilfreich sein.
    es ja leicht geschehen das man den memory in ruhigem zustand recht optimal hat aber bei belastung dan völlig quer schiesst.
    mit knapp unter 200mb bin ich erstmal zufrieden, andere brauchen oftmals mehr als das doppelte bei gleichen diensten.


    letztendlich ja nur eine von xxx möglichkeiten sowas zu machen.


    (nein...da wo die bilder liegen, das hat nichts mit meinem vserver hier zu tun)

    Logic will take you from A to B. Imagination will take you everywhere.(A.Einstein)
    Nur wer sein Ziel kennt findet auch den Weg!

  • Kleiner Tipp am Rande: Mit Munin gibts so etwas auch schon fertig und konfigurierbar wie man es braucht, solltest dir vielleicht mal ansehen. Aber ich verstehe es, wenn man lieber auf eigene Systeme setzt, ich speichere Ram, Traffic und Load auch noch extra ab, obwohl ich Munin laufen habe :)


    Achja: Nett geworden, seinen Zweck erfüllt es auf jeden Fall :)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • wie du schon sagst...selbst gemacht...
    da ich mir jetzt endlich mal die zeit nehme php/mysql besser zu verstehen, muss ich ja experimentieren. und wie schon in der sesamstrasse...wer nicht fragt...bleibt dumm


    ja...klar...es gibt schöne tools die schnell zu installieren sind, bei eigenen sachen musst du aber nicht erst nachdenken wo du suchen musst wenn mal was quer steht, und du weisst was läuft.
    wenn ich immer den einfachen weg gehe, gibt es ja keine herausforderungen für mich. ein tut mit copy and paste runter-arbeiten bringt mich nicht wirklich weiter(obwohl so mancher zumindest das machen sollte).


    ok...genug jetzt
    danke dir

    Logic will take you from A to B. Imagination will take you everywhere.(A.Einstein)
    Nur wer sein Ziel kennt findet auch den Weg!