Apache server stats with small and useful bash script.
2013-11-29
473 words
3 mins read
Just copy this script to your web-server cgi-bin directory and enjoy.
The script with show the common errors like 404 Error, Internal Server Error and others. It will show the User agent distribution using simple commands like grep, uniq, awk and so on.
You would need to change the tfile – which is temporary file and also the access.log path in the next line.
Just re-direct the output to some file with html extenstion. You could even put this in the cron which re-directs the output to some html in server document root.
#!/bin/bash tfile=/tmp/apache.log sudo grep $(date '+%d/%b/%Y') /var/log/apache2/access.log >$tfile thits=$(grep -c . $tfile) echo "Content-type: text/html" echo "" echo "Report for $(date '+%d/%b/%Y')
Report for $(hostname) on $(date ‘+%d/%b/%Y’)
" echo "Total hits :: $thits" echo "" echo "User agent distribution :: " #awk -F" '{print $6}' $tfile | sort | uniq -c | sort -fr awk -F" '{print $6}' $tfile | sed 's/(([^;]+; [^;]+)[^)]*)/(1)/' |sort |uniq -c|sort -fr echo " User response code: " awk 'BEGIN{ a[200]="OK"; a[206]="Partial Content"; a[301]="Moved Permanently"; a[302]="Found"; a[304]="Not Modified"; a[401]="Unauthorised (password required)"; a[403]="Forbidden"; a[404]="Not Found"; a[500]="Internal Server Error"; } {print $9 " => "a[$9]""}' $tfile | sort | uniq -c | sort -nr echo " 404 Error Summary::" awk '($9 ~ /404/)' $tfile | awk '{print $9,$7}' | sort | uniq -c|sort -nr|head -5 echo " IP Visit counts :: " awk '{print $1}' $tfile | grep -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" | sort -n | uniq -c | sort -nr|while read count ip do name=$(echo $ip|/usr/bin/logresolve) printf "%5st%-15st%sn" $count $ip $name done # cat $tfile |grep -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" | sort -nr | uniq -c | sort -n echo " Top Agents :: " cat $tfile | awk -F" '{print $6}'| sort -n | uniq -c | sort -nr |head -5 echo " Top urls ::" cat $tfile | awk -F" '{print $2}'| sort -n | uniq -c | sort -nr |head -5 echo -n " Total Bytes ::: " cat $tfile | awk '{ sum += $10 } END { if ( sum > 1024*1024) {print sum/(1024*1024)"Mb"}else if ( sum > 1024) {print sum/1024"Kb";}else print sum }' echo -n " Total Seconds :: " cat $tfile | awk '{ sum += $13 } END { print sum }' # sed 's/.*GET (.*) HTTP.*/1/g' $tfile|awk -F/ '{if ( NF > 3 ) print $2"/"$3"/"$4; else print $2;}'|sort|uniq -c
Apache Server Stats – Download the script in zip file format.
And here is a sample ::
Report for
on Total hits ::
User agent distribution ::
User response code:
404 Error Summary::
IP Visit counts ::
Top Agents ::
Top urls ::
Total Bytes :::
Total Seconds ::
Hope that it will be useful.
Related articles
Related Articles:
- 2011/11/28 Linux hardware details.
- 2011/01/31 Ranking of the most frequently used commands
- 2012/09/30 phpmyadmin access problem and change server from URL
- 2012/01/06 BASH Script Performace
- 2011/12/16 Rekursive Grep on Solaris or AIX Systems without GNU egrep -r funcionality
Authored By Amit Agarwal
Amit Agarwal, Linux and Photography are my hobbies.Creative Commons Attribution 4.0 International License.