vlogger / web_traffic

#1
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
 

Till

Administrator
#2
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
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
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?
 
#6
Problem ist, dass ein Resync der Webseiten erforderlich sein wird, um die access_log Direktive zu ändern.

Kannst du mir noch was zu
Zitat von Bimon:
1. Erfasst das cron_daily.php Script nicht auch die Logs von Apache2, sodass der Traffic doppelt gezählt wird (vlogger + cron_daily.php)?
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.
 

Till

Administrator
#7
Problem ist, dass ein Resync der Webseiten erforderlich sein wird, um die access_log Direktive zu ändern.
Ja, das ist aber mit einigen Einstellungen so dass sie nicht nach dem anlegen der ersten Seiten geändert werden sollten.

1. Erfasst das cron_daily.php Script nicht auch die Logs von Apache2, sodass der Traffic doppelt gezählt wird (vlogger + cron_daily.php)?
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.
 

Werbung

Top