vlogger / web_traffic

Dieses Thema im Forum "Entwicklerforum" wurde erstellt von Bimon, 25. März 2013.

  1. Bimon

    Bimon New Member

    Hallo alle zusammen,

    ich selbst benutze ISPConfig mit nginx.

    Gerade habe ich in die Apache2 Config gesehen. Der CustomLog Eintrag mit dem vlogger Aufruf hat sich offenbar nicht verändert.

    In punkto nginx hat Till wohl das cron_daily.php Script erweitert. Dort wird unabhängig vom Webserver das Access-Log im Userverzeichnis von gestern ausgewertet.

    1. Erfasst das cron_daily.php Script nicht auch die Logs von Apache2, sodass der Traffic doppelt gezählt wird (vlogger + cron_daily.php)?

    2. Für die Traffic Erfassung in nginx habe ich einen evtl. besseren Vorschlag und bitte um Rückmeldung:
    Ich habe die Nginx vhosts angepasst. Das Access-Log aller vhosts wird in ein Logfile geschrieben. Dieser Umweg ist nötig, weil Nginx das Log nicht direkt an ein Script übergeben kann. Die Datei wird mit "tail -f" ausgelesen und an vlogger übergeben. Es ergibt sich eine sehr ähnliche Funktionalität wie mit Apache2. Das Log-Format kann mit Nginx nachgebildet werden.

    Folgende Konfigurationen und Skripte verwende ich:

    /usr/local/ispconfig/server/conf-custom/nginx_vhost.conf.master
    Code:
    ...
    access_log /var/log/nginx/access.log vlogger;
    ...
    
    /etc/nginx/nginx.conf
    Code:
    ...
    http {
    ...
    log_format vlogger '$server_name $remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent"';
    access_log /var/log/nginx/access.log vlogger;
    ...
    }
    ...
    
    Die access_log Direktiven in den vhosts könnten damit vollständig entfallen (wie in Apache2). Keine Ahnung, warum ich die dort nochmal aufgeführt habe.

    /usr/local/ispconfig/server/scripts/vlogger_nginx.sh
    Code:
    #!/bin/bash
    if [ -z "$(pidof vlogger)" ]
    then
    killall -q tail
    tail -f /var/log/nginx/access.log | /usr/local/ispconfig/server/scripts/vlogger -s access.log -t "%Y%m%d-access.log" -d "/etc/vlogger-dbi.conf" /var/log/ispconfig/httpd &
    fi
    
    Aufgerufen über Cronjob:
    Code:
    * * * * * root /usr/local/ispconfig/server/scripts/vlogger_nginx.sh >> /var/log/vlogger_nginx.log
    
    Das funktioniert sogar fast einwandfrei. Die Traffic Informationen werden nahezu sofort übernommen. Nur das cron_daily Skript überschreibt die access logs immer mit der natürlich leeren access.log in der Nacht. Ansonsten konnte ich keine Unstimmigkeiten feststellen.

    Was haltet ihr davon?

    Viele Grüße,
    Simon
     
  2. Till

    Till Administrator

    Soweit ich weiß haben die nginx Entwickler das pipen von logs auf scripte aus performance Gründen nicht eingebaut, daher haben wird auch nicht versucht einen workaround dafür zu finden. Hast Du mal getestet ob es performance Unterschiede der Log Varianten bei hoher Last gibt?
     
  3. Bimon

    Bimon New Member

    Performance habe ich nicht getestet. Ich sollte mir mal ein kleines Testsystem für ISPConfig aufsetzen :D

    In der Theorie sollte es Nginx aber nicht beeinträchtigen, denn es muss nicht darauf warten, dass der Logeintrag abgeholt / verarbeitet wird. Der Eintrag wird angehängt, damit ist Nginx fertig. Das auslesen durch tail -f kann dann parallel zur weiteren Ausführung von Nginx geschehen (anders als bei Apache2, da Apache2 das Skript startet). Die Datei dient quasi als Buffer zwischen Nginx und vlogger.

    Der einzige Performanceverlust den ich mir ausmalen kann, könnte durch parallel laufende Nginx Prozesse entstehen, die gleichzeitig das Log-File beschreiben wollen. Das hängt aber von der Implementierung von Nginx ab.

    Wenn gerade jemand ein System zum Testen parat hat, wäre eine Rückmeldung schön. Sonst werde ich mir mal eins einrichten.

    Bis dann!
     
  4. Bimon

    Bimon New Member

    Testergebnisse

    Testsystem: Raspberry Pi (700 MHz ARM, 512 MB RAM), Raspian, Nginx, ISPConfig (+Abhängigkeiten)

    Nach frischer Installation war kein Unterschied zu erkennen:
    Ohne vlogger:
    Code:
    ab -n 10000 -c 100 http://raspberrypi.fritz.box/
    This is ApacheBench, Version 2.3 <$Revision: 655654 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking raspberrypi.fritz.box (be patient)
    Completed 1000 requests
    Completed 2000 requests
    Completed 3000 requests
    Completed 4000 requests
    Completed 5000 requests
    Completed 6000 requests
    Completed 7000 requests
    Completed 8000 requests
    Completed 9000 requests
    Completed 10000 requests
    Finished 10000 requests
    
    
    Server Software:        nginx/1.2.1
    Server Hostname:        raspberrypi.fritz.box
    Server Port:            80
    
    Document Path:          /
    Document Length:        1915 bytes
    
    Concurrency Level:      100
    Time taken for tests:   29.095 seconds
    Complete requests:      10000
    Failed requests:        0
    Write errors:           0
    Total transferred:      21260000 bytes
    HTML transferred:       19150000 bytes
    Requests per second:    343.70 [#/sec] (mean)
    Time per request:       290.951 [ms] (mean)
    Time per request:       2.910 [ms] (mean, across all concurrent requests)
    Transfer rate:          713.58 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        2  137  20.2    140     213
    Processing:    52  153  47.2    145     531
    Waiting:       52  152  47.1    144     531
    Total:         56  289  50.6    285     671
    
    Percentage of the requests served within a certain time (ms)
      50%    285
      66%    288
      75%    290
      80%    291
      90%    296
      95%    304
      98%    547
      99%    615
     100%    671 (longest request)
    
    
    Mit vlogger:
    Code:
    ab -n 10000 -c 100 http://raspberrypi.fritz.box/
    This is ApacheBench, Version 2.3 <$Revision: 655654 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking raspberrypi.fritz.box (be patient)
    Completed 1000 requests
    Completed 2000 requests
    Completed 3000 requests
    Completed 4000 requests
    Completed 5000 requests
    Completed 6000 requests
    Completed 7000 requests
    Completed 8000 requests
    Completed 9000 requests
    Completed 10000 requests
    Finished 10000 requests
    
    
    Server Software:        nginx/1.2.1
    Server Hostname:        raspberrypi.fritz.box
    Server Port:            80
    
    Document Path:          /
    Document Length:        1915 bytes
    
    Concurrency Level:      100
    Time taken for tests:   28.258 seconds
    Complete requests:      10000
    Failed requests:        0
    Write errors:           0
    Total transferred:      21260000 bytes
    HTML transferred:       19150000 bytes
    Requests per second:    353.88 [#/sec] (mean)
    Time per request:       282.584 [ms] (mean)
    Time per request:       2.826 [ms] (mean, across all concurrent requests)
    Transfer rate:          734.71 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        2   11  20.0      6    1019
    Processing:    37  269 181.4    205    1102
    Waiting:       37  268 181.0    204    1102
    Total:         48  280 179.7    211    1200
    
    Percentage of the requests served within a certain time (ms)
      50%    211
      66%    216
      75%    222
      80%    231
      90%    585
      95%    695
      98%    901
      99%    962
     100%   1200 (longest request)
    
    
    Nach etwas verpulverter CPU-Zeit:
    Ohne vlogger:
    Code:
    ab -n 10000 -c 100 http://raspberrypi.fritz.box/
    This is ApacheBench, Version 2.3 <$Revision: 655654 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking raspberrypi.fritz.box (be patient)
    Completed 1000 requests
    Completed 2000 requests
    Completed 3000 requests
    Completed 4000 requests
    Completed 5000 requests
    Completed 6000 requests
    Completed 7000 requests
    Completed 8000 requests
    Completed 9000 requests
    Completed 10000 requests
    Finished 10000 requests
    
    
    Server Software:        nginx/1.2.1
    Server Hostname:        raspberrypi.fritz.box
    Server Port:            80
    
    Document Path:          /
    Document Length:        1915 bytes
    
    Concurrency Level:      100
    Time taken for tests:   33.748 seconds
    Complete requests:      10000
    Failed requests:        0
    Write errors:           0
    Total transferred:      21260000 bytes
    HTML transferred:       19150000 bytes
    Requests per second:    296.31 [#/sec] (mean)
    Time per request:       337.482 [ms] (mean)
    Time per request:       3.375 [ms] (mean, across all concurrent requests)
    Transfer rate:          615.19 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        2  132  28.0    140     170
    Processing:    61  204 383.2    146    3895
    Waiting:       57  204 383.1    145    3895
    Total:         65  336 383.9    285    4039
    
    Percentage of the requests served within a certain time (ms)
      50%    285
      66%    288
      75%    291
      80%    293
      90%    299
      95%    310
      98%   1421
      99%   3877
     100%   4039 (longest request)
    
    
    Mit vlogger:
    Code:
    ab -n 10000 -c 100 http://raspberrypi.fritz.box/
    This is ApacheBench, Version 2.3 <$Revision: 655654 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking raspberrypi.fritz.box (be patient)
    Completed 1000 requests
    Completed 2000 requests
    Completed 3000 requests
    Completed 4000 requests
    Completed 5000 requests
    Completed 6000 requests
    Completed 7000 requests
    Completed 8000 requests
    Completed 9000 requests
    Completed 10000 requests
    Finished 10000 requests
    
    
    Server Software:        nginx/1.2.1
    Server Hostname:        raspberrypi.fritz.box
    Server Port:            80
    
    Document Path:          /
    Document Length:        1915 bytes
    
    Concurrency Level:      100
    Time taken for tests:   48.061 seconds
    Complete requests:      10000
    Failed requests:        0
    Write errors:           0
    Total transferred:      21260000 bytes
    HTML transferred:       19150000 bytes
    Requests per second:    208.07 [#/sec] (mean)
    Time per request:       480.613 [ms] (mean)
    Time per request:       4.806 [ms] (mean, across all concurrent requests)
    Transfer rate:          431.98 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        1   11  32.5      4     279
    Processing:    52  467 298.6    406    3125
    Waiting:       51  466 298.6    405    3125
    Total:         58  478 297.8    412    3129
    
    Percentage of the requests served within a certain time (ms)
      50%    412
      66%    422
      75%    431
      80%    440
      90%    556
      95%    830
      98%   1433
      99%   2514
     100%   3129 (longest request)
    
    
    Die etwas schwächere Performance ist denke ich durch die zusätzliche Resourcen-Last durch vlogger zu erklären (frisst ganz gut bei derart vielen Anfragen). Die Last hat der Server sonst hoch konzentriert in der Nacht.

    Dazu ist das Testsystem ein Single-Core, also nichts mit echter Parallel-Verarbeitung.

    Und nun?
     
  5. Till

    Till Administrator

  6. Bimon

    Bimon New Member

    Problem ist, dass ein Resync der Webseiten erforderlich sein wird, um die access_log Direktive zu ändern.

    Kannst du mir noch was zu
    sagen?

    Das cron_daily.php Script lässt ja auch die Access-Logs rotieren und überschreibt das von vlogger erstellte Log mit der dann natürlich leeren access.log Datei.
     
  7. Till

    Till Administrator

    Ja, das ist aber mit einigen Einstellungen so dass sie nicht nach dem anlegen der ersten Seiten geändert werden sollten.

    Nein, denn vlogger schreibt den Traffic in aktuellen ISPConfig Versionen nicht mehr direkt in die DB. Das wurde deaktiviert da vlogger mit MySQL ab 5.5 dazu führt dass apache gelegentlich hängt und somit alle Seiten nicht mehr aufrufbar sind.
     

Diese Seite empfehlen