В данном разделе находится общая информация.
В данном разделе находятся примеры различных Linux shell скриптов.
В данном разделе находятся примеры различных скриптов на WSH.
В данном разделе находятся материалы по разным темам.

Правильный CSS!

Для корректного отображения страницы, рекомендуется использовать браузер поддерживающий JavaScript.

Для навигации пользуйтесь боковым меню и кнопками "Описание" и "Подробно".

Linux cкрипт free-sa-report для запуска Free-SA - анализатора логов Squid, в планировщике заданий cron.

(См. также: Оптимизированная версия free-sa-report2, теперь входит в комплект для сборки rpm пакета free-sa).

Основные возможности:

  • Создание ежедневного и накопительного отчета прокси с использованием анализатора Free-SA;
  • Автоматическое получение отчетов из архивного лога Squid, в случае отработки logrotate в текущем дне раньше выполнения задания free-sa-report.

Пример cкрипта для автоматизации процесса разбора логов Squid

Cкрипт free-sa-report разработан для автоматизации процесса разбора логов прокси Squid анализатором Free-SA (http://free-sa.sourceforge.net).

Описание:

  • Данный скрипт помогает создавать и обновлять отчеты Free-SA с определенной структурой каталогов, создавать архив.
  • Автоматический запуск скрипта осуществляется по расписанию cron.
  • Расписание спланировано в соответствии с настройками logrotate для логов Squid.
  • Пример настройки logrotate и cron прилагаются.

Пример free-sa-report файла:

(Скачать файл можно будет здесь. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)
Пример logrotate и cron ниже по тексту.

Условия:

  • Установлены: http-proxy (squid), Free-SA, httpd (например Apache).
    Подробности установки смотрите в документации на соответствующие продукты.
  • Каталог htdocs Apache сервера: /srv/www/htdocs
  • Дерево каталогов free-sa относительно корневого htdocs:
    ./free-sa/
    • month/
      • lastdate-curdate/
      • var/
    • week/
      • lastdate-curdate/
      • var/
    • day/
    • archive/
    В каталоге ./free-sa/month ./free-sa/week ./free-sa/day автоматически создаются подкаталоги за период, типа: dd.mm.yyyy-dd.mm.yyyy-n
  • Архив с отчетами free-sa: ./free-sa/archive/free-sa.tar.bz2
  • Бинарник free-sa: /usr/bin/free-sa
  • Конфиг free-sa: /usr/share/free-sa/free-sa-report.conf (по умолчанию для скрипта) либо /etc/free-sa/free-sa.conf
  • Каталог с логами Squid: /var/log/squid
    Логи: access.log
    Архивы: access.log-*.bz2
  • Предположим, что в нашей системе есть системный пользователь squid, от его имени стартует служба /etc/init.d/squid и анализатор free-sa. Для нормальной работы скрипта установлен владельцем папки /srv/www/htdocs/free-sa и всех подпапок - пользователь squid с правами 755.
  • Каталог /srv/www/htdocs/free-sa/month/var и /srv/www/htdocs/free-sa/week/var - промежуточный, используется для формирования накопительного отчета lastdate-curdate.
  • В примере запуск free-sa осуществляется с параметром export LC_TIME=ru_RU.UTF-8 это требуется для корректного определения дат.

Текст:

#!/bin/sh
#
# free-sa-report
# Report generate script for Free-SA
# Author: Konstantin Nadezhdin <w.homenki.ru>
#
# Read sysconfig
if [ -s /etc/sysconfig/free-sa ]; then
    . /etc/sysconfig/free-sa
else
    echo "Error: /etc/sysconfig/free-sa not exist!"
    exit
fi

FREE_SA=/usr/bin/free-sa
if [ "$USE_FREE_SA_REPORT" != "yes" ]; then
    echo "Error: free-sa-report disabled in /etc/sysconfig/free-sa"

    exit
fi

if [ "$ACCESSLOG" = "" ]; then
    ACCESSLOG=/var/log/squid/access.log
elif [ ! -s $ACCESSLOG ]; then
    echo "$ACCESSLOG not exist!"
    exit
fi

if [ "$HTMLOUT" = "" ]; then
    HTMLOUT=/srv/www/htdocs/free-sa
elif [ ! -d $HTMLOUT ]; then
    echo "$HTMLOUT not exist or isn't directory!"

    exit
fi

if [ "$FREE_SA_CONF" = "" ]; then
    FREE_SA_CONF=/usr/share/free-sa/free-sa-report.conf
elif [ ! -s $FREE_SA_CONF ]; then
    echo "$FREE_SA_CONF not exist!"
    exit
fi

if [ "$TMPDIR" = "" ]; then
    TMPDIR=/var/cache/free-sa
elif [ ! -d $TMPDIR ]; then
    echo "$TMPDIR not exist or isn't directory!"

    exit
fi

export LC_TIME=ru_RU.UTF-8

FREE_SA_ARCH=$HTMLOUT/archive/free-sa.tar.bz2
MONTH_CONF=$TMPDIR/THISMONTH.conf
WEEK_CONF=$TMPDIR/THISWEEK.conf
DAY_CONF=$TMPDIR/TODAY.conf

TODAY=`date "+%Y%m%d"`
let i=`date "+%u"`-1
THISWEEK=`date -d -${i}day '+%d.%m.%Y'`
THISMONTH=`date "+01.%m.%Y"`

make_index ()
{
    if [ ! -s $HTMLOUT/index.html ]; then
        echo -e "<html>\n\
             <head>\n\
             <META http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n\
             <script language=Javascript>\n\
             function change(select) {\n\
                 if( select.options[ select.selectedIndex].value) {\n\
                     select.form.action = select.options[ select.selectedIndex].value;\n\
                     select.form.submit();\n\
                 }\n\
             }\n\
             </script>\n\
             </head>\n\
             <body>\n\
             <h3>Free-SA report</h3>\n\
             <form target='page' name='menuform'>\n\
                <select name='slmenu' onchange='change(this)'>\n\
                    <option selected value=''>-Select reports-</option>\n\
                    <option value = 'day'>Free-SA reports by day</option>\n\
                    <option value = 'week'>Free-SA reports by week</option>\n\
                    <option value = 'month'>Free-SA reports by month</option>\n\
                </select>\n\
             </form>\n\
             </body>\n\
             </html>\n" > $HTMLOUT/index.html
    fi
}

bunzip2_archive_log ()
{
    if [ -s $ACCESSLOG-$TODAY.bz2 ]; then
        bunzip2 -k $ACCESSLOG-$TODAY.bz2
    fi
}

del_bunzip2ed_log ()
{
    if [ -s $ACCESSLOG-$TODAY ]; then
        rm -f $ACCESSLOG-$TODAY
    fi
}

sed_conf ()
{
sed -e 's/^rotate=/#rotate=/' \
    -e 's/^overwrite=/#overwrite=/' \
    -e 's/^name=/#name=/' < $FREE_SA_CONF > $1
}

check_conf ()
{
case $1 in
  month)
    sed_conf "$MONTH_CONF"

    echo -e "\nrotate=\"quarter\"\noverwrite=\"2\"\nname=\"THISMONTH\"" >> $MONTH_CONF
    ;;
  week)
    sed_conf "$WEEK_CONF"
    echo -e "\nrotate=\"month\"\noverwrite=\"2\"\nname=\"THISWEEK\"" >> $WEEK_CONF
    ;;
  day)
    sed_conf "$DAY_CONF"

    echo -e "\nrotate=\"week\"\noverwrite=\"2\"\nname=\"TODAY\"" >> $DAY_CONF
    ;;
  *)
    ;;
esac
}

read_archive_log ()
{
    if [ -s $ACCESSLOG-$TODAY ]; then
        check_conf $1
        $FREE_SA -l $ACCESSLOG-$TODAY $2
    fi
}

check_dir ()
{
    if [ ! -d $HTMLOUT/$1 ]; then
        mkdir $HTMLOUT/$1
    fi
    if [ "$2" = "1" ]; then
        for i in css png js
        do
            cp -pfuv /srv/www/htdocs/free-sa/*.$i $HTMLOUT/$1
        done
    fi
}

bunzip2_archive_log

#Month
check_dir month 1
check_dir month/var
check_conf month
$FREE_SA -l $ACCESSLOG -f $MONTH_CONF -o $HTMLOUT/month/var -d $THISMONTH-
rm -rf $HTMLOUT/month/lastdate-curdate && mv -f $HTMLOUT/month/var/*.*.*-*.*.* $HTMLOUT/month/lastdate-curdate
read_archive_log month "-f $MONTH_CONF -o $HTMLOUT/month -d $THISMONTH-"

check_conf month
$FREE_SA -F -f $MONTH_CONF -o $HTMLOUT/month

#Week
check_dir week 1
check_dir week/var
check_conf week
$FREE_SA -l $ACCESSLOG -f $WEEK_CONF -o $HTMLOUT/week/var -d $THISWEEK-
rm -rf $HTMLOUT/week/lastdate-curdate && mv -f $HTMLOUT/week/var/*.*.*-*.*.* $HTMLOUT/week/lastdate-curdate
read_archive_log week "-f $WEEK_CONF -o $HTMLOUT/week -d $THISWEEK-"
check_conf week
$FREE_SA -F -f $WEEK_CONF -o $HTMLOUT/week

#Day
check_dir day 1
check_conf day
$FREE_SA -l $ACCESSLOG -f $DAY_CONF -o $HTMLOUT/day -d day
read_archive_log day "-f $DAY_CONF -o $HTMLOUT/day -d day"
check_conf day
$FREE_SA -F -f $DAY_CONF -o $HTMLOUT/day

rm -rf $TMPDIR/*

del_bunzip2ed_log

make_index

#Archive free-sa
check_dir archive
rm -f $FREE_SA_ARCH
tar -cjf $FREE_SA_ARCH --exclude=archive* -C $HTMLOUT .

exit

	

Пример /etc/sysconfig/free-sa:

## Path:        Applications/Free-SA
## Description: Configuration of free-sa
## Type:        yesno
## Default:     no
#
# Should free-sa-report be enabled to start by cron ("yes" or "no")
#
# To add free-sa-report to crontab.
# First read:
# man crontab
# Then use:
# crontab -u squid -e
# or:
# crontab -u squid path_to_sample_cron_file
#
# Sample cron file:
#
# PATH=/sbin:/bin:/usr/bin
# MAILTO=root
# 0 21 * * * /usr/sbin/free-sa-report
#
USE_FREE_SA_REPORT="yes"

## Type:        string
## Default:     "/var/log/squid/access.log"
#
# Path to squid access.log
#
ACCESSLOG="/var/log/squid/access.log"

## Type:        string
## Default:     "/srv/www/htdocs/free-sa"

#
# Where free-sa should save reports
#
HTMLOUT="/srv/www/htdocs/free-sa"

## Type:        string
## Default:     "/usr/share/free-sa/free-sa-report.conf"
#
# Path to default free-sa-report configuration file
#
FREE_SA_CONF="/usr/share/free-sa/free-sa-report.conf"

## Type:        string
## Default:     "/var/cache/free-sa"
#
# Where free-sa-report should create temp configuration
# files for day, week and month reports
#
TMPDIR="/var/cache/free-sa"

	

Пример настройки logrotate файла:

Позволяет ежедневно ротировать архив free-sa.tar.bz2

Текст:

# /etc/logrotate.d/free-sa
# $Id$

	/srv/www/htdocs/free-sa/archive/free-sa.tar.bz2  {
	daily
	rotate 7
	missingok
	nocreate
	sharedscripts
	postrotate
	endscript
}

	

Пример настройки cron:

  • Позволяет ежедневно выполнять free-sa-report в 23:00.
  • Выбор времени должен быть согласован с отработкой logrotate! В разных дистрибутивах схема запуска logrotate может отличаться, free-sa-report должен отрабатывать позже!
  • Для создания нового задания в cron можно добавить указанную ниже строку в файл cron_file, затем выполнить команду crontab для пользователя squid: crontab -u squid cron_file
    Проверить добавилось ли задание: crontab -u user -l

Текст:

	0 23 * * * /usr/sbin/free-sa-report

	

Пример конфигурационного файла free-sa.conf

Вывод команды: grep -Ev "^#|^$" free-sa.conf (коментарии опущены).
downloads="/etc/free-sa/downloads.sample"
tmpdir="/var/cache/free-sa"
ts="true"
paf="true"
saf="true"
pdn="true"
sdn="true"
cct="true"
pst="true"
dld="true"
fullurl="true"
users="true"
url_limit="80"
name="free-sa-report"
locale="ru_RU.UTF-8"
divisor="M"

	

Пример конфигурационного файла THISMONTH.conf, создаваемого скриптом автоматически

Отличается от предыдущего только некоторыми параметрами:
name="THISMONTH"
overwrite="2"
rotate="quarter"
	

Пример конфигурационного файла THISWEEK.conf, создаваемого скриптом автоматически

Отличается от предыдущего только некоторыми параметрами:
name="THISWEEK"
overwrite="2"
rotate="month"
	

Пример конфигурационного файла TODAY.conf, создаваемого скриптом автоматически

Отличается от предыдущего только некоторыми параметрами:
name="TODAY"
overwrite="2"
rotate="week"
	

Yandex.Metrika

Page modification: Птн Сен 10 16:48:10 MSD 2010
Используется Quanta+ 3.5.10 Under the GPL v2 license.