SARG

/etc/crontab:

### SQUID-Monitoring via Sarg:
00 06-19/1 * * *        root    /usr/local/chhaas-skripts/sarg-reports.sh today > /dev/nul
00 00 * * *     root    /usr/local/chhaas-skripts/sarg-reports.sh daily > /dev/nul
00 01 * * 1     root    /usr/local/chhaas-skripts/sarg-reports.sh weekly > /dev/nul
30 02 1 * *     root    /usr/local/chhaas-skripts/sarg-reports.sh monthly > /dev/nul

/usr/local/chhaas-skripts/sarg-reports.sh:

#!/bin/sh

# SARG - Daily/Weekly/Monthly Squid usage reports creation tool # Written by Ugo Viti ugo.viti@initzero.it

# —————————————————————————- # # Copyright (C) 2005 Ugo Viti # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # —————————————————————————- # Thanks for enanchements to: # - martijn # - Stas Degteff https://sourceforge.net/users/stas_degteff/

VER=20050202

## What is this? # sarg-reports (this file) is a simple bash script written to automate # the SARG (a powerful squid log analyzer) reports and log management. # Sarg it self, provide to end user a generic interface to create # reports based on squid access log (begin of log to current date). # sarg-reports (this script) is useful because it allow you to easly # create and manage Daily, Weekly and Monthly reports. # Try it, within 5 minutes you will be ready to rule :-) # using sarg-reports is very easy, read the following 3 steps to know how

## Requirements # a) An unix system with bash shell (like GNU/Linux, FreeBSD, etc…) # b) Squid - http://www.squid-cache.org # c) Sarg - http://web.onda.com.br/orso/sarg.html ## ## Installation guide and configuration parameters ##

# 1) Download Squid and Sarg, Install, Configure and Tune # they before continue reading

# 2) In root crontab (crontab -e) insert the following lines: # (the today report creation time depend mostly of your squid server # load average, tune it): # # — BEGIN ROOT CRONTAB — # PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin # 00 08-18/1 * * * sarg-reports today # 00 00 * * * sarg-reports daily # 00 01 * * 1 sarg-reports weekly # 30 02 1 * * sarg-reports monthly # — END ROOT CRONTAB — # # REMEMBER: if you use logrotate, configure it to rotate the logs within MONTHLY basis, # AFTER sarg-reports created the monthly html report. # 3) Customize the following variables: # (Please, configure accurately the sarg.conf file before) # # (SARG) The sarg executable location # (CONFIG) The sarg main configuration file location # (HTMLOUT) Location where will be saved the reports # (PAGETITLE) The title of main index page # (LOGOIMG) Image logo to view in main index page # (LOGOLINK) HTTP web page link of logo # (DAILY) Word 'daily' translation, translate it to your language # (WEEKLY) Word 'weekly' translation, translate it to your language # (MONTHLY) Word 'monthly' translation, translate it to your language # (EXCLUDELOG1) Exclude text from cron emails # + (normally, sarg, during cron activity, if it don't find any valid records, # (EXCLUDELOG2) it will output an error message (usually on 'today' reports). # I don't want to be warned by email about this, so, i wrote the 'text' # that will be never logged. # This is useful to receive email of real problems only (enjoy that)

#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

     SARG=/usr/bin/sarg
   CONFIG=/etc/sarg.conf
  HTMLOUT=/srv/www/htdocs/sarg
PAGETITLE="Proxy (Squid) Statistiken von $(hostname), generiert von Sarg"
  LOGOIMG=http://vw01.uk-bw.de:8686/grafik/ukbw-logo.gif
 LOGOLINK=http://www.uk-bw.de
    DAILY=Taeglich
   WEEKLY=Woechentlich
  MONTHLY=Monatlich

EXCLUDELOG1=„SARG: Keine Eintraege ausgewertet.“ EXCLUDELOG2=„SARG: Fertig“ #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

###################################################################### ## The configuration is end, so don't touch anything bellow

# TEMP Files TMPFILE=/tmp/sarg-reports.$RANDOM ERRORS=„${TMPFILE}.errors“

# Date Calc MANUALDATE=$2 case „$(uname)“ in „FreeBSD“)

       TODAY=$(date +%d/%m/%Y)
   YESTERDAY=$(date -v-1d +%d/%m/%Y)
     WEEKAGO=$(date -v-1w +%d/%m/%Y)
    MONTHAGO=$(date -v-1m +01/%m/%Y)-$(date -v-1m +31/%m/%Y)
 ;;

„OpenBSD“)

       TODAY=$(date +%d/%m/%Y)
   YESTERDAY=$(date -r $((`date +%s` - 86400 )) +%d/%m/%Y)
     WEEKAGO=$(date -r $((`date +%s` - 604800)) +%d/%m/%Y)
    MONTHAGO=$(perl -e '@t=localtime(time); $y=$t[4]==0?$t[5]+1899:$t[5]+1900; $m=$t[4]==0?12:$t[4]; print "1/$m/$y-",$m==2?$y%4>0?28:29:$m==4||$m==6||$m==9||$m==11?30:31 ,"/$m/$y\n";')
 ;;

*)

       TODAY=$(date --date "today" +%d/%m/%Y)
   YESTERDAY=$(date --date "1 day ago" +%d/%m/%Y)
     WEEKAGO=$(date --date "1 week ago" +%d/%m/%Y)
    MONTHAGO=$(date --date "1 month ago" +01/%m/%Y)-$(date --date "1 month ago" +31/%m/%Y)
 ;;

esac

# Fix for Red Hat 9 systems and coreutils prior to 5.0 version export LC_ALL=C

# Main index.html creation create_index_html () {

echo -e "\
<html>\n\
<head>\n\
<title>$PAGETITLE</title>\n\
</head>\n\
<body>\n\
<div align=center>\n\
  <a href=$LOGOLINK><img border=0 src=$LOGOIMG></a>\n\
  <table border=0 cellspacing=6 cellpadding=7>\n\
    <tr>\n\
      <th align=center nowrap><b><font face=Arial size=4 color=green>$PAGETITLE</font></b></th>\n\
    </tr>\n\
    <tr>\n\
      <td align=center bgcolor=beige><font face=Arial size=3><a href=$DAILY>$DAILY</a></font></td>\n\
    </tr>\n\
    <tr>\n\
      <td align=center bgcolor=beige><font face=Arial size=3><a href=$WEEKLY>$WEEKLY</a></font></td>\n\
    </tr>\n\
    <tr>\n\
      <td align=center bgcolor=beige><font face=Arial size=3><a href=$MONTHLY>$MONTHLY</a></font></td>\n\
    </tr>\n\
  </table>\n\
</div>\n\
</body>\n\
</html>" > $HTMLOUT/index.html

}

# Functions exclude_from_log () {

cat $ERRORS | grep -v "$EXCLUDELOG1" | grep -v "$EXCLUDELOG2"
rm -f $TMPFILE*

}

manual () {

DAILYOUT=$HTMLOUT/$DAILY
mkdir -p $DAILYOUT
create_index_html
if [ -z "$MANUALDATE" ]
  then
    echo "No date given, please specify a valid date (DD/MM/YYYY)"
  else
    $SARG -f $CONFIG -d $MANUALDATE -o $DAILYOUT
fi

}

today () {

DAILYOUT=$HTMLOUT/$DAILY
mkdir -p $DAILYOUT
create_index_html
$SARG -f $CONFIG -d $TODAY -o $DAILYOUT >$ERRORS 2>&1
exclude_from_log

}

daily () {

DAILYOUT=$HTMLOUT/$DAILY
mkdir -p $DAILYOUT
create_index_html
$SARG -f $CONFIG -d $YESTERDAY -o $DAILYOUT >$ERRORS 2>&1
exclude_from_log

}

weekly () {

WEEKLYOUT=$HTMLOUT/$WEEKLY
mkdir -p $WEEKLYOUT
create_index_html
$SARG -f $CONFIG -d $WEEKAGO-$YESTERDAY -o $WEEKLYOUT >$ERRORS 2>&1
exclude_from_log

}

monthly () {

MONTHLYOUT=$HTMLOUT/$MONTHLY
mkdir -p $MONTHLYOUT
create_index_html
$SARG -f $CONFIG -d $MONTHAGO -o $MONTHLYOUT >$ERRORS 2>&1
exclude_from_log

}

case $1 in

  manual)
      manual
      ;;
  today)
      today
      ;;
  daily)
      daily
      ;;
  weekly)
      weekly
      ;;
  monthly)
      monthly
      ;;
   *)
      echo "SARG - Daily / Weekly / Monthly - Squid proxy usage reports creation tool"
      echo "Written by Ugo Viti <ugo.viti@initzero.it>"
      echo "Version: $VER"
      echo
      echo "Usage: $0 [OPTIONS]"
      echo
      echo "Allowed options:"
      echo "    manual,  Create Manual report"
      echo "     today,  Create Today report"
      echo "     daily,  Create Daily report"
      echo "    weekly,  Create Weekly report"
      echo "    montly,  Create Monthly report"
      exit 0

esac

## HISTORY: # 20050502 - Stas Degteff added support for non latin Charset and added support for OpenBSD # 20030826 - FreeBSD support (thanks to martijn to let me coding on your FreeBSD server :-)) # 20030715 - Some cleanups # 20030623 - Manual report creation # 20030620 - Main Index creation # 20030619 - Solved 'sort' bug on Red Hat 9 systems # 20030618 - First Version

## TODO: # - Smarty weekly recognition… # Like „begin of last week to end of last week“, # doesn't like this script do: „7 days ago to yesterday“ # - Monthly recognition isn't so elegant (is very ugly, i know) # - Suggestions are welcome :-) # - If you Rotate the squid logs before sarg-reports will run, # it will not create any html reports # (TIPS: Rotate the logs after sarg-reports)

segmentation-fault when running sarg

Hello Vitaliy,
 
in your post on the SARG-forum you mentioned a "fix for segmentation fault in sarg-2.2.3.1"-patch.
 
Where can this patch be downloaded?
 
I have trouble running SARG because of sementation faults(see my posting 
https://sourceforge.net/forum/forum.php?thread_id=1672310&forum_id=363374 )

Thanks
Christoph.



index