Im 6. Teil meiner Artikelserie beschäftigen wir uns mit einem Tool zur Auswertung der Log Files und zur Erzeugung von Webserver-Statistiken. Es stehen mehere freie Open Source Werkzeug zur Verfügung, ich habe mich für AWStats entschieden. Zunächst überprüfen wir, ob AWStats in den ubuntu 14.04 Repositories verfügbar ist und wenn ja, in welcher Version.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ apt-cache search awstats awstats - powerful and featureful web server log analyzer $ apt-cache showpkg awstats Package: awstats Versions: 7.2+dfsg-1 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packages) Description Language: File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packages MD5: 13563117d747b5d1acdce35986df9f8a Description Language: en File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_trusty_main_i18n_Translation-en MD5: 13563117d747b5d1acdce35986df9f8a Reverse Depends: Dependencies: 7.2+dfsg-1 - perl (0 (null)) apache2 (16 (null)) httpd (0 (null)) libnet-dns-perl (0 (null)) libnet-ip-perl (0 (null)) libgeo-ipfree-perl (0 (null)) liburi-perl (0 (null)) libnet-xwhois-perl (0 (null)) coreutils (2 7.4) Provides: 7.2+dfsg-1 - Reverse Provides: |
Wir sehen AWStats ist in der Version 7.2 verfügbar. Diese Version installieren wir mit dem folgenden Befehl:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $ apt-get install awstats Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libnet-xwhois-perl Suggested packages: libnet-dns-perl libnet-ip-perl libgeo-ipfree-perl liburi-perl The following NEW packages will be installed: awstats libnet-xwhois-perl 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 799 kB of archives. After this operation, 3,311 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://us.archive.ubuntu.com/ubuntu/ trusty/main awstats all 7.2+dfsg-1 [778 kB] Get:2 http://us.archive.ubuntu.com/ubuntu/ trusty/main libnet-xwhois-perl all 0.90-4 [21.0 kB] Fetched 799 kB in 0s (918 kB/s) Selecting previously unselected package awstats. (Reading database ... 98811 files and directories currently installed.) Preparing to unpack .../awstats_7.2+dfsg-1_all.deb ... Unpacking awstats (7.2+dfsg-1) ... Selecting previously unselected package libnet-xwhois-perl. Preparing to unpack .../libnet-xwhois-perl_0.90-4_all.deb ... Unpacking libnet-xwhois-perl (0.90-4) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up awstats (7.2+dfsg-1) ... Setting up libnet-xwhois-perl (0.90-4) ... |
Zur Bestimmung der Geo- und Netzlokation müssen wir noch zwei zusätzliche Pakete installieren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $ apt-get install libgeo-ipfree-perl libnet-ip-perl Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: libgeo-ipfree-perl libnet-ip-perl 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 604 kB of archives. After this operation, 1,182 kB of additional disk space will be used. Get:1 http://us.archive.ubuntu.com/ubuntu/ trusty/universe libgeo-ipfree-perl all 1.132870-1 [573 kB] Get:2 http://us.archive.ubuntu.com/ubuntu/ trusty/main libnet-ip-perl all 1.26-1 [31.5 kB] Fetched 604 kB in 0s (652 kB/s) Selecting previously unselected package libgeo-ipfree-perl. (Reading database ... 99636 files and directories currently installed.) Preparing to unpack .../libgeo-ipfree-perl_1.132870-1_all.deb ... Unpacking libgeo-ipfree-perl (1.132870-1) ... Selecting previously unselected package libnet-ip-perl. Preparing to unpack .../libnet-ip-perl_1.26-1_all.deb ... Unpacking libnet-ip-perl (1.26-1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up libgeo-ipfree-perl (1.132870-1) ... Setting up libnet-ip-perl (1.26-1) ... |
Nun müssen wir zunächst eine Konfiguration für AWStats anlegen. Dazu wechseln wir in das Verzeichnis /etc/awstats und kopieren die Datei awstats.conf nach awstats.mysubdomain.mydomain.tld.conf.
1 2 | $ cd /etc/awstats $ cp awstats.conf awstats.mysubdomain.mydomain.tld.conf |
Die neue Datei müssen wir nun in einigen Punkten anpassen. Die Datei ist sehr gut mit Kommentaren dokumentiert. Hier die von mir angepassten Zeilen:
1 2 3 4 5 6 7 8 | LogFormat=1 SiteDomain="mysubdomain.mydomain.tld" HostAliases="localhost 127.0.0.1 mysubdomain.mydomain.tld" AllowFullYearView=3 UseHTTPSLinkForUrl="/" LoadPlugin="tooltips" LoadPlugin="graphgooglechartapi" LoadPlugin="geoipfree" |
Als nächstes führen wir AWStats manuell aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ /usr/lib/cgi-bin/awstats.pl -config=mysubdomain.mydomain.tld -update Create/Update database for config "/etc/awstats/awstats.mysubdomain.mydomain.tld.conf" by AWStats version 7.2 (build 1.992) From data in log file "/var/log/apache2/access.log"... Phase 1 : First bypass old records, searching new record... Searching new records from beginning of log file... Phase 2 : Now process new records (Flush history on disk after 20000 hosts)... Warning: awstats has detected that some hosts names were already resolved in your logfile /var/log/apache2/access.log. If DNS lookup was already made by the logger (web server), you should change your setup DNSLookup=1 into DNSLookup=0 to increase awstats speed. Jumped lines in file: 0 Parsed lines in file: 66 Found 0 dropped records, Found 0 comments, Found 0 blank records, Found 0 corrupted records, Found 0 old records, Found 66 new qualified records. |
Der Domainname ist natürlich den tatsächlichen Gegebenheiten anzupassen.
Um die Statistik regelmäßig auszuführen wollen wir die Ausführung automatisieren. In den meisten Anleitungen, die ich gesehen habe, wird dafür nur ein cronjob eingesetzt. Das ist auf unserem System nicht ausreichend, da hier logrotate läuft und die Apache Logs durchrotiert. Das bedeutet, dass wir das AWStats script als prerotate job beim logrotate laufen lassen. Da das logrotate nur einmal am Tag läuft, könnte man noch zusätzliche Ausführungen per cronjob starten. Dann muss allerdings Sorge dafür tragen werden, dass die Ausführung nicht zur gleichen Zeit stattfindet. Weitere Erläuterungen zu der Thematik findet man in den AWStats FAQs. Mir genügt die tägliche Auswertung durch AWStats, so dass für mich die Konfiguration als prerotate job ausreichend ist.
Werfen wir einen Blick in die logrotate Konfiguration. In der Datei /etc/logrotate.d/apache2 finden wir die logrotate Konfiguration für die Apache Log Files.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ cat /etc/logrotate.d/apache2 /var/log/apache2/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if /etc/init.d/apache2 status > /dev/null ; then \ /etc/init.d/apache2 reload > /dev/null; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript } |
Wir sehen die Ausführung ist täglich und das script ist schon so gebaut, dass wir unseren auszuführenden prerotate Job in einer Datei im Verzeichnis /etc/logrotate.d/httpd-prerotate definieren können. Diese Datei wird laut logrotate Manual mit /bin/sh ausgeführt. Wir legen zunächst das nicht existierende Verzeichnis /etc/logrotate.d/httpd-prerotate und darin eine Datei awstats mit dem AWStats update Aufruf an.
1 2 | $ mkdir /etc/logrotate.d/httpd-prerotate $ echo "/usr/bin/perl /usr/lib/cgi-bin/awstats.pl -config=mysubdomain.mydomain.tld -update" >/etc/logrotate.d/httpd-prerotate/awstats |
Nun wollen wir noch die Apache Konfiguration anpassen, damit wir uns die Statistik auch anschauen können. Dazu legen wir im Verzeichnis /etc/apache2/conf-available eine neue Konfigurationsdatei awstats.conf mit folgendem Inhalt an.
1 2 3 4 5 6 7 8 9 10 11 | $ cat /etc/apache2/conf-available/awstats.conf Alias /awstatsclasses "/usr/share/awstats/lib/" Alias /awstats-icon "/usr/share/awstats/icon/" Alias /awstatscss "/usr/share/doc/awstats/examples/css" ScriptAlias /awstats/ /usr/lib/cgi-bin/ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch <Files "awstats.pl"> Require local Include /etc/apache2/misc/my-current-admin-host.conf </Files> |
Mit den Anweisungen in der Files Direktive beschränken wir den Zugriff auf das AWStats Perl Script. Ausführung ist nur möglich lokal vom Server oder von unserem Admin Host, bzw. Heimnetzwerk aus.
Nun müssen wir diese Konfiguration und das Apache cgi Modul noch aktivieren und den Apache Server restarten.
1 2 3 4 5 6 7 8 9 10 | $ a2enconf awstats Enabling conf awstats. To activate the new configuration, you need to run: service apache2 reload $ a2enmod cgi Enabling module cgi. To activate the new configuration, you need to run: service apache2 restart $ service apache2 restart * Restarting web server apache2 |
Unter der URL https://mysubdomain.mydomain.tld/awstats/awstats.pl können wir uns nun die Statistiken für den Zugriff auf unseren Webserver ansehen. In der URL ist natürlich die richtige Domain einzusetzen.
Leider zeigt mein Webbrowser Firefox an, dass unsere AWStats Seite gemischt Inhalte ausliefert, also https und http und damit unsicher ist! Nach ein wenig Internetrecherche habe ich herausgefunden, dass das Plugin graphgooglechartapi der Verursacher ist. Dieses Problem wurde in AWStats Version 7.3 behoben. Deshalb habe ich mich entschlossen auf eine neuere AWStats Version zu wechseln. In den ubuntu 14.04 Repositories ist jedoch keine aktuellere Version vorhanden, weshalb wir die letzte stabile AWStats Version 7.4 aus dem tar Archive von der AWStats Webpage installieren.
Wie wir sehen werden, ist die Verzeichnisstruktur jedoch eine andere, so dass wir unsere momentane AWStats Version deinstallieren müssen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ apt-get remove awstats Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: libnet-xwhois-perl linux-headers-3.19.0-49 linux-headers-3.19.0-49-generic linux-image-3.19.0-49-generic linux-image-extra-3.19.0-49-generic Use 'apt-get autoremove' to remove them. The following packages will be REMOVED: awstats 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 3,216 kB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 94833 files and directories currently installed.) Removing awstats (7.2+dfsg-1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... dpkg --purge awstats (Reading database ... 123691 files and directories currently installed.) Removing awstats (7.2+dfsg-1) ... Purging configuration files for awstats (7.2+dfsg-1) ... dpkg: warning: while removing awstats, directory '/etc/awstats' not empty so not removed |
Zunächst löschen wir unsere aktuelle Apache AWStats Konfiguration und legen eine gleichnamige leere Konfigurationsdatei an.
1 2 | $ rm /etc/apache2/conf-available/awstats.conf $ touch /etc/apache2/conf-available/awstats.conf |
Danach kopieren wir das AWStats 7.4 Archive in unser Home Verzeichnis auf unserem Server.
1 | $ scp awstats-7.4.tar.gz root@myserver |
Auf dem Server entpacken wir das Archive im Home Verzeichnis.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $ tar xvf awstats-7.4.tar.gz awstats-7.4/ awstats-7.4/tools/ awstats-7.4/tools/awstats_buildstaticpages.pl awstats-7.4/tools/awstats_updateall.pl awstats-7.4/tools/geoip_generator.pl awstats-7.4/tools/maillogconvert.pl awstats-7.4/tools/httpd_conf awstats-7.4/tools/nginx/ awstats-7.4/tools/nginx/README.txt awstats-7.4/tools/nginx/awstats-nginx.conf awstats-7.4/tools/nginx/awstats-fcgi.php awstats-7.4/tools/logresolvemerge.pl awstats-7.4/tools/awstats_exportlib.pl awstats-7.4/tools/xslt/ awstats-7.4/tools/xslt/awstats.xsd . . . . awstats-7.4/docs/scripts/lang-apollo.js awstats-7.4/docs/awstats_dev_plugins_hooks.html awstats-7.4/docs/styles.css awstats-7.4/docs/awstats_benchmark.html awstats-7.4/docs/awstats_config.html |
Dann ändern wir rekursiv Eigentümer und Gruppe für das ausgepackte Verzeichnis awstats-7.4.
1 | $ chown -R root:root awstats-7.4 |
Nun legen wir ein Unterverzeichnis awstats im Verzeichnis /usr/share an und verschieben den Inhalt des Verzeichnisses awstats-7.4 dort hin.
1 2 | $ mkdir /usr/share/awstats $ mv awstats-7.4/* /usr/share/awstats |
Danach müssen wir noch zwei Änderungen der Berechtigungen für das Perl Script awstats.pl durchführen, damit unser Apache das Script ausführen kann.
1 2 | $ chgrp www-data /usr/share/awstats/wwwroot/cgi-bin/awstats.pl $ chmod g+w /usr/share/awstats/wwwroot/cgi-bin/awstats.pl |
Schliesslich legen wir das Verzeichnis /var/lib/awstats neu an und ändern Besitzer und Berechtigungen:
1 2 3 | $ mkdir /var/lib/awstats $ chown www-data:www-data /var/lib/awstats/ $ chmod o-rx /var/lib/awstats/ |
Nun müssen wir AWStats noch konfigurieren. Dazu wechseln wir in das Verzeichnis /usr/share/awstats und führen das Konfigurationsscript aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | $ cd /usr/share/awstats $ perl tools/awstats_configure.pl ----- AWStats awstats_configure 1.0 (build 20140126) (c) Laurent Destailleur ----- This tool will help you to configure AWStats to analyze statistics for one web server. You can try to use it to let it do all that is possible in AWStats setup, however following the step by step manual setup documentation (docs/index.html) is often a better idea. Above all if: - You are not an administrator user, - You want to analyze downloaded log files without web server, - You want to analyze mail or ftp log files instead of web log files, - You need to analyze load balanced servers log files, - You want to 'understand' all possible ways to use AWStats... Read the AWStats documentation (docs/index.html). -----> Running OS detected: Linux, BSD or Unix Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'. If you want to use standard directory, you should first move all content of AWStats distribution from current directory: /usr/share/awstats to standard directory: /usr/local/awstats And then, run configure.pl from this location. Do you want to continue setup from this NON standard directory [yN] ? y -----> Check for web server install Enter full config file path of your Web server. Example: /etc/httpd/httpd.conf Example: /usr/local/apache2/conf/httpd.conf Example: c:\Program files\apache group\apache\conf\httpd.conf Config file path ('none' to skip web server setup): > /etc/apache2/conf-available/awstats.conf -----> Check and complete web server config file '/etc/apache2/conf-available/awstats.conf' Add 'Alias /awstatsclasses "/usr/share/awstats/wwwroot/classes/"' Add 'Alias /awstatscss "/usr/share/awstats/wwwroot/css/"' Add 'Alias /awstatsicons "/usr/share/awstats/wwwroot/icon/"' Add 'ScriptAlias /awstats/ "/usr/share/awstats/wwwroot/cgi-bin/"' Add '<Directory>' directive AWStats directives added to Apache config file. -----> Update model config file '/usr/share/awstats/wwwroot/cgi-bin/awstats.model.conf' File awstats.model.conf updated. -----> Need to create a new config file ? Do you want me to build a new AWStats config/profile file (required if first install) [y/N] ? y -----> Define config file name to create What is the name of your web site or profile analysis ? Example: www.mysite.com Example: demo Your web site, virtual server or profile name: > demo -----> Define config file path In which directory do you plan to store your config file(s) ? Default: /etc/awstats Directory path to store config file(s) (Enter for default): > -----> Create config file '/etc/awstats/awstats.demo.conf' Config file /etc/awstats/awstats.demo.conf created. -----> Restart Web server with '/etc/init.d/apache restart' -----> Add update process inside a scheduler Sorry, configure.pl does not support automatic add to cron yet. You can do it manually by adding the following command to your cron: /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config=demo Or if you have several config files and prefer having only one command: /usr/share/awstats/tools/awstats_updateall.pl now Press ENTER to continue... A SIMPLE config file has been created: /etc/awstats/awstats.demo.conf You should have a look inside to check and change manually main parameters. You can then manually update your statistics for 'demo' with command: > perl awstats.pl -update -config=demo You can also read your statistics for 'demo' with URL: > http://localhost/awstats/awstats.pl?config=demo Press ENTER to finish... |
Als erstes fragt uns das Konfigurationsscript, ob wir wirklich das Verzeichnis /usr/share/awstats benutzen wollen. Das bestätigen wir mit y. Danach werden wir nach der Konfigurationsdatei unseres Webservers gefragt. Hier geben wir unsere leere Apache Konfigurationsdatei für AWStats /etc/apache2/conf-available/awstats.conf an. Im Anschluss werden wir gefragt, ob das Konfigurationsscript eine AWStats Konfiguration für uns anlegen soll. Das bestätigen wir ebenfalls mit y. Daraufhin fragt das Script wo es die Konfigurationsdatei speichern soll. Der default Wert /etc/awstats ist richtig, wir können einfach durch Drücken der Return Taste bestätigen. Zum Schluss erhalten wir noch Informationen zur Konfiguration und dass wir den Apache restarten müssen. Wir bestätigen zweimal durch Drücken der Return Taste und haben damit die Grundkonfiguration fertiggestellt.
In der Datei /etc/apache2/conf-available/awstats.conf passen wir noch die Zugriffsrechte auf die AWStats Seite an. Die Directory Direktive sollte dann so aussehen:
1 2 3 4 5 6 | <Directory "/usr/share/awstats/wwwroot"> Options None AllowOverride None Require local Include /etc/apache2/misc/my-current-admin-host.conf </Directory> |
Danach wechseln wir in das Verzeichnis /etc/awstats und legen eine Konfiguration für unsers Domäne an, in dem wir die Demokonfiguration umbenennen.
1 2 | $ cd /etc/awstats $ mv awstats.demo.conf awstats.mysubdomain.mydomain.tld.conf |
Die Domäne ist entsprechend den tatsächlichen Gegebenheiten anzupassen. Die Datei awstats.mysubdomain.mydomain.tld.conf selbst müssen wir dann ebenfalls noch anpassen. Die von mir gemachten Änderungen sind hier zu sehen:
1 2 3 4 5 6 7 8 9 10 11 | LogFile="/var/log/apache2/access.log" SiteDomain="mysubdomain.mydomain.tld" HostAliases="mysubdomain.mydomain.tld www.mysubdomain.mydomain.tld 127.0.0.1 localhost" DNSLookup=1 AllowFullYearView=3 SkipHosts="::1 127.0.0.1 localhost" UseHTTPSLinkForUrl="/" LoadPlugin="tooltips" LoadPlugin="hashfiles" LoadPlugin="graphgooglechartapi" LoadPlugin="geoipfree" |
Für das Update der Statistiken legen wir im Verzeichnis /root/bin das folgende Script an.
1 2 3 4 | $ cat /root/bin/awstats-update.sh #!/bin/bash /usr/bin/perl /usr/share/awstats/tools/awstats_updateall.pl now -awstatsprog=/usr/share/awstats/wwwroot/cgi-bin/awstats.pl |
Dem Script geben wir noch die richtigen Berechtigungen.
1 | $ chmod 700 /root/bin/awstats-update.sh |
Zuletzt müssen wir noch das httpd-prerotate Script ändern. Wir ersetzen die aktuelle Zeile mit der folgenden:
1 2 | $ cat /etc/logrotate.d/httpd-prerotate/awstats /root/bin/awstats-update.sh |
Jetzt testen wir zunächst das Update der AWStats database:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ /root/bin/awstats-update.sh Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=mysubdomain.mydomain.tld -configdir="/etc/awstats"' to update config mysubdomain.mydomain.tld Create/Update database for config "/etc/awstats/awstats.mysubdomain.mydomain.tld.conf" by AWStats version 7.4 (build 20150714) From data in log file "/var/log/apache2/access.log"... Phase 1 : First bypass old records, searching new record... Searching new records from beginning of log file... Phase 2 : Now process new records (Flush history on disk after 20000 hosts)... Warning: awstats has detected that some hosts names were already resolved in your logfile /var/log/apache2/access.log. If DNS lookup was already made by the logger (web server), you should change your setup DNSLookup=1 into DNSLookup=0 to increase awstats speed. Jumped lines in file: 0 Parsed lines in file: 94 Found 3 dropped records, Found 0 comments, Found 0 blank records, Found 0 corrupted records, Found 0 old records, Found 91 new qualified records. |
Unter der URL https://mysubdomain.mydomain.tld/awstats/awstats.pl finden wir nun die Statistiken für den Zugriff auf unseren Webserver, jetzt sauber, ohne gemischten http und https Inhalt.