Von Manuel Capellari am Di, 13. Mai 2003 um 23:14 #
ich kann mir nicht helfen, aber irgendwie hat dieses shellscript ziemliche ähnlichkeit mit einem das ich vor ein paar jahren mal in einer newsgroup gepostet hab *g*
Von Manuel Capellari am Do, 15. Mai 2003 um 00:01 #
>...auch wenn, glaube nicht, dass Du immer das Rad neu erfindest
das war nicht so gemeint wie es sich liest, mich hats nur gewundert dass die scripts wirklich ziemlich ähnlich sind, ein kleinigkeiten sind anders gelöst aber im grossen und ganzen sind sie vom grundgedanken bzw. von der funktionsweise identisch :-)
abgesehen davon bin ich auch sicher, dass jemand vor mir die selbe idee auch schon hatte ...
Hab gerade letzte Woche an der Uni ein für Nicht-Informatiker sehr einfach gehaltenes Referat über Logfileanalyse gehalten. Die dort angesprochenen Probleme werden von AWStats einiges intelligenter angegangen als von Webalizer. Auch die Art der Auswertung finde ich besser, so findet man in AWStats immer die komplette Listen, in Webalizer nur die Top50 der Besucher, der Seiten, der Suchbegriffe, usw.
Kann AWStats auch die Daten der bisherigen Auswertungsläufe zwischenspeichern, so wie webalizer es mit der webalizer.hist und der webalizer.current macht ? Ich habe dazu auf der Webseite nichts gefunden.
Ich kenne zwar die Files webalizer.hist und webalizer.current nicht, deiner Beschreibung nach gibt es aber bei AWStats etwas ähnliches. Die aus den Logfileanalysen gewonnenen Daten werden in Textfiles zwischengespeichert, aus denen du dann jederzeit neu die HTML-Seiten mit den graphischen Auswertungen rausholen kannst.
Hast du sowas gemeint?
Ach ja, AWStats läuft übrigens auch standalone als perl-script. Ihr könnt es darum relativ einfach mal runterladen und lokal auf eurem PC testen.
Ich muss sagen, ich habe mich nicht ausführlich mit Webalizer beschäftigt, sondern nur das was mein Provider mir als Webalizer-Reports geboten hat mit den von mir selber generierten Reports von AWStats verglichen. Darum vielleicht ein kleiner «Äpfel mit Birnen Vergleich»?
IMHO hat aber Webalizer soviel ich weiss keine Robots-Erkennung, du weisst also im Extremfall nie genau, ob sich auf deiner Webseite nur Roboter tummeln, oder ob du auch echte Menschen drauf hast.
Vielleicht nützt euch bei der Evaluation die Vergleichstabelle auf http://awstats.sourceforge.net/#COMPARISON
Auch in der FAQ finden sich einige Hinweise vor allem in diesem Bereich: http://awstats.sourceforge.net/docs/awstats_faq.html#DIFFERENT_RESULTS
Hmm, also ich habs mir angeschaut. Generiert ohne Frage einiges mehr an Informationen als Webalizer, was natürlich nicht gerade zur Übersichtlichkeit beiträgt :) Aber schlecht ist es auf jedenfall nicht...
Um ehrlich zu sein suche ich schon seit einer ganzen Weile nach Scripten die für Multi vhosts Statistiken erstellen können. awstats finde ich persönlich von Layout und Design wesentlich besser aber es ist mir einfach mal zu aufgebläht und ich will _nicht_ 100 plugins laden damit ich alle Funktionen habe :) super tipp für webalizer fans funktioniert wenigstens!
Ich hab ein paar Rechner zu betreuen, da reichen die File Handles nicht aus, um gleichzeitg alle Logs offen zu halten. Es sind einfach zu viele Virtuelle Hosts. Daher hab ich mir ne andere Methode ausgedacht. Es wird ein zentrales Logfile geschrieben. Dann wird vor dem Auswertungslauf das Logfile auf separate Logfiles aufgesplittet und diese nacheinander bearbeitet. Um das ganze zu Trennen sieht der LogFormat Eintrag einfach so aus: LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Der erste Eintrag ist der Name der Domain. Bei Aufsplitten wird er dann entfernt.
Da bei mir in der Apache-Konfigurationsdatei die Virtuellen Hosts namenbasiert sind, unterscheidet sich der Aufbau eines typischen VHost-Eintrags von der hier vorgestellten Form.
Skript2: erzeugt eine separate Konfigurationsdatei fuer jedes VHost mittels Text::Template-CPAN Modules
#!/usr/bin/perl -W ######################################### #Filename: $Source: /var/lib/cvs/webalizer_vhost/webalizer.pl,v $ ######################################### #Creates webalizer configuration files #for all vhosts ######################################### #Author : $Author: albert $ Juri Albert #Created : 20030601 #Changed : $Date: 2003/06/01 21:44:50 $ #Version : $Revision: 1.5 $ #########################################
use Text::Template;
my $PATH="/etc/webalizer/conf"; my $template = Text::Template->new(SOURCE => 'webalizer.conf.tmpl') or die "Couldn't construct template: $Text::Template::ERROR"; while () { chop $_; $domain=$_; my %vars = (DOMAIN => $domain);
my $result = $template->fill_in(HASH => \%vars);
$filename="webalizer-$domain.conf"; if (defined $result) { print "Creating $PATH/$filename\n"; open (FILE_OUT, ">$PATH/$filename"); print FILE_OUT $result; } else { die "Couldn't fill in template: $Text::Template::ERROR" } }
Skript3: Legt die Verzeichnisse innerhalb des VHost-Baumes an und anschliessend wird webalizer ausgefuehrt
#!/bin/sh
######################################### #Filename: $Source: /var/lib/cvs/webalizer_vhost/webalizer_run.sh,v $ ######################################### #Executes webalizer for each vhost ######################################### #Author : $Author: albert $ Juri Albert #Created : 20030601 #Changed : $Date: 2003/06/01 21:52:52 $ #Version : $Revision: 1.4 $ #########################################
# OutputDir is where you want to put the output files. This should # should be a full path name, however relative ones might work as well. # If no output directory is specified, the current directory will be used.
# HostName defines the hostname for the report. This is used in # the title, and is prepended to the URL table items. This allows # clicking on URL's in the report to go to the proper location in # the event you are running the report on a 'virtual' web server, # or for a server different than the one the report resides on. # If not specified here, or on the command line, webalizer will # try to get the hostname via a uname system call. If that fails, # it will default to "localhost".
HostName {$DOMAIN}
Anschliessend wird das ganze per CronJob stuendlich aktualisiert: 30 * * * * root /usr/sbin/vh.pl|/usr/sbin/webalizer.pl 34 * * * * root /usr/sbin/webalizer_run.sh
Dies ist natuerlich nicht die eleganteste und kuerzeste Loesung. Jedoch vielleicht wuerde meine Modifikation der von Robert Tulke geschriebenen Routinen jemandem nuetzlich sein.
... nur meins war konfig-file gesteuert *ätsch*
...auch wenn, glaube nicht, dass Du immer das Rad neu erfindest
Gruß hubik
das war nicht so gemeint wie es sich liest, mich hats nur gewundert dass die scripts wirklich ziemlich ähnlich sind, ein kleinigkeiten sind anders gelöst aber im grossen und ganzen sind sie vom grundgedanken bzw. von der funktionsweise identisch :-)
abgesehen davon bin ich auch sicher, dass jemand vor mir die selbe idee auch schon hatte ...
... am ende kommt immer das selbe raus ... *g*
viel besser als webalizer !!
awstats.sf.net
Hab gerade letzte Woche an der Uni ein für Nicht-Informatiker sehr einfach gehaltenes Referat über Logfileanalyse gehalten. Die dort angesprochenen Probleme werden von AWStats einiges intelligenter angegangen als von Webalizer. Auch die Art der Auswertung finde ich besser, so findet man in AWStats immer die komplette Listen, in Webalizer nur die Top50 der Besucher, der Seiten, der Suchbegriffe, usw.
Kannst du alles in der config-Datei bei Webalizer einstellen.
Hast du sowas gemeint?
Ach ja, AWStats läuft übrigens auch standalone als perl-script. Ihr könnt es darum relativ einfach mal runterladen und lokal auf eurem PC testen.
Gruss
Hey
IMHO hat aber Webalizer soviel ich weiss keine Robots-Erkennung, du weisst also im Extremfall nie genau, ob sich auf deiner Webseite nur Roboter tummeln, oder ob du auch echte Menschen drauf hast.
Vielleicht nützt euch bei der Evaluation die Vergleichstabelle auf http://awstats.sourceforge.net/#COMPARISON
Auch in der FAQ finden sich einige Hinweise vor allem in diesem Bereich: http://awstats.sourceforge.net/docs/awstats_faq.html#DIFFERENT_RESULTS
Gruss
Hey
Aber schlecht ist es auf jedenfall nicht...
super tipp für webalizer fans funktioniert wenigstens!
sundp
Daher hab ich mir ne andere Methode ausgedacht.
Es wird ein zentrales Logfile geschrieben.
Dann wird vor dem Auswertungslauf das Logfile auf separate Logfiles aufgesplittet und diese nacheinander bearbeitet.
Um das ganze zu Trennen sieht der LogFormat Eintrag einfach so aus: LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Der erste Eintrag ist der Name der Domain. Bei Aufsplitten wird er dann entfernt.
das du gerne rm -rf machst wissen wir ja ;-)
bye
unterscheidet sich der Aufbau eines typischen VHost-Eintrags von der hier vorgestellten Form.
#subdomain.mydomain.de
ServerName subdomain.mydomain.de
ServerAlias alias.mydomain.de
ServerAlias www.myseconddomain.net
ServerAdmin webmaster@mydomain.de
DocumentRoot /var/www/subdomain.mydomain.de/public_html
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ScriptAlias /mailman/ "/usr/lib/mailman/cgi-bin/"
#ScriptAlias /cgi-bin /var/www//cgi-bin/
ErrorLog /var/www/subdomain.mydomain.de/logs/subdomain.mydomain.de-error.log
CustomLog /var/www/subdomain.mydomain.de/logs/subdomain.mydomain.de-access.log combined
Das ganze wird bei mir mit drei verschiedenen Skripten erledigt:
Skript1: Liest saemtliche VHost-Eintraege aus der Apache-Konfigurationsdatei
#!/usr/bin/perl
#########################################
#Name: vh.sh
#########################################
#Prints all vhost-Entries on screen
#########################################
#Author : $Author: albert $ Juri Albert
#Created : 20030601
#Changed : $Date: 2003/06/01 21:43:49 $
#Filename: $Source: /var/lib/cvs/webalizer_vhost/vh.pl,v $
#Version : $Revision: 1.4 $
#########################################
#Position of Apache Configuration File
$FILE="/etc/apache/httpd.conf";
$MODE=0;
$i=0;
undef(@RESULTS);
open(STUFF, "$FILE");
while () {
#Virtual Host tag opens
if ($MODE==0)
{
#The section begins
if ($_ =~ /\/)
{
#print "BEGIN:".$_."\n";
$MODE=1;
}
}
#Virtual Host tag closes
else
{
#The section ends
if ($_ =~ /\/)
{
#print "END:\n";
$MODE=0;
$LAST_POS=rindex($_,"\");
$RESULTS[$i].=substr($_,0,$LAST_POS);
$i++;
}
#Concatenate lines to each other
else
{
$RESULTS[$i].=$_;
}
}
}
#Print results
#foreach (@RESULTS)
#{
# print $_."\n";
#}
#Print results
foreach (@RESULTS)
{
foreach (split(/\n/, $_))
{
if ($_=~/ServerName/)
{
@s_name=split(/\s+/, $_);
print "$s_name[2]\n";
}
}
}
Skript2: erzeugt eine separate Konfigurationsdatei fuer jedes VHost mittels Text::Template-CPAN Modules
#!/usr/bin/perl -W
#########################################
#Filename: $Source: /var/lib/cvs/webalizer_vhost/webalizer.pl,v $
#########################################
#Creates webalizer configuration files
#for all vhosts
#########################################
#Author : $Author: albert $ Juri Albert
#Created : 20030601
#Changed : $Date: 2003/06/01 21:44:50 $
#Version : $Revision: 1.5 $
#########################################
use Text::Template;
my $PATH="/etc/webalizer/conf";
my $template = Text::Template->new(SOURCE => 'webalizer.conf.tmpl')
or die "Couldn't construct template: $Text::Template::ERROR";
while ()
{
chop $_;
$domain=$_;
my %vars = (DOMAIN => $domain);
my $result = $template->fill_in(HASH => \%vars);
$filename="webalizer-$domain.conf";
if (defined $result)
{
print "Creating $PATH/$filename\n";
open (FILE_OUT, ">$PATH/$filename");
print FILE_OUT $result;
}
else { die "Couldn't fill in template: $Text::Template::ERROR" }
}
Skript3: Legt die Verzeichnisse innerhalb des VHost-Baumes an und anschliessend
wird webalizer ausgefuehrt
#!/bin/sh
#########################################
#Filename: $Source: /var/lib/cvs/webalizer_vhost/webalizer_run.sh,v $
#########################################
#Executes webalizer for each vhost
#########################################
#Author : $Author: albert $ Juri Albert
#Created : 20030601
#Changed : $Date: 2003/06/01 21:52:52 $
#Version : $Revision: 1.4 $
#########################################
#Creating Webalizer subdirectory
./vh.pl|xargs -i mkdir -pv /var/www/{}/public_html/webalizer
#Executing Webalizer
./vh.pl|xargs -i webalizer -c /etc/webalizer/conf/webalizer-{}.conf
In dem Template /etc/webalizer/webalizer.conf.tmpl
legt man die zu ersetzende Variable wie folgt fest:
# LogFile defines the web server log file to use. If not specified
# here or on on the command line, input will default to STDIN.
#LogFile /var/log/apache/access.log
LogFile /var/www/{$DOMAIN}/logs/{$DOMAIN}-access.log
#LogFile /var/www/{$DOMAIN}/logs/{$DOMAIN}-access.log.1
# OutputDir is where you want to put the output files. This should
# should be a full path name, however relative ones might work as well.
# If no output directory is specified, the current directory will be used.
OutputDir /var/www/{$DOMAIN}/public_html/webalizer
...
# HostName defines the hostname for the report. This is used in
# the title, and is prepended to the URL table items. This allows
# clicking on URL's in the report to go to the proper location in
# the event you are running the report on a 'virtual' web server,
# or for a server different than the one the report resides on.
# If not specified here, or on the command line, webalizer will
# try to get the hostname via a uname system call. If that fails,
# it will default to "localhost".
HostName {$DOMAIN}
Anschliessend wird das ganze per CronJob stuendlich aktualisiert:
30 * * * * root /usr/sbin/vh.pl|/usr/sbin/webalizer.pl
34 * * * * root /usr/sbin/webalizer_run.sh
Dies ist natuerlich nicht die eleganteste und kuerzeste Loesung.
Jedoch vielleicht wuerde meine Modifikation der von Robert Tulke geschriebenen Routinen jemandem nuetzlich sein.
Ciao, Juri.