SARG и несколько логов

Для производственных нужд был настроен Proxy-сервер на базе Debian 6.
Была организована следующая связка: Debian + Squid3 + SARG.
Все было настроено, все работало. Однако спустя неделю я заметил, что SARG не обрабатывает старые логи. Точнее логи были, ибо в logrotate для Squid3 было прописано хранить 365 логов (за 1 год), но генератор отчетов sarg-reports, не обрабатывал их, а работал только с текущим access.log.
После длительных мытарств и поисков в Интернете информации, что-либо похожее я не нашел.
Изучив man по SARG, команды запуска я выяснил, что SARG сам по себе умеет обрабатывать несколько логов, но их нужно прописывать вручную, в результате модифицировал скрипт sarg-reports.

Модификации подверглись функции today (), manual (), monthly (), daily (), weekly ().
Стандартная строка вызова SARG была заменена на следующие 2 строки (на примере в функции manual ())

cd /var/log/squid3
$SARG -f $CONFIG  -l /var/log/squid3/`ls /var/log/squid3/ | grep access` -d day-1 -o $DAILYOUT >$ERRORS 2>&1

Было так:

$SARG -f $CONFIG -d day-1 -o $DAILYOUT >$ERRORS 2>&1

Чтобы было понятней опишу подробней.

При вызове SARG добавляется параметр -l в котором указываются имена всех access.log. Выборка access.log делается при помощи ls, с игнорированием всех других файлов, кроме тех, которые содержат в имени access.
После этих модификаций, sarg-reports стал делать отчеты, собирая все файлы логов.
На всякий случай выкладываю целиком модифицированные функции. Обращаю внимание, что путь /var/log/squid3 — путь до логов Squid3, он может отличаться в зависимости от настроек squid’а.
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
        cd /var/log/squid3
      $SARG -l /var/log/squid3/`ls /var/log/squid3 | grep access` -f $CONFIG -d $MANUALDATE -o $DAILYOUT
  fi
}
today ()
{
  DAILYOUT=$HTMLOUT/$DAILY
  mkdir -p $DAILYOUT
  create_index_html
  cd /var/log/squid3
  $SARG -f $CONFIG   -l /var/log/squid3/`ls /var/log/squid3 | grep access` -d $TODAY -o $DAILYOUT >$ERRORS 2>&1
  exclude_from_log
}
daily ()
{
  DAILYOUT=$HTMLOUT/$DAILY
  mkdir -p $DAILYOUT
  create_index_html
  cd /var/log/squid3
  $SARG -f $CONFIG  -l /var/log/squid3/`ls /var/log/squid3/ | grep access` -d day-1 -o $DAILYOUT >$ERRORS 2>&1
  exclude_from_log
}
weekly ()
{
  WEEKLYOUT=$HTMLOUT/$WEEKLY
  mkdir -p $WEEKLYOUT
  create_index_html
  cd /var/log/squid3
  $SARG -f $CONFIG   -l /var/log/squid3/`ls /var/log/squid3/ | grep access` -d week-1 -o $WEEKLYOUT >$ERRORS 2>&1
  exclude_from_log
}
monthly ()
{
  MONTHLYOUT=$HTMLOUT/$MONTHLY
  mkdir -p $MONTHLYOUT
  create_index_html
  cd /var/log/squid3
  $SARG -f $CONFIG -d month-1 -o $MONTHLYOUT  -l /var/log/squid3/`ls /var/log/squid3/ | grep access`  >$ERRORS 2>&1
  exclude_from_log
}
comments powered by HyperComments