IP+UA är bättre i och med att det troligen inte är två personer med exakt samma version av browsern bakom ett NAT, ja. Eventuellt är det ju så ändå, men det ger ändå en bättre uppskattning.
Jag blev tvungen att koda lite själv för att testa..
log_ip_ua_month.pl
Kod:
#!/usr/bin/perl
$cnt = $fd = $ld = $pages = 0;
my %data;
$logfile=$ARGV[0];
$mymonth = $ARGV[1];
open(FO,$logfile);
while(<FO>) {
if (/^([\d\.]+) - [\"\w\-]+ \[(\d+)\/(\w+)\/(\d{4}).*?\] \"(.*?)\" ([\d\-]+) [\d\-]+ \".*?\" \"(.*?)\"$/) {
($ip,$day,$month,$year,$req,$code,$ua) = ($1,$2,$3,$4,$5,$6,$7);
if (($month eq $mymonth)
&& ($code == 200 || $code == 302 || $code == 304) # returcode = 200|302|304
&& !($ua =~ /crawler|bot|google|slurp/i) # plocka bort alla bottar
&& ($ua =~ /Mozilla/) # bara riktiga browsers
&& ($req =~ /\.(htm|php)/)
) { # bara äkta dokument
if ($fd==0) { $fd = "$day/$month/$year"; }
$ld = "$day/$month/$year";
$id= "$ip$month$year$ua"; # month & year är lite överfldoiga..
$data{$id}++;
$pages++;
}
} else {
$felaktiga_rader++;
}
$cnt++;
}
close(FO);
print "Rapporterad tidsperiod, $fd - $ld\n";
print "Unika besökare: " . scalar(keys(%data)) . "\n";
print "Laddade sidor: $pages\n";
print "Felaktiga rader totalt: $felaktiga_rader\n";
syntax: ./log_ip_ua_month.pl <logfil*> <månad>
Ex: ./log_ip_ua_month.pl /usr/local/logs/minhost_access.log Aug
*Kräver att logfilen är en combined-log i Apache..
Den här koden borde göra det vi (jag) vill, registrerar laddade sidor över en specifierad månad med IP+UA som identifierare. Det stämmer inte riktigt med AWstats. Scriptet räknar lite hårdare (den identifierare mera bottar som ickeanvändare).
Kan vi spika det här scriptet som internationell standard nu så är vi överrens
Edit: tog bort lite kommentarer ur koden. Samt lade till en kommentar om loggfiler.