Статистика по дням в AwStats


AwStats - парсер лог файлов, написанный на perl, с помощью которого можно вести статистику посещений сайта на основе информации из лог файлов.

Как правило awstats отображает общую информаци за неделю, месяц. Но что же делать, если нужно отображать информацию о посещении сайта за конкретный день.

О подобном трюке дальше и пойдет речи на примере сервера на базе Linux Ubuntu c Apache2.

Для начала установим AwStats:

apt-get install awstats libapache2-mod-perl2

Создаем конфиг для сайта:

cp /etc/awstats/awstats.conf /etc/awstats/awstats.website.com.conf

Открываем новый файл. В нем нужно найти и отредактировать следующие области:

LogFile="/var/log/apache2/access.log" #path to logfile;
LogFormat=1 #for full statistics;
SiteDomain="website.com” #domainname;
HostAliases="www.website.com website.com" #site aliases
AllowFullYearView=3
DNSLookup=0

На этом все.
Включаем конфигурацию AwStats в Apache:

cp /usr/share/doc/awstats/examples/apache.conf /etc/apache2/conf.d/awstats.conf
/etc/init.d/apache2 reload

Открываем редактор запранированых заданий:

crontab -e

Создаем расписание (cronjob):

0 2 * * * /usr/lib/cgi-bin/awstats.pl --config=/etc/awstats/awstats.website.com.conf -DatabaseBreak=day > /dev/null
0 2 * * * /usr/lib/cgi-bin/awstats.pl --config=/etc/awstats/awstats.website.com.conf -DatabaseBreak=month > /dev/null
0 2 * * * /usr/lib/cgi-bin/awstats.pl --config=/etc/awstats/awstats.website.com.conf -DatabaseBreak=year > /dev/null

Осталось создать index.cgi, который и предоставит возможность выбирать диапазон для отображения статистики.
Создайте файл index.cgi в папке /usr/lib/cgi-bin/

Содержимое файла - в спойлере.

/usr/lib/cgi-bin/index.cgi

#!/usr/bin/perl

# The awstats config file name
$CONFIG="awstats";

### Begin program ###

@now=localtime(time);
$today_day=$now[3];
$today_month=$now[4]+1;
$today_year=$now[5]+1900;

@yesterday=localtime(time-3600*24);
$ytd_day=$yesterday[3];
$ytd_month=$yesterday[4]+1;
$ytd_year=$yesterday[5]+1900;

$lastmonth=$today_month-1;
$lastmonth_year=$today_year;
if($lastmonth<1)
{
	$lastmonth=1;
	$lastmonth_year=$today_year-1;
}
$lastyear=$today_year-1;

print "Content-type: text/html\n\n";
print "<html><body>\n";
print "<a href='".getLink($today_year,$today_month,$today_day)."'>Today</a> ";
print "<a href='".getLink($ytd_year,$ytd_month,$ytd_day)."'>Yesterday</a> ";
print "<a href='".getLink($today_year,$today_month)."'>ThisMonth</a> ";
print "<a href='".getLink($lastmonth_year,$lastmonth)."'>LastMonth</a> ";
print "<a href='".getLink($today_year)."'>ThisYear</a> ";
print "<a href='".getLink($lastyear)."'>LastYear</a> ";
print "\n<hr/>\n";

printCal($lastmonth_year, $lastmonth);
print "\n<br>\n";
printCal($today_year, $today_month);

print "\n<hr/></body></html>\n";


##### Methods ######

sub getLink
{
	my($year, $month, $day)=@_;
	$query="";
	if($day)
	{
		$query="DatabaseBreak=day&day=${day}&month=${month}&year=${year}";
	}	
	elsif($month)
	{
		$query="month=${month}&year=${year}";
	}	
	elsif($year)
	{
		$query="year=${year}&month=all";
	}	
	return "awstats.pl?config=${CONFIG}&$query";
}

sub printCal
{
my($y, $m)=@_;
open(CAL, "cal $m $y |");
@days = <CAL>;
close(CAL);

$month = $days[0]; 
$month=~ s/\s\s\s*//g;
$mbg="";
if($m==$today_month && $y==$today_year)
{
	$mbg="bgcolor='#ffaaaa'";
}
print "<table border=1><tr><td colspan=7 $mbg><a href='".getLink($y, $m)."'>$month</a></td></tr><tr>\n";
foreach $dy (split(/ /, $days[1])) 
{
	print "<td>$dy</td>";
}
print "</tr>\n";
shift(@days);
shift(@days);
foreach $line (@days)
{
	chomp $line;
	$line =~ s/^\s+//;
	$line =~ s/\s+$//;
	print "<tr>";
	foreach	$d (split(/\s+/, $line))
	{
		$bg="";
		if($d==$today_day && $m==$today_month && $y==$today_year)
		{
			$bg="bgcolor='#ffaaaa'";
		}
		print "<td $bg><a href='".getLink($y, $m, $d)."'>$d</a></td>";
	}
	print"</tr>\n";
}
print "</table>\n";
}

Выставте параметры доступа на файлы:

chmod 755 /usr/lib/cgi-bin/index.cgi
chown www-data:www-data /usr/lib/cgi-bin/index.cgi

Для упрощения доступа отредактируйте файл /etc/apache2/conf.d/awstats.conf:

DirectoryIndex index.cgi 

По аналогии можно настроить AwStats для NginX

Share Button
(Visited 198 times, 1 visits today)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *