Thomas Schmieder: C-Programm anstelle von PHP

Guten Abend liebe Gemeinde,

ob Ihr mir bei meinem Anleigen helfen könnt und wollt, weiß ich fühestens nach dem Absenden dieses Postings, aber ich will es mal wagen.

Es gibt da mehrere Fragen.

Ich berechne derzeit mit einem PHP-Script aus der Datei ip_traffic.log den Traffic auf meinem Webserver. Das passiert so viermal täglich (dafür könnte ich ein ChronJob gebrauchen), damit ich rechtzeitig merke, wenn mal wieder der Wurm drin steckt.

Inzwischen habe ich aber über eine Million Zeilen pro Monat. Diesen werden es wohl so 1.600.000 werden. Das PHP-Script ist da langsam am Ende. Die Ausführungszeit beträgt schon über 75 Sekunden und ich mag die Variable in der php.ini nicht noch weiter raufsetzen.

Nun habe ich ja mal C gelernt. Allerdings habe ich das nie auf dem Linux-Rechner angewandt sondern nur aud DOSen. Kann mir da einer kurz erklären, was ich machen muss, damit das auf dem Linux-Rechner klappt? (Das war die erste Frage)

Für den Fall, dass ich das hinbekomme, möchte ich das Ergebnis trotzdem in HTML (also über die PHP-Schnittstelle) ausgeben. Kann ich dafür popen() benutzen und wie müßte ich das machen? (das war die zweite Frage)

Wenn ich bei PHP bleiben sollte für die Auswertung (wegen der schönen Diagramme die da möglich sind -> gd-lib), wie kann ich die Variable für die maximale Ausführeungszeit nur für dieses Script hochsetzen? (das war dann die dritte Frage)

Gibt es in der bash eine Möglichkeit, Spaltenwerte zu addieren? Ich habe bisher keinen Befehl finden können, der rechnet (außer zählen).

Auf die Gefahr, dass diese Fragen alle ind das SelfC-Forum gehören (das ich leider nicht finden kann) schicke ich dieses Posting jetzt ab.

Außerdem gefällt es mir hier (bis auf einige Lernzyklen) ganz gut!

[image:http://bitwoks.de/~images/Absturz.gif

Liebe Grüße

Tom

  1. Hallo,

    [...] Nun habe ich ja mal C gelernt.

    Ich weiss ja nicht, wass dein Script alles so macht, aber vielleicht solltest
    du erstmal das optimieren. Es koennte ueberigens sein, dass du durchaus keine
    grossen Geschwindigkeitsunterschiede feststellen kannst. Wenn dein Script nur
    eine Datei einliest und auswertet, duerfte das teuerste eh I/O-Operationen
    sein.

    Allerdings habe ich das nie auf dem Linux-Rechner angewandt sondern nur aud
    DOSen. Kann mir da einer kurz erklären, was ich machen muss, damit das auf
    dem Linux-Rechner klappt? (Das war die erste Frage)

    Wenn du dich strikt an ANSI-C haelst, duerfte kein grosser Unterschied
    bestehen.

    Für den Fall, dass ich das hinbekomme, möchte ich das Ergebnis trotzdem in
    HTML (also über die PHP-Schnittstelle) ausgeben.

    Warum ausgerechnet ueber PHP? Das man auch mit C CGI-Programme schreiben kann,
    weisst du?

    Kann ich dafür popen() benutzen und wie müßte ich das machen? (das war die
    zweite Frage)

    Entweder popen() (bzw. einen Aehnlichen Mechanismus), oder komplizierter: eine
    HTTP-Request. Je nach dem, ob php als Executable vorhanden ist oder nicht.

    Wenn ich bei PHP bleiben sollte für die Auswertung (wegen der schönen
    Diagramme die da möglich sind -> gd-lib),

    Die GDlib ist in C geschrieben :-)

    Gruesse,
     CK

    1. Hallo Christian,

      danke für die Antwort so mitten in der Nacht. Aber tagsüber war es in meinem Büro nicht zum Aushalten, darum sitze ich jetzt hier.

      Ich weiss ja nicht, wass dein Script alles so macht, aber vielleicht solltest
      du erstmal das optimieren.

      Das würde ich gerne tun. Wahrscheinlich könnte ich es tunen, wenn ich nicht Zeilenweise einlese, sondern immer ein ganzes Array mit Zeilen vollknalle?? (das erste Fragezeichn ist für mich, das zweite für Dich, nicht dass sich wieder ein Deutschfanatiker beschwert)

      Es koennte ueberigens sein, dass du durchaus keine
      grossen Geschwindigkeitsunterschiede feststellen kannst. Wenn dein Script nur
      eine Datei einliest und auswertet, duerfte das teuerste eh I/O-Operationen
      sein.

      Das befürchte ich auch.

      Wenn du dich strikt an ANSI-C haelst, duerfte kein grosser Unterschied
      bestehen.

      Welche Entwicklungsumgebungen für C kann man denn für Linux empfehlen? Ich bin natürlich von der guten alten Broland IDE (C 2.0) verwöhnt gewesen. Auf Grafik lege ich allerdings keinen Wert.

      Für den Fall, dass ich das hinbekomme, möchte ich das Ergebnis trotzdem in
      HTML (also über die PHP-Schnittstelle) ausgeben.

      Warum ausgerechnet ueber PHP? Das man auch mit C CGI-Programme schreiben kann,
      weisst du?

      nö, bisher nicht. Aber darum stelle ich meine Fragen ja seit kurzem HIER. Ist so ziemlich das einzige Fprum, wo kompetente Antworten kommen.

      Kann ich dafür popen() benutzen und wie müßte ich das machen? (das war die
      zweite Frage)

      Entweder popen() (bzw. einen Aehnlichen Mechanismus), oder komplizierter: eine
      HTTP-Request. Je nach dem, ob php als Executable vorhanden ist oder nicht.

      Was bedeutet: PHP als Executable... Muss ich da eine zweite Instanz starten?

      Grüße aus Brausnchweig. Wird so langsam kühler hier. Puhh, heute waren hier 36 Grad draussen. Drinnen bin ich "nur" bis 29 gekommen.

      Tom

      1. hi,

        Wahrscheinlich könnte ich es tunen, wenn ich nicht zeilenweise einlese, sondern immer ein ganzes Array mit Zeilen vollknalle?? (das erste Fragezeichn ist für mich, das zweite für Dich, nicht dass sich wieder ein Deutschfanatiker beschwert)

        Hier! *g* zuviele Fragezeichen erhöhen die Lesbarkeit eines Textes nur bedingt, damit du's weißt. Setzen.

        Wenn dein Script nur eine Datei einliest und auswertet, duerfte das teuerste eh I/O-Operationen sein.
        Das befürchte ich auch.

        was ist daran zu befürchten? Es klingt eher beruhigend  -  falls du keinen älteren 486er benutzt

        Welche Entwicklungsumgebungen für C kann man denn für Linux empfehlen?

        wir haben vor einiger Zeit mal nen Disput dazu geführt, los gings mit Nachfragen zum gcc. Ich kann dir aber fürs Archiv auch keinen Suchstring anbieten, weiß selber nicht mehr genau, wonach ich suchen müßte. Auf jeden Fall gibts im Forums-Archiv dazu was, versuchs mal.

        Was bedeutet: PHP als Executable... Muss ich da eine zweite Instanz starten?

        warum beharrst du hier nur auf PHP? Christian hat dir doch zu erklären versucht, daß du _dasselbe_ (was Funktionalität angeht) auch mit C/C++ machen kannst. Die Frage geht eher dahin, auf welcher Plattform deine Anwendung letzten Endes laufen soll oder ob es konsequent eine CGI-Anwendung wird.

        aktuelle Temperatur in Berlin-Mitte: 29 Grad Celsius

        Christoph S.

        1. Hallo Thomas,

          ja ich denke das komplette einlesen ist weitaus schneller als jede Zeile.

          Ich würde hingegen nur die neuen Zeilen einlesen und die alten irgendwo schon fertig bearbeitet ablegen. Man konnte dann meintewegen einmal am Tag die ganze Datei neu einlesen und den Rest des Tages nur die Veränderungen, oder wie auch immer die Sachen prüfen - da gibt es sicher viele Ansätze.

          Dafür, wie man an die Neuerungen kommt, gibt es sicher diverse Lösungen, je nachdem wie sicher Du prüfen willst.
          Eine einfache wäre sicher sich die Zeilenanzahl zu merken und dann von dort an immer weiterzuarbeiten und die Zeilenanzahl erhöhen. das Ablegen aller End-Werte dann entweder in einer dauernden Session, oder in einer zweiten datei. Denke das ist weitaus schneller als jedesmal 1.6Mio Zeilen einlesen.
          Man könnte auch noch andere Mechanismen einbauen, die den Traffic für diesen Prozess minimieren, so z.B. das man zuerst schaut wieviele neuen Einträge, sind diese so Minimal(meinetwegen 10 oder 20), das keine grafische Änderung entsteht, wird das Script garnicht ausgeführt, dann allerdings auch nicht die Zeilenanzahl hochsetzen.

          Ich denke so ist es am besten, denn C ist in deinem Fall wahrscheinlich nicht in dem Maße schneller wie Du Dir das vorstellst.

          Michael R.

          1. Hallo,

            ja ich denke das komplette einlesen ist weitaus schneller als
            jede Zeile.

            Wie kommst du denn auf diesen Trichter? Warum sollte es schneller
            sein ca. 200MB (1,6 Mio. Zeilen, pro Zeile ca. 170 Byte) komplett in
            den Speicher zu schreiben und dann da zu verarbeiten als 1,6 Mio mal
            ca. 170 Bytes auszulesen und zu verarbeiten?
            Du vergisst, dass der Speicher kein beliebig schnelles Medium ist.
            Ganz im Gegenteil, bei der Kommunikation mit dem RAM ist sehr viel
            Overhead enthalten. Mal ganz abgesehen davon dass das alloziieren
            von 200MB Speicher auch sehr leicht in die Hose gehen kann.

            Nene, wie immer gilt es einen Mittelweg zu finden. Zeichenweise
            einzulesen ist sicher Quark. Aber die ganze Datei einzulesen ist
            noch viel mehr Quark.

            Ich würde hingegen nur die neuen Zeilen einlesen und die alten
            irgendwo schon fertig bearbeitet ablegen.

            Woher weisst du, dass es alte Zeilen gibt? :-)

            Dafür, wie man an die Neuerungen kommt, gibt es sicher diverse
            Lösungen, je nachdem wie sicher Du prüfen willst.

            Alte groesse im Gedaechtnis behalten, neue Groesse in Erfahrung
            bringen und per fseek() den Datei-Pointer an die richtige Stelle in
            der Datei setzen.

            Eine einfache wäre sicher sich die Zeilenanzahl zu merken und dann
            von dort an immer weiterzuarbeiten und die Zeilenanzahl erhöhen.

            Sinnlos. Dann muesste man ja die Zeilen trotzdem alle einlesen.

            Ich denke so ist es am besten, denn C ist in deinem Fall
            wahrscheinlich nicht in dem Maße schneller wie Du Dir das
            vorstellst.

            Das haengt davon ab, was in dem Script alles geschieht. Das sagte
            ich ja bereits.

            Gruesse,
             CK

            1. Hallo,

              ja ich denke das komplette einlesen ist weitaus schneller als
              jede Zeile.

              Wie kommst du denn auf diesen Trichter? Warum sollte es schneller
              sein ca. 200MB (1,6 Mio. Zeilen, pro Zeile ca. 170 Byte) komplett in
              den Speicher zu schreiben und dann da zu verarbeiten als 1,6 Mio mal
              ca. 170 Bytes auszulesen und zu verarbeiten?

              Da ist schon was dran. 200MB einzulesen ist Quatsch. Die Datei hat Stand heute 115MB. Eine Woche habe ich noch, bis der Monat wieder voll ist. Rein nach Milchmädchenrechnung werden es demnach 153MB. (wenn ich hier noch viel poste, könnten es auch 150k mehr werden *gg*).

              Du vergisst, dass der Speicher kein beliebig schnelles Medium ist.
              Ganz im Gegenteil, bei der Kommunikation mit dem RAM ist sehr viel
              Overhead enthalten. Mal ganz abgesehen davon dass das alloziieren
              von 200MB Speicher auch sehr leicht in die Hose gehen kann.

              Nene, wie immer gilt es einen Mittelweg zu finden. Zeichenweise
              einzulesen ist sicher Quark. Aber die ganze Datei einzulesen ist
              noch viel mehr Quark.

              Das Einlesen in Blöcken sit da bestimmt eleganter. Nur liegen die Zeilenenden dann irgendwie, aber garantiert nicht auf Blockgrenze.

              Ich werde wohl nicht drum herumkommen, doch beide Wege zu gehen: C UND das blockweise Lesen. Ein Speicherzugriff dauert ca. 8ns, ein Plattenzugriff dauert dagegen 8ms. Der bytestream ist real bis ca. 10Mbyte pro Sek. hochzupuschen. Also das würde schon was bringen.

              Ich würde hingegen nur die neuen Zeilen einlesen und die alten
              irgendwo schon fertig bearbeitet ablegen.

              Woher weisst du, dass es alte Zeilen gibt? :-)

              Genau das ist das Problem. Man muss wahrscheinlich im BIN-Mode blind reingreifen in die Datei, éinen Block lesen, den Rest der ersten Zeile wegschmeißen, den Anfang der letzten Zeile wegschmeißen, dann den neuen Einsprungspunkt berechnen für den nächsten Block (es ändert sich ja zum Glück nix mehr am alte Teil der Datei) usw usw.

              Aber dafür halte ich PHP nicht für geeignet.

              Dafür, wie man an die Neuerungen kommt, gibt es sicher diverse
              Lösungen, je nachdem wie sicher Du prüfen willst.

              Alte groesse im Gedaechtnis behalten, neue Groesse in Erfahrung
              bringen und per fseek() den Datei-Pointer an die richtige Stelle in
              der Datei setzen.

              Eine einfache wäre sicher sich die Zeilenanzahl zu merken und dann
              von dort an immer weiterzuarbeiten und die Zeilenanzahl erhöhen.

              Sinnlos. Dann muesste man ja die Zeilen trotzdem alle einlesen.

              Ja, wir haben variable Satzlänge. Ein DirectAccess ist also nicht möglich.

              Ich denke so ist es am besten, denn C ist in deinem Fall
              wahrscheinlich nicht in dem Maße schneller wie Du Dir das
              vorstellst.

              Das wäre eben auszuprobieen. Nur ich trau mich nicht. Mit C kann man sooo schön daneben greifen und dann ist der Server platt. Ich habe zwar noch einen "Übungsserver", aber da habe ich auch nur einen richtigen Fehlversuch frei.

              Muss ich mich also vorher noch mit DiskImage ziehen beschäftigen. Ihr seht: Kettenreaktion.

              Das haengt davon ab, was in dem Script alles geschieht. Das sagte
              ich ja bereits.

              Gruesse,
              CK

              Danke erstmal für den Dialog. Das hilft mir schon sehr, um meine Gedanken zu sortieren.

              Grüße aus Braunschweig

              Tom

              1. Tag,

                Das Einlesen in Blöcken sit da bestimmt eleganter. Nur liegen die
                Zeilenenden dann irgendwie, aber garantiert nicht auf Blockgrenze.

                Deswegen sollst du ja auch keine Bloecke, sondern Zeilen einlesen ;-)
                Gerade bei einer Sprache wie PHP koennte ich mir vorstellen, dass sie
                intern mit Lese-Puffern arbeitet.

                Ich werde wohl nicht drum herumkommen, doch beide Wege zu
                gehen: C UND das blockweise Lesen.

                Warum? Dateien sind keine Streams, fuer sowas gibt es doch fgets().
                Ansonsten benutze halt I/O-Vektoren (vread()). Die Puffer dort
                duerften effizienter sein, als du es implementieren koenntest.

                Genau das ist das Problem. Man muss wahrscheinlich im BIN-Mode
                blind reingreifen in die Datei, éinen Block lesen, den Rest der
                ersten Zeile wegschmeißen, den Anfang der letzten Zeile
                wegschmeißen, dann den neuen Einsprungspunkt berechnen für den
                nächsten Block (es ändert sich ja zum Glück nix mehr am alte Teil
                der Datei) usw usw.

                Wenn es wirklich neue Zeilen gibt und du nur einen Teil verarbeiten
                musst, dann ist der Weg, den ich unten Beschrieben habe (fseek()),
                der sinnvollste.

                Eine einfache wäre sicher sich die Zeilenanzahl zu merken
                und dann von dort an immer weiterzuarbeiten und die
                Zeilenanzahl erhöhen.

                Sinnlos. Dann muesste man ja die Zeilen trotzdem alle einlesen.

                Ja, wir haben variable Satzlänge. Ein DirectAccess ist also nicht
                möglich.

                Doch. Habe ich doch geschrieben: alte Groesse der Datei speichern,
                vor dem oeffnen einen stat() absetzen und mit fseek() den Filepointer
                an die Stelle neuegroesse-altegroesse setzen. Dann solltest du am
                Anfang der ersten neuen Zeile stehen.

                Ich denke so ist es am besten, denn C ist in deinem Fall
                wahrscheinlich nicht in dem Maße schneller wie Du Dir das
                vorstellst.

                Das wäre eben auszuprobieen. Nur ich trau mich nicht. Mit C kann
                man sooo schön daneben greifen und dann ist der Server platt.

                Hae?
                Mit C kann man genau so viel oder wenig kaputt machen wie mit PHP.
                Das Schlimmste, was dir passieren kann, ist ein core dump, solange
                du nicht mit produktiven Daten testest.

                Gruesse,
                 CK

              2. Hallo,

                Da ist schon was dran. 200MB einzulesen ist Quatsch. Die Datei hat Stand heute 115MB. Eine Woche habe ich noch, bis der Monat wieder voll ist. Rein nach Milchmädchenrechnung werden es demnach 153MB. (wenn ich hier noch viel poste, könnten es auch 150k mehr werden *gg*).

                Dann frage ich mich, warum es nicht besser wäre, diese Logdatei öfters  zu wechseln, also beispielsweise wöchentlich oder aucht täglich.
                Dann könntest Du auch die Auswertungen der 'inaktiven' Dateien des zu beobachtenden Zeitraums mittels cron-job bereits vorberieten, wodurch das Berechnen der aktuellen Auswertung im wesenlichen darin besteht, die bestehende Auswertung um die Daten aus dem aktiven Logfile zu ergänzen. Das würde für die Präsentationsaufbereitung viel Zeit sparen, da sich ja  die Werte aus der Vergangenheit nicht mehr ändern können, also auch deren Einfluß auf die Auswertung konstant ist.

                Wie Du das dann realisierst, ob in PHP oder C ist schon eher nebensächlich, da die aktuell zu verarbeitende Datenmenge wesentlich geringer ist.

                Grüße
                  Klaus

                1. Hallo,

                  Da ist schon was dran. 200MB einzulesen ist Quatsch. Die Datei hat Stand heute 115MB. Eine Woche habe ich noch, bis der Monat wieder voll ist. Rein nach Milchmädchenrechnung werden es demnach 153MB. (wenn ich hier noch viel poste, könnten es auch 150k mehr werden *gg*).

                  Dann frage ich mich, warum es nicht besser wäre, diese Logdatei öfters  zu wechseln, also beispielsweise wöchentlich oder aucht täglich.
                  Dann könntest Du auch die Auswertungen der 'inaktiven' Dateien des zu beobachtenden Zeitraums mittels cron-job bereits vorberieten, wodurch das Berechnen der aktuellen Auswertung im wesenlichen darin besteht, die bestehende Auswertung um die Daten aus dem aktiven Logfile zu ergänzen. Das würde für die Präsentationsaufbereitung viel Zeit sparen, da sich ja  die Werte aus der Vergangenheit nicht mehr ändern können, also auch deren Einfluß auf die Auswertung konstant ist.

                  Wie Du das dann realisierst, ob in PHP oder C ist schon eher nebensächlich, da die aktuell zu verarbeitende Datenmenge wesentlich geringer ist.

                  Grüße
                    Klaus

                  Hallo Klaus,

                  da gibt es natürlich viele Philosophien. Ich hatte ja schon erwähnt, dass für jden Dateiwechsel der iptraf (der läuft im Hintergrund) gestoppt werden muss, damit hinterher eine neue Datei angelegt wird. Ich kopiere natürlich die aktuell laufende Log-Datei öfter. Sie kann man dann auch mit shell-Kommands zerlegen. z.B. lassen sich mit grep alles Tage separieren.

                  Ich denke, ich müsste mich einfach mal mehr mit der Shellprogrammierung und mit Perl auseinandersetzen. Es fehlt einfach die Zeit, ein intelligentes Konzept hierfür auszudenken, aufzubauen, auszuprobieren, zu implementieren, die Kollegen einzuweisen, die es dann täglich durchführen, Rechte zu vergeben und endlich wieder Ruhe zu haben...

                  Provisorien halten sich immer am Längsten.

                  Gruß

                  Tom

      2. Hallo,

        danke für die Antwort so mitten in der Nacht. Aber tagsüber war es in
        meinem Büro nicht zum Aushalten, darum sitze ich jetzt hier.

        Oh, ich bin stattdessen daheim vor dem PC gesessen ;-)

        Ich weiss ja nicht, wass dein Script alles so macht, aber vielleicht
        solltest du erstmal das optimieren.

        Das würde ich gerne tun. Wahrscheinlich könnte ich es tunen, wenn ich nicht
        Zeilenweise einlese, sondern immer ein ganzes Array mit Zeilen vollknalle??

        Das kann ich dir so auf Anhieb leider nicht beantworten. Ich weiss nicht, wie
        du deine Funktion implementiert hast

        Wenn du dich strikt an ANSI-C haelst, duerfte kein grosser Unterschied
        bestehen.

        Welche Entwicklungsumgebungen für C kann man denn für Linux empfehlen?

        Keine.
        Ich mag keine IDEs :-)

        Für den Fall, dass ich das hinbekomme, möchte ich das Ergebnis
        trotzdem in HTML (also über die PHP-Schnittstelle) ausgeben.

        nö, bisher nicht.

        Klar geht das. Genau wie mit Perl oder Bash oder Shell oder jeder beliebigen
        anderen Programmiersprache, die Environment-Variablen auslesen koennen und in
        die Standard-Ausgabe schreiben koennen.

        Aber darum stelle ich meine Fragen ja seit kurzem HIER.
        Ist so ziemlich das einzige Fprum, wo kompetente Antworten kommen.

        Danke :-)

        Was bedeutet: PHP als Executable...

        PHP als eine ausfuehrbare Datei. Executable eben :-)

        Muss ich da eine zweite Instanz starten?

        Genau das macht popen() doch. Es startet eine Shell-Instanz und fuehrt darin
        den Prozess aus.
        Aber wie gesagt, du brauchst PHP eigentlich nicht.

        Grüße aus Brausnchweig. Wird so langsam kühler hier. Puhh, heute waren hier
        36 Grad draussen. Drinnen bin ich "nur" bis 29 gekommen.

        Hier sinds immer noch 32°C :/ schlafen kann ich erstmal vergessen.

        Gruesse,
         CK

  2. Hallo Tom,

    [...]

    Wenn ich bei PHP bleiben sollte für die Auswertung (wegen der schönen Diagramme die da möglich sind -> gd-lib), wie kann ich die Variable für die maximale Ausführeungszeit nur für dieses Script hochsetzen? (das war dann die dritte Frage)

    zu PHP und C kann ich Dir nicht viel sagen, ich kenne mich eher mit Perl aus...
    Aber zu GD (die gibt es auch unter Perl bzw. wird wohl das Gleiche sein):
    Das ist sehr schön! Ich habe damit auch schon "rumgespielt", aber habe es irgendwann (für meine Zwecke) verworfen, weil man damit keine Einheitlichkeit hinbekommt. Ich kann Dir jetzt nicht mehr genau sagen, was mich störte, aber ich brauchte mehrere Charttypen, die einfach irgendwie vom Design nicht so zueinander paßten.

    Die Lösung war ein Roxenserver (http://www.roxen.com). Ist im Prinzip wie der Apache, nur noch einfacher zu Konfigurieren und hat wirklich gute Module, u.a. für Grafik.
    In Verbindung mit einer DB kannst Du da schnell Charts basteln, siehe auch mein kleines Projekt (http://www.w3research.com).

    Gibt es in der bash eine Möglichkeit, Spaltenwerte zu addieren? Ich habe bisher keinen Befehl finden können, der rechnet (außer zählen).

    -> Perl, kein Problem! Oder besser: Daten in MySQL importieren und dann weitermachen....

    Alles Gute,
    Reiner

    1. Hallo Reiner,

      nun bin ich gerade wieder auf der ESC-Taste gelandet (der blöde VI hat mich dazu gebracht) und alles, was hier schon geschreiben hatte, war wieder weg...

      Die Lösung war ein Roxenserver (http://www.roxen.com). Ist im Prinzip wie der Apache, nur noch einfacher zu Konfigurieren und hat wirklich gute Module, u.a. für Grafik.
      In Verbindung mit einer DB kannst Du da schnell Charts basteln, siehe auch mein kleines Projekt (http://www.w3research.com).

      Gibt es in der bash eine Möglichkeit, Spaltenwerte zu addieren? Ich habe bisher keinen Befehl finden können, der rechnet (außer zählen).

      -> Perl, kein Problem! Oder besser: Daten in MySQL importieren und dann weitermachen....

      Das mit Roxen werde ich mal etwas später ausprobieren. Sie Qualität von Deiner Site kann ich (noch) nicht leisten. Sieht natürlich gut aus.

      Die MySQL-Lösung habe ich noch nicht probiert. Ich habe inzwischen allerdings auch 1.600.000 Zeilen pro Monat. Da wird MySQL auch schon leicht stöhnen, oder?

      Außerdem müssen die Bytewerte von Strings befreit werden.
      Beispiel:

      Wed May 22 19:15:45 2002; TCP; eth0; 52 bytes; from 194.25.16.162:80 to 217.5.85.41:1794; first packet (SYN)
      Wed May 22 19:15:50 2002; TCP; eth0; 40 bytes; from 217.5.85.41:1794 to 194.25.16.162:80; Connection reset; 10 packets, 1177
       bytes; opposite direction 10 packets, 3870 bytes
      Wed May 22 19:15:50 2002; TCP; eth0; 52 bytes; from 217.5.85.41:1795 to 194.25.16.162:80; first packet (SYN)

      Ich werde da mal dranbleiben

      Gruß

      Tom

      1. Hallo Tom,

        Die MySQL-Lösung habe ich noch nicht probiert. Ich habe inzwischen allerdings auch 1.600.000 Zeilen pro Monat. Da wird MySQL auch schon leicht stöhnen, oder?

        das sehe ich kein Problem.

        Außerdem müssen die Bytewerte von Strings befreit werden.
        Beispiel:

        Wed May 22 19:15:45 2002; TCP; eth0; 52 bytes; from 194.25.16.162:80 to 217.5.85.41:1794; first packet (SYN)
        Wed May 22 19:15:50 2002; TCP; eth0; 40 bytes; from 217.5.85.41:1794 to 194.25.16.162:80; Connection reset; 10 packets, 1177
        bytes; opposite direction 10 packets, 3870 bytes
        Wed May 22 19:15:50 2002; TCP; eth0; 52 bytes; from 217.5.85.41:1795 to 194.25.16.162:80; first packet (SYN)

        Das kannst Du mit Reg.Expressions lösen.

        Reiner