Last nite I sat down and configured AWStats on my Ubuntu 7.10 server. I had previously been using statcounter, a free stat service, but I had noticed that it was one of the causes of slowdown on my page loads. Having to access an external site and javascript wasn’t helping. I also run the server so I have full access to the server logs, why not just use those directly.
So far I am really happy with AWStats. It appears to be running properly and pulling in a lot more data than statcounter ever did. It actually is showing me that I had much more traffic than I thought. I had mentioned 5,000 the other day, which I have long since surpassed based on AWStats output.
I’d like to share the steps I took for installing and configuring AWStats on my Ubuntu Server.
Installation
Ubuntu has the AWStats package available in the repositories, which we can install with:
sudo aptitude install awstats
This will install the basic files, but there is still a bit of configuring to do, so we’ll dive into that next.
Auto Configuration
From the tutorials that I found elsewhere in my searching there is a awstats_configure.pl file that will try to configure it for you. I did not use this personally, but if you’d like to try it you can run:
sudo perl /usr/share/doc/awstats/examples/awstats_configure.pl
The rest of this tutorial will discuss manual configuration, but if anyone can offer feedback concerning the configure script I’m sure many would be interested.
Manual Configuration
I configured my system manually, which I will outline below. The only requirements here are that you have access to the apache2 logs, or that you have custom log locations for each of your virtual domains (if used). For more information on custom log locations for virtual domains see my previous post, Configuring Virtual Hosting on Ubuntu with Apache2.
The first step is creating an awstats.conf file for your domain. This can be done by moving or copying the /etc/awstats.conf, and giving it a more unique name:
sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.domain.tld.conf
I created a unique file, using the syntax awstats + domain.tld + conf for each of the domains hosted on my server. Each of these also has their own unique log file as well.
We’ll then edit our new /etc/awstats with custom values for that domain. The main points you’ll want to look for within this file:
• LogFile=”/path/to/your/domain/access.log”
• LogFormat=1 (this will give you more detailed stats)
• SiteDomain=”domain.tld”
• HostAliases=”www.domain.tld localhost 127.0.0.1?
Once you’ve made these changes you’ll want to build your initial statistics, which will be generated from the current logs on your machine. We can do this using:
sudo /usr/lib/cgi-bin/awstats.pl -config=domain.tld -update
What this will do is scan the /etc/awstats folder for anything of the pattern awstats + domain.tld + conf, reading that config to generate its output. You should see some output here, and depending on the size of your logs it’ll take anywhere from a few seconds to a few minutes or hours. Each time it is run after that will be minimal, as it only updates the information, but the initial generation can take some time.
Configure Apache to Display AWStats
At this point our statistics should be generated (if not, go back and double check you haven’t missed anything!), but we need a way to see them. We’ll need to configure Apache2 to show us these stats. The way I did this was by using an Include in my apache2.conf, instead of cluttering up the default config file. This is generally my preferred method.
Apache2.conf already has a line near the botton Include /etc/apache2/conf.d/, which will read anything in there as additional data. What I did was create a new file in the /etc/apache2/conf.d/ directory called awstats, and filled it with the following content:
Alias /awstatsclasses “/usr/share/awstats/lib/”
Alias /awstats-icon/ “/usr/share/awstats/icon/”
Alias /awstatscss “/usr/share/doc/awstats/examples/css”
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ScriptAlias /awstats/ /usr/lib/cgi-bin/
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
This is basically creating some access aliases, and defining the cgi-bin paths, etc. Once this is saved you should be able to restart Apache2 and we’ll should be able to access our stats. Restart Apache2 using:
sudo /etc/init.d/apache2 restart
You should now be able to access your statistics using:
http://domain.tld/awstats/awstats.pl
Assuming you didn’t get any errors during your stats generation, and Apache2 didn’t complain when you restarted the service, you should see statistics at this point.
Continually Updating Your Stats
The last thing you’ll probably want to do is update your statistics via cron. This will allow you to have your site statistics updated on a regular basis, not requiring intervention on your part. What I have done is added a line to my /etc/crontab file telling AWStats to update every ten minutes. I have seen minimal system load even when updating a dozen sites on that interval. To update every ten minutes we’ll add the following line:
*/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=domain.tld -update >/dev/null
Repeat this line, updating the domain.tld value for any site you want continually updated.
Securing Statistics
Variant #1:
Edit awstats.conf for the site setting AllowAccessFromWebToFollowingIPAddresses=”your IP here”
Variant #2:
Make .htaccess file in cgi-bin with:
<FilesMatch “awstats.pl”>
AuthName “Login Required”
AuthType Basic
AuthUserFile /hsphere/local/home/username/.htmaster/.ok_user
require valid-user
</FilesMatch>