Здравствуйте,
столкнулся с такой проблемой - есть сквид, на нем каждый месяц sarg отчеты генерит; недавно писал прогу для отрубания клиентов при превышении трафика, так случайно заметил, что ее результаты с sarg'ом не сходятся. Взял небольшой кусочек логов - вот результаты
sarg - 142646 байт
моя прога - 71504 байт
тупо взял калькулятор и поприбавлял - 71504 байтОбъясните, плз, кто прав, кто виноват.
10.10.12.51 - - [05/Mar/2004:13:35:00 +0000] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 200 362 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:04 +0000] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 200 362 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:06 +0000] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 0 0 TCP_MISS:NONE
10.10.12.51 - - [05/Mar/2004:13:35:06 +0000] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 0 0 TCP_MISS:NONE
10.10.12.51 - - [05/Mar/2004:13:35:07 +0000] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 302 522 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:09 +0000] "GET http://windowsupdate.microsoft.com/ HTTP/1.1" 304 336 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:09 +0000] "GET http://windowsupdate.microsoft.com/redirect.js HTTP/1.1" 304 270 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:11 +0000] "GET http://v4.windowsupdate.microsoft.com/default.asp HTTP/1.1" 302 410 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:12 +0000] "GET http://v4.windowsupdate.microsoft.com/en/default.asp HTTP/1.1" 200 8387 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:14 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/js/redirect.js HTTP/1.1" 200 3829 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:15 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/js/top.js HTTP/1.1" 200 22460 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:16 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/js/top.vbs HTTP/1.1" 200 512 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:17 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/js/survey.js? HTTP/1.1" 200 1155 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:18 +0000] "GET http://v4.windowsupdate.microsoft.com/en/toc.asp? HTTP/1.1" 200 7091 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:18 +0000] "GET http://v4.windowsupdate.microsoft.com/en/splash.asp? HTTP/1.1" 200 1851 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:18 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/js/toc.js HTTP/1.1" 200 9539 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:19 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/css/hcp.css HTTP/1.1" 304 269 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:19 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/css/toc.css HTTP/1.1" 200 1565 TCP_MISS:DIRECT
10.10.12.51 - - [05/Mar/2004:13:35:20 +0000] "GET http://v4.windowsupdate.microsoft.com/shared/js/content.js HTTP/1.1" 200 12584 TCP_MISS:DIRECT
В свое время была такая же проблема, я щас про нее и забыл совсем... Верить надо своим глазам и калькулятору :) У меня тоже скрипт считал в два раза меньше чем сарг на махоньких логах, а на больших логах (метров 100-200), все сходится байт в байт. Попробуй скрипт и сарг на логе побольше, хотябы метров 5, и напиши чего получилось.
да в том то и дело, что на больших (несколько десятков метров), sarg начинает давать немного меньше, чем считает моя прога, т.е. получается, что sarg считает все что угодно, но только не логи....
>да в том то и дело, что на больших (несколько десятков метров),
>sarg начинает давать немного меньше, чем считает моя прога, т.е. получается,
>что sarg считает все что угодно, но только не логи....сарг считает нормально, просто считать своим скриптом трафик надо правильно (в логе надо учитывать не только "размер" но и "метод"). У меня есть подозрения, что ошибка/недосмотр в скрипте, покажи его.
вот она, я ее переделал с проги, к-ую нашел в инете, там формат логов был другой и интерфейс с postgre старенький
есть, понятно, еще и вторая часть, к-ая блокировкой занимается, но она отношения к теме не имеетсамую суть я звездочками выделил
#!/usr/bin/perl
use strict;
use DBI;my ($remotehost,$rfc931,$authuser,$date,$request,$status,$bytes,$resultcode);
my ($sql, $type1, $type2);my $dbh = DBI->connect("dbi:Pg:dbname=squid;host=localhost","","",
{PrintError => 0});if ((defined $DBI::err) and ($DBI::err !=0)){
print $DBI::errstr."\n";
exit($DBI::err);
}# Open squid log file generated by `squid -k rotate`
open (FILE, "/var/log/squid/access.log") or die;
while(<FILE>) {
m/^(\S+)\s(\S+)\s(\S+)\s\[(\S+\s).+?\]\s\"(.+?)\"\s(\d+?)\s(\d+?)\s(\S+)$/;
$remotehost = $1; # address of the remote host
$rfc931 = $2; # remote logname of the user
$authuser = $3; # the username as which the user has authenticated himself
$date = $4; # date and time of the request
$request = $5; # the request line exactly as it came from the client
$status = $6; # the HTTP status code returned to the client
$bytes = $7; # the content-length of the document transferred
$resultcode = $8; # hierarchy code$request =~ s/ICP_QUERY/GET/;
$request =~ s/\'//g;
($type1,$type2) = split (/:/,$resultcode);
*********************************************************************
if ((($type1 eq 'TCP_MISS') or ($type1 eq 'TCP_REFRESH_MISS')
or ($type1 eq 'TCP_CLIENT_REFRESH_MISS')) and ($request =~ /^GET/)
and ($type2 ne 'NONE') and ($bytes != 0)) {
*********************************************************************
$sql = "INSERT INTO squid VALUES ('$date','$remotehost','$bytes','$request','$rfc931')";
&sqlexec ($sql,$dbh);
}
}close (FILE);
# delete temporary data in
# ip_clients and auth_clients tables
$sql = "delete from access_auth"; &sqlexec ($sql,$dbh);
$sql = "delete from access_ip"; &sqlexec ($sql,$dbh);# fill in data of downloaded sizes
$sql = "INSERT INTO access_auth SELECT ident, sum(size) FROM squid WHERE ident <> '-' GROUP BY ident";
&sqlexec ($sql,$dbh);$sql = "INSERT INTO access_ip SELECT host, sum(size) FROM squid WHERE ident = '-' GROUP BY host";
&sqlexec ($sql,$dbh);exit;
# -----------------------------------------------------------
sub sqlexec {
my ($sql,$dbh)=@_;
my $sth = $dbh->prepare($sql);
my $rv = $sth->execute();if(!defined $rv) {
print "Error while $sql\n";
print $dbh->errstr."\n";
exit;
}
}
1) А какая разница в отчетах сарга и твоей проге?
2) /var/log/squid/access.log - закрытый лог или текущий и в него пишется инфа от сквида?
>1) А какая разница в отчетах сарга и твоей проге?
>2) /var/log/squid/access.log - закрытый лог или текущий и в него пишется инфа
>от сквида?
2) я все енто в виртуалке пробую, потому access.log, а не log.0 - но лог закрытый
1) я взял рабочий лог с 1 по сегодня, перенес на виртуалку к себе и вот результаты, сокращенные, конечно :)Topsites Report
Sites & Users ReportIP SARG моя прога
10.10.12.31 216.709.813 214.528.720
10.10.10.27 164.415.952 146.586.835
10.10.10.1 162.916.739 95.694.362тут должен заметить хитрую штуку
1. моя показывает меньше, чем сарг, хотя за прошлый полный месяц, моя показывала больше его
2. на 10.10.10.1 наблюдается тенденция удваивания логов саргом при небольшом трафике
просто абалдеть :)
>2) я все енто в виртуалке пробую, потому access.log, а не log.0
>- но лог закрытый
>1) я взял рабочий лог с 1 по сегодня, перенес на виртуалку
>к себе и вот результаты, сокращенные, конечно :)
>
>Topsites Report
>Sites & Users Report
>
> IP
> SARG
> моя прога
>10.10.12.31 216.709.813 214.528.720
>10.10.10.27 164.415.952 146.586.835
>10.10.10.1 162.916.739 95.694.362
>
>тут должен заметить хитрую штуку
>1. моя показывает меньше, чем сарг, хотя за прошлый полный месяц, моя
>показывала больше его
>2. на 10.10.10.1 наблюдается тенденция удваивания логов саргом при небольшом трафике
>просто абалдеть :)Если твоя прога выдает меньше - так и должно быть, ты ж считаешь трафик не из кеша, а сарг - ВЕСЬ. Сравни со значением CACHE OUT в таблице сарговского отчета. А вот больше показывать не должна (хотя такое возможно на незакрытых логах сквида, я потому и спрашивал).
Напиши сравнение Прога <> SARG_OUT_CACHE (из таблицы).
>Если твоя прога выдает меньше - так и должно быть, ты ж
>считаешь трафик не из кеша, а сарг - ВЕСЬ. Сравни со
>значением CACHE OUT в таблице сарговского отчета. А вот больше показывать
>не должна (хотя такое возможно на незакрытых логах сквида, я потому
>и спрашивал).
>Напиши сравнение Прога <> SARG_OUT_CACHE (из таблицы).IP SARG моя прога cache_out result
10.10.12.31 216.709.813 214.528.720 99.19 214.954.463
10.10.10.27 164.415.952 146.586.835 89.58 147.283.810
10.10.10.1 162.916.739 95.694.362 97.56 158.941.570
расхождения есть, хотя они и незначительны (если не считать третью строчку)я щас попробую искусственно увеличить логи раз в 5-6 и еще раз крутану, если сарг на даты плеваться не будет
увеличил логи в 7 раз, та же картина - все пропорционально увеличилось, даже неправильный 10.10.10.1 в семь раз увеличилсяможет народ все же подправит сарг, чтоб маленькие логи тоже нормально считал
>увеличил логи в 7 раз, та же картина - все пропорционально увеличилось,
>даже неправильный 10.10.10.1 в семь раз увеличился
>
>может народ все же подправит сарг, чтоб маленькие логи тоже нормально считал
>Подправить сарг не так то просто - поверь мне, я правил :) Тем более что понять, где грабли, очень трудно. Почему на махоньких логах он в 2 раза накручивает, а на больших все ОК?! Я б у Pedro спросил, но он меня уже наверное в ингнор лист кинул, чтоб не доставал :)
>>увеличил логи в 7 раз, та же картина - все пропорционально увеличилось,
>>даже неправильный 10.10.10.1 в семь раз увеличился
>>
>>может народ все же подправит сарг, чтоб маленькие логи тоже нормально считал
>>
>
>Подправить сарг не так то просто - поверь мне, я правил :)
>Тем более что понять, где грабли, очень трудно. Почему на махоньких
>логах он в 2 раза накручивает, а на больших все ОК?!
>Я б у Pedro спросил, но он меня уже наверное в
>ингнор лист кинул, чтоб не доставал :)и на том спасибо :)