mkwebstats/mkwebstats.sh

119 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
#####################################################################
#
# This is a simple shell script that will use goaccess to generate web
# log analytics from nginx-proxy-manager proxy host logs. The resultant
# html report files will be written into the html directory of another
# nginx web host.
#
# This instance of goaccess has IP geolocation enabled, and requires
# the presence of a GeoLite2 geo ip database from MaxMind
# (https://www.maxmind.com).
#
#####################################################################
#####################################################################
# variable definitions
# today's date, in logfile format
dateToday=$(date +"%0d/%b/%Y")
# log dir
logDir="/opt/docker/docker_nginx-proxy-manager/data/logs"
# goaccess binary
goBin="/usr/local/bin/goaccess"
# destination dir
dstDir="/opt/docker/docker_nginx-go.delfax.net/go.delfax.net/html"
# set up our array of 'hostname:logfile'
declare logfiles
# array entries for hostname:logfile
logfiles=("delfax.net:proxy-host-1_access.log" \
"www.delfax.net:proxy-host-9_access.log" \
"radar231.com:proxy-host-4_access.log" \
"www.radar231.com:proxy-host-10_access.log" \
"git.radar231.com:proxy-host-5_access.log" \
"go.delfax.net:proxy-host-14_access.log" \
"npm.delfax.net:proxy-host-6_access.log" \
"jmc.delfax.net:proxy-host-7_access.log" \
)
# goaccess args
geoipArg="/opt/bin/GeoLite2-City/GeoLite2-City.mmdb"
timeArg='%H:%M:%S'
dateArg='%d/%b/%Y'
# a format string structured for nginx-proxy-manager proxy host logs
formatArg='[%d:%t %^] %^ %^ %s - %m %^ %v %U [Client %h] [Length %b] [Gzip %^] [Sent-to %^] %u %R'
#####################################################################
# We'll create an index.html file that contains links to all of our
# generated report files
# create the header for our index.html
cat >${dstDir}/index.html <<HEADEOM
<!doctype html>
<HTML>
<HEAD>
<TITLE>goaccess index</TITLE>
</HEAD>
<BODY>
<P>
<CENTER>
<H2>NPM Proxy Host Web Analytic Reports</H2>
</CENTER>
<P>
<HR WIDTH="100%">
<P>
<UL>
HEADEOM
#####################################################################
# Generate a web analytics report file for each proxy host logfile
#
# We'll generate two reports for each proxy host;
# - one for all of the existing logfiles
# - one for just today's log entries
for i in ${logfiles[*]}
do
host=$(echo $i | cut -d':' -f1)
logfile=$(echo $i | cut -d':' -f2)
###################################
# Analyze all log entries
zcat -f ${logDir}/${logfile}* | grep -v "nagios-plugins" | ${goBin} >/dev/null 2>&1 - --geoip-database=${geoipArg} --time-format=${timeArg} --date-format=${dateArg} --log-format="${formatArg}" --output=${dstDir}/${host}_all.html --html-report-title="${host} - All"
# put a link to the report in our index.html
echo " <LI> <A HREF="${host}_all.html" target="_blank">${host} - All</A></LI>" >>${dstDir}/index.html
###################################
# Analyze only today's log entries
zcat -f ${logDir}/${logfile}* | grep "^\[${dateToday}:" | grep -v "nagios-plugins" | ${goBin} >/dev/null 2>&1 - --geoip-database=${geoipArg} --time-format=${timeArg} --date-format=${dateArg} --log-format="${formatArg}" --output=${dstDir}/${host}_today.html --html-report-title="${host} - Today"
# put a link to the report in our index.html
echo " <LI> <A HREF="${host}_today.html" target="_blank">${host} - Today</A></LI>" >>${dstDir}/index.html
done
#####################################################################
# finish off our index.html
# set a variable with current date/time
runDateTime=$(date +"%Y-%0m-%0d %H:%M:%S")
# complete the index.html file
cat >>${dstDir}/index.html <<FOOTEOM
</UL>
<P>
<HR WIDTH="100%">
<P>
Last updated: ${runDateTime}
<P>
</BODY>
</HTML>
FOOTEOM
# EOF