flashnfantasy: LogFormat-Direktive für jede einzelne Abfrage

Hallo,

was ich suche ist die Möglichkeit, in dem Logfile des Apaches die einzelnen Log einer Anfrage insgesamt zuzuordnen.

So ist zB ein Auszug der Ausgabe momentan

[20050615 072932] localhost 3076/712 15625 304 [[GET /hilfe/iereload.gif HTTP/1.1]] "http://forum/frame.php?action=profil"

Wobei:

3076/712                                Prozess-ID/Thread-ID
[[GET /hilfe/iereload.gif HTTP/1.1]]    Befehlszeile
"http://forum/frame.php?action=profil"  URL
15625                                   Anzahl gesendeter Bytes

Jetzt das Problem: gleiche Anfrage nochmals, es werden wieder über mehrere Threads die notwendigen Daten geladen.

d.h. aber auch:
alle Anfragen haben die gleiche Prozess-ID, Befehlszeile und URL,
aber jede Anfrage teilt sich auf in mehrere Thread-ID

Was ich jetzt suche ist die Möglichkeit, jede Anfrage zusammenzufassen nach allen Befehlszeilen.

  • Prozess-ID eignet sich nicht, weil gleich für mehrere Anfragen
  • Thread-ID eignet sich nicht, weil unterschiedlich für gleiche Anfragen
  1. Hi,

    was ich suche ist die Möglichkeit, in dem Logfile des Apaches die einzelnen Log einer Anfrage insgesamt zuzuordnen.

    Pro HTTP-Request steht im Apache-Log genau eine Zeile (es kommt ja auch nur genau eine Antwort auf eine Anfrage). Was willst Du da also zusammenfassen, wenn es pro Anfrage sowieso nur eine Zeile gibt?

    So ist zB ein Auszug der Ausgabe momentan
    [20050615 072932] localhost 3076/712 15625 304 [[GET /hilfe/iereload.gif HTTP/1.1]] "http://forum/frame.php?action=profil"

    Hm, das ist nicht das übliche Logformat des Apache, insofern ist die Interpretation etwas schwierig, ohne die zugehörigen Zeilen aus der httpd.conf, in denen das Logformat definiert ist.

    Daher nur die Vermutung zu folgendem:

    Wobei:
    3076/712                                Prozess-ID/Thread-ID
    [[GET /hilfe/iereload.gif HTTP/1.1]]    Befehlszeile
    "http://forum/frame.php?action=profil"  URL
    15625                                   Anzahl gesendeter Bytes

    In dem, was Du als "Befehlszeile" bezeichnest, steht die angeforderte URL (von welchem Server steht weiter vorne: "localhost".

    Das, was Du als "URL" bezeichnest, ist vermutlich der HTTP-Referer.

    Jetzt das Problem: gleiche Anfrage nochmals, es werden wieder über mehrere Threads die notwendigen Daten geladen.

    Nochmals: Pro Anfrage eine Antwort des Servers ==> genau eine Zeile im access.log des Servers.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Pro HTTP-Request steht im Apache-Log genau eine Zeile (es kommt ja auch nur genau eine Antwort auf eine Anfrage). Was willst Du da also zusammenfassen, wenn es pro Anfrage sowieso nur eine Zeile gibt?

      Ich will einfach nur rauskriegen, welche Websites viel Traffic und lange Aufbauzeiten brauchen.
      Wenn eine Website aber sich aufteilt in verschiedene HTTP_Requests, dann wird das schwierig.
      Der Aufbau wird durch PHP gesteuert und kann daher total unterschiedlich ausfallen.

      So ist zB ein Auszug der Ausgabe momentan
      [20050615 072932] localhost 3076/712 15625 304 [[GET /hilfe/iereload.gif HTTP/1.1]] "http://forum/frame.php?action=profil"

      Hm, das ist nicht das übliche Logformat des Apache, insofern ist die Interpretation etwas schwierig, ohne die zugehörigen Zeilen aus der httpd.conf, in denen das Logformat definiert ist.

      Ja, mir fehlte einfach auch die Zeit für eine Abfrage (Format %D) und Anzahl der gesendeten Bytes (%B).

      In dem, was Du als "Befehlszeile" bezeichnest, steht die angeforderte URL (von welchem Server steht weiter vorne: "localhost".

      Nein, localhost ist nicht der anfordernde Server sondern der kanonische Name des Apache-Server. Und der ist nur deshalb drinnen, weil ich unter diesem Logfile mehrere virtuelle Hosts habe.

      Nochmals: Pro Anfrage eine Antwort des Servers ==> genau eine Zeile im access.log des Servers.

      So ein Mist, und jede Seite stellt mehrere Anfragen, und das wollte ich halt zusammen haben. Und gleich aus dem Log-File auswerten...

      1. Hi,

        In dem, was Du als "Befehlszeile" bezeichnest, steht die angeforderte URL (von welchem Server steht weiter vorne: "localhost".

        Nein, localhost ist nicht der anfordernde Server sondern der kanonische Name des Apache-Server.

        Wie kommst Du jetzt darauf, daß irgendein Server etwas anfordert?
        Die Anforderung (Request) kommt vom Client, nicht vom Server.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          In dem, was Du als "Befehlszeile" bezeichnest, steht die angeforderte URL (von welchem Server steht weiter vorne: "localhost".

          Nein, localhost ist nicht der anfordernde Server sondern der kanonische Name des Apache-Server.

          Wie kommst Du jetzt darauf, daß irgendein Server etwas anfordert?
          Die Anforderung (Request) kommt vom Client, nicht vom Server.

          cu,
          Andreas

          Ups, habe mich wohl falsch ausgedrückt.
          Klar hast du recht. Hatte deine erste Antwort etwas unüberlegt beantwortet.
          'localhost' ist erstmal für mich uninteressant, ich habe noch ein 'localforum', ein 'localtest' usw...

          Was mich eher interessiert ist, wie kriege ich alle HTTP-Requests im Zusammenhang einer Website erfasst.
          Also schlimmstenfalls auch die ganzen Requests, die mit JavaScript getstartet werden (JS baut bei mir dynamisch Bildchen in die Seite ein).

      2. hi,

        So ein Mist, und jede Seite stellt mehrere Anfragen,

        meinst du damit die zusätzlichen requests für in eine seite eingebundene bilder, externe css-/javascript-dateien etc.?

        und das wollte ich halt zusammen haben. Und gleich aus dem Log-File auswerten...

        die sollten ja - so fern du den referrer als verlässlich ansehen möchtest - dann eigentlich alle den gleichen referrer haben - eben den URL der seite, die sie "eingebunden" hat.

        beispiel:
        client fordert seite /blah/xyz.htm an.
        diese seite enthält die bilder 1.jpg und 2.gif, sowie format.css

        also werden jetzt 1.jpg, 2.gif und format.css mit dem referrer http://www.example.com/blah/xyz.htm angefordert - das wäre also ein annähernd verwertbares kennzeichen.

        (achtung: die nächste per link-klick angeforderte seite wird vermutlich auch den referrer http://www.example.com/blah/xyz.htm übermittelt bekommen - hier müsstest du also aufpassen, bzw. dir ein unterscheidungskriterium suchen, "was sind eingebundene dateien, und was sind eigenständige neue seiten?". ggf. reicht dir dafür ja, bei einem konsequenten benennungssystem, die dateiendung aus.)

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi wahsaga

          die sollten ja - so fern du den referrer als verlässlich ansehen möchtest - dann eigentlich alle den gleichen referrer haben - eben den URL der seite, die sie "eingebunden" hat.

          Leider ist das nicht der Fall.
          Jede Seite wird dynamisch aufgebaut, und der Aufbau hängt von den vorherigen Aktionen und Formularinformationen ab.

          Also ist das, was ich fälschlicherweise als URL (des Dokumentes) bezeichnet habe, kein Kriterium.
          Ich müsste referrer weiter unterteilen können...

          Gruß,
          Flash

          1. hi,

            Leider ist das nicht der Fall.
            Jede Seite wird dynamisch aufgebaut, und der Aufbau hängt von den vorherigen Aktionen und Formularinformationen ab.

            sorry, dann verstehe ich wohl noch nicht, welche information genau du eigentlich erhalten möchtest.

            Also ist das, was ich fälschlicherweise als URL (des Dokumentes) bezeichnet habe, kein Kriterium.
            Ich müsste referrer weiter unterteilen können...

            nach welchem kriterium?

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Zwei Sachen will ich wissen:

              • Wieviel Webtraffic verursacht eine Seite
              • Wie lange dauert es wirklich, um diese Seite bereitzustellen (Wie lange ist der Server insgesamt mit dieser Seite beschäftigt).

              Dabei ist zu beachten, daß viele Includes wie CSS-Dateien nicht jedesmal neu übertragen werden (Statuscode 304).

              Vorallem will ich Möglichkeiten der Optimierung erkennen.
              zB habe ich festgestellt, daß durch DOM erzeugte Grafiken nicht unbedingt gecached werden, was einen enormen zusätzlichen Traffic bedeutet...
              Solche Sachen möchte ich in Zukunft aus dem Log-File rauslesen können.

              1. Hi,

                Du brauchst also ein Auswertungsprogramm, das die einzelnen Logeinträge eines Besuchers zusammenfaßt - anhand der IP, anderer UA-Daten oder einer Session. Außerdem muß es noch ermitteln, welche Resourcen zu einer Seite gehören - hierzu wäre wie schon gesagt der Referrer hilfreich; wird zwar nicht immer mitgeliefert, aber meistens.

                freundliche Grüße
                Ingo

  2. Die Lösung für die Gesamtlast einer Seite ist nicht ganz trivial...

    LogFormat %r

    macht folgenden Eintrag

    GET /frameIndex.php?action=index&userID=2 HTTP/1.1

    der mittlere Teil ergibt die Seite, die man aufruft.
    Nun muß man nur noch an die CSS- und JS-Dateien, und logischerweise an die Grafiken der Seite rankommen.

    Wobei hier ein Schönheitsfehler dabei ist, %r gibt nicht die Seite wieder, sondern alle Requests, man muß sich nun die wirkliche Seitenaufrufe rausbasteln...

    LogFormat "%{Referer}i"

    Nun muß man überprüfen was in referer drinnen steht und das der Seite zuordnen.

    Dazu muß man noch beachten, ob die Daten wirklich geschickt werden, denn oftmals kommt nur der Status 304 (not modified) zurück, der natürlich nichts mit der Größe der Datei zu tun hat.

    Letztlich kann das sogar noch weiter sich verschachteln, wenn zB aus einer JS-Datei Grafiken aufgebaut werden (so wie in meinem Fall).

    Wenn in "%{Referer}i" die Seite steht, dann steht in %r die untergeordnete Request.

    1. hi,

      Wobei hier ein Schönheitsfehler dabei ist, %r gibt nicht die Seite wieder, sondern alle Requests

      das ist kein "schönheitsfehler", sondern genau so gedacht.

      dein verständnis von logfiles im allgemeinen verwundert mich allerdings immer noch irgendwie.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }