Sarg - парсер логов Squid

Аватар пользователя Raven2000

Сегодня будем разбирать логи Squid и присваивать тариф "Имеемый" человеку стоящему на первом месте в статусе "Загружено мегабайт".

Установка банальна и тривиальна.

# make search name=sarg
Port:   sarg-2.2.7.1_2
Path:   /usr/ports/www/sarg
Info:   Squid log analyzer and HTML report generator
Maint:  garga@FreeBSD.org
B-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1
R-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1
WWW:    _http://sarg.sourceforge.net/
 
# cd /usr/ports/www/sarg
# make config
 
Options for sarg 2.2.7.1_2
[X] GD  Enable GD support
 
# make install clean

Настроим по вкусу Sarg я укажу свои настройки вы можете поэкспериментировать:

# cd /usr/local/etc/sarg/
# cp sarg.conf.default sarg.conf
# cat sarg.conf
 
# Укажем нужный язык 
language Russian_koi8
 
# Указываем путь до логов Squid
access_log /var/log/squid/access.log
 
# Включаем построение графиков
graphs yes
graph_days_bytes_bar_color orange
 
title "Squid User Access Reports"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 12px
header_font_size 12px
title_font_size 14px
text_bgcolor lavender
logo_text_color #000000
image_size 80 45
 
temporary_dir /tmp
 
# Куда складывать отчеты.
output_dir /usr/local/www/sarg/
 
# Преобразовывать IP в имя по DNS. При большом парке машин 
# или проблема с DNS рекомендую отключать эту опцию.
resolve_ip yes
 
# Сортировка юзеров в выводе по USER CONNECT BYTES TIME
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
 
date_format e
remove_temp_files yes
index yes
overwrite_report yes
topsites_num 100
index_sort_order D
max_elapsed 28800000
 
# Разнообразные типы отчетов, включим все.
report_type topusers topsites sites_users users_sites
date_time denied auth_failures site_user_time_date downloads
 
date_time_by elap
charset Koi8-r
 
show_sarg_info no
 
download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,md
b,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"

Добавляем задачу в Cron каждую пятницу в 23.00 парсим логи и каждый месяц прибираем Squid

# SARG
0       23      *       *       5       /usr/local/bin/sarg > /dev/null 2>&1
 
# Moved Old Squid Log
0       0       1       *       *       /root/scripts/squid_log_moved  > /dev/null 2>&1

В Cron можно и так записывать >>форум<<

Скрипт очисти логов Squid:

# cat /scripts/squid_log_moved
 
#!/bin/sh
#
current_year=`date '+%Y'`
current_month=`date '+%m'`
current_date=`date '+%d'`
## Создаем директорию для логов
log_dir="/var/squid/old_logs/${current_year}/${current_month}"
mkdir -p ${log_dir} 2>/dev/null
 
## Очищаем логи SQUID
cat /var/squid/logs/access.log > /tmp/log.tmp
cat /dev/null > /var/squid/logs/access.log
gzip -c /tmp/log.tmp  > ${log_dir}/squid.log.gz
#gzip -c ${log_dir}/squid.log  > ${log_dir}/squid.log.gz
#rm -R /usr/local/www/sarg/*

В вашей директории технического сайта сделайте символическую ссылку.

% cd /home/serv/www/data
# ln -s /usr/local/www/sarg/ sarg
# ll
total 4
lrwxr-xr-x  1 root  serv    20B  5 авг 11:32 glpi -> /usr/local/www/glpi/
lrwxr-xr-x  1 root  serv    26B  5 авг 11:17 phpMyAdmin -> /usr/local/www/phpMyAdmin/
-rw-r--r--  1 serv  serv    21B  5 авг 10:51 phpinfo.php
lrwxr-xr-x  1 root  serv    27B  5 авг 12:23 phpldapadmin -> /usr/local/www/phpldapadmin
lrwxr-xr-x  1 root  serv    20B 17 авг 13:16 sarg -> /usr/local/www/sarg/
drwxr-xr-x  3 serv  serv   512B 12 авг 13:19 sqstat

Анализируем логи, заходим на технический сайт и смотрим:

# sarg
SARG: Records in file: 8717, reading: 100.00%
SARG: Отчет успешно сгенерирован в: /usr/local/www/sarg//01Feb2011-01Feb2011

Общая история:

Кто тут интернет активный? 192.168.0.56 самый работящий!

Офис должен работать и заниматься делом! Вот как тут и надо бы выписать ему премию. =)

Дополнительные материалы
Ваша оценка: Нет Средняя: 5 (2 голоса)

Для ротации логов сквида

Для ротации логов сквида делается простой запрос вида squid -k rotate. Сквид сам все сделает - обрежет как надо.

RE:Для ротации логов сквида

Не дописал просто

20    0    1    *    *    /usr/local/sbin/squid -k rotate > /dev/null 2>&1
*/15    *    *    *    *    /usr/local/etc/sarg.cron m > /dev/null 2>&1
10    0    1    *    *    /usr/local/etc/sarg.cron lm > /dev/null 2>&1
 
cat /usr/local/etc/sarg.cron
#!/bin/sh
BIN=/usr/local/bin/sarg
LOGFILE=/var/log/squid/access.log
OUTDIR=/var/www/sarg
#CONF=/usr/local/etc/sarg/sarg.current
CONF=/usr/local/etc/sarg/sarg.conf
case "$1" in
m)
  $BIN -d `date -v1d +%d/%m/%Y`-`date +%d/%m/%Y` -f $CONF -l $LOGFILE.0
-l $LOGFILE -o $OUTDIR
 
  ;;
lm)
  $BIN -d `date -v1d -v-1m +%d/%m/%Y`-`date -v1d -v-1d +%d/%m/%Y` -l
$LOGFILE.0 -l $LOGFILE -o $OUTDIR/monthly
  ;;
*)
  echo "Usage: `basename $0` {dwm|lm}" >&2
  ;;
esac
 
exit 0
 
 
 
20    0    1    *    *    /usr/local/sbin/squid -k rotate > /dev/null 2>&1
50     *     *     *     *     /usr/local/etc/sarg-d.sh > /dev/null 2>&1
15    0    */1    *    *    /usr/local/etc/sarg-w.sh > /dev/null 2>&1
20     0     *     */1     *     /usr/local/etc/sarg-m.sh > /dev/null 2>&1
 
cat /usr/local/etc/sarg-d.sh
#!/bin/sh
/usr/local/bin/sarg -d `date "+%d/%m/%Y"`
 
cat /usr/local/etc/sarg-w.sh
#!/bin/sh
/usr/local/bin/sarg -d `date -v-7d "+%d/%m/%Y"`-`date "+%d/%m/%Y"`
 
cat /usr/local/etc/sarg-m.sh
#!/bin/sh
/usr/local/bin/sarg -d `date -v-1m "+%d/%m/%Y"`-`date "+%d/%m/%Y"`

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

А еще советую посмотреть на

А еще советую посмотреть на SAMS - это намного удобней в плане мониторинга и лимитирования.

RE:А еще советую посмотреть на

ИМХО для любителей ГУИ да

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

можно указать несколько -l и

можно указать несколько -l и передать несколько лог файлов, в том числе и сжатые, а ротацией пусть занимается что там есть уже

cat /etc/cron.daily/0sarg

#!/bin/sh
 
 
TODAY=$(date --date "1 day ago" +%d/%m/%Y)
 
 
LOG_FILES=
if [ -s /var/log/squid3/access.log.3.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.3.gz"
fi
if [ -s /var/log/squid3/access.log.2.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.2.gz"
fi
if [ -s /var/log/squid3/access.log.1.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.1.gz"
fi
if [ -s /var/log/squid3/access.log.3 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.3"
fi
if [ -s /var/log/squid3/access.log.2 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.2"
fi
if [ -s /var/log/squid3/access.log.1 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.1"
fi
if [ -s /var/log/squid3/access.log ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log"
fi
 
 
export LC_ALL=C
/usr/bin/sarg $LOG_FILES -f /etc/squid3/sarg.conf \
    -o /var/www/sarg/Daily -z -d $TODAY  >> /var/log/sarg/daily 2>&1

cat /etc/cron.weekly/0sarg

#!/bin/bash
 
TODAY=$(date +%d/%m/%Y)
 
LASTWEEK=$(date --date "1 week ago" +%d/%m/%Y)
 
LOG_FILES=
if [ -s /var/log/squid3/access.log.5.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.5.gz"
fi
if [ -s /var/log/squid3/access.log.4.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.4.gz"
fi
if [ -s /var/log/squid3/access.log.3.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.3.gz"
fi
if [ -s /var/log/squid3/access.log.2.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.2.gz"
fi
if [ -s /var/log/squid3/access.log.1.gz ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.1.gz"
fi
if [ -s /var/log/squid3/access.log.5 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.5"
fi
if [ -s /var/log/squid3/access.log.4 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.4"
fi
if [ -s /var/log/squid3/access.log.3 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.3"
fi
if [ -s /var/log/squid3/access.log.2 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.2"
fi
if [ -s /var/log/squid3/access.log.1 ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.1"
fi
if [ -s /var/log/squid3/access.log ]; then
        LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log"
fi
 
 
export LC_ALL=C
/usr/bin/sarg $LOG_FILES -f /etc/squid3/sarg.conf \
    -o /var/www/sarg/Weekly -z -d $LASTWEEK-$TODAY >> /var/log/sarg/weekly 2>&1

3-й в том же духе.

Последние статьи

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer