Добрый день.
Появилась задача мониторинга количества активных пользователей Internet.
DB - Freebsd 6.2 UTM 5.2.1-008
NAS - IPFW + ng_nat + netflow export
Начал рисовать количество пользователей которым открыт доступ на фаерволе - не подходит.
Хочется снимать статистику пользователей которые реально используют NAS в текущий момент времени ..... (натятся. либо их пакеты проходят через роутер)
Может у кого то есть идеи. или может кто то уже рисует такую статистику ....
Реально подходит любой источник информации дающий цифру активных пользователей .... Дальше в рисовалку я уже сам данные внесу ....
Мониторинг количества активных пользоателей
mpd нет .... в том то и дело, что у меня фаервол на таблицах построен ....
Есть еще правда коммутатор ядра, может оттуда взять количество MAC адресов в таблице по snmp ....
А расскажите пожалуйста подробней о dhs_sessions_log ....
в эту таблицу вносятся данные о текущих сессиях ? или какая информация ?
Acct_status_Type=1 когда ? при включении инета ?
Ведь юзер может включить инет и выключить свой комп ... .
А мне нужны именно активные пользователи
Есть еще правда коммутатор ядра, может оттуда взять количество MAC адресов в таблице по snmp ....
А расскажите пожалуйста подробней о dhs_sessions_log ....
в эту таблицу вносятся данные о текущих сессиях ? или какая информация ?
Acct_status_Type=1 когда ? при включении инета ?
Ведь юзер может включить инет и выключить свой комп ... .
А мне нужны именно активные пользователи
так из данных netflow и бери
периодично парси файлы с детальной статистикой или из таблиц бери, в них все есть для этого и время и ипы, группируешь по ипам данные за конкретный интервал времени и все
можно при выполнении raw_fd_script эту инфу в базу кидать
или скрипт для кактуса сделать
из ядра маки считать ... так они могут просто в сети сидеть без использования инета
периодично парси файлы с детальной статистикой или из таблиц бери, в них все есть для этого и время и ипы, группируешь по ипам данные за конкретный интервал времени и все
можно при выполнении raw_fd_script эту инфу в базу кидать
или скрипт для кактуса сделать
из ядра маки считать ... так они могут просто в сети сидеть без использования инета
если у аккаунта стоит Acct_status_Type=1 значит у него "висит" открытая сессия, и значит он пользуется...Kristian писал(а):А расскажите пожалуйста подробней о dhs_sessions_log ....
в эту таблицу вносятся данные о текущих сессиях ? или какая информация ?
Acct_status_Type=1 когда ? при включении инета ?
Ведь юзер может включить инет и выключить свой комп ... .
А мне нужны именно активные пользователи
код ниже тебе нужно подставить только
"user_name"
"db_password"
"UTM5"
Код: Выделить всё
<?php
$db_connect=mysql_connect("127.0.0.1", "user_name", "db_password") or die ("Connect failed.");
$db_coonect=mysql_select_db("UTM5") or die ("Fatal database query 'USE' error");
?>
<HTML>
<HEAD>
<!-- 2009 -->
<style>
{FONT-SIZE: 12px;}
{ font-family: Verdana, Arial, Helvetica, sans-serif; }
A:link { COLOR: #003366; TEXT-DECORATION: none }
A:visited { COLOR: #003366; TEXT-DECORATION: none }
A:active { COLOR: #000099; TEXT-DECORATION: none }
A:hover {COLOR: #000000; TEXT-DECORATION: underline}
Body { background-color:#ffffcc; color:#000000 }
</style>
<TITLE>::OnLine-stats::</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<meta name="generator" content="Руки ГОСТ-85">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="refresh" content='60'>
</HEAD>
<BODY BGCOLOR="#000000" LINK=blue VLINK=blue VLINK=blue>
<?
function format_time($sec)
{
$a = array(
86400 => 'дн.', // количество секунд в сутках
3600 => 'ч.', // количество секунд в часе
60 => 'мин.', // количество секунд в минуте
1 => 'сек.' // количество секунд в секунде
);
$out = '';
foreach ($a as $k=>$v) {
$tmp = floor($sec/$k);
$out .= ($tmp?$tmp.$v.' ':'');
$sec -= $tmp*$k;
}
return $out;
}
function sectime($stri,$tota) {
$hour=$tota / 3600; settype($hour,integer); $rel=ereg_replace("h","$hour",$stri);
$min=$tota % 3600 / 60; settype($min,integer); if ($min<10) $min="0$min"; $rel=ereg_replace("m","$min",$rel);
$sec=$tota % 3600 % 60; settype($sec,integer); if ($sec<10) $sec="0$sec"; $rel=ereg_replace("s","$sec",$rel);
return($rel);
}//sectime
$result = mysql_query ("select account_id,
User_Name,
Acct_Input_Octets,
Acct_Output_Octets,
NAS_Id,
NAS_Port,
(CONCAT_WS('.',SUBSTRING_INDEX(INET_NTOA(Framed_IP_Address&0xFFFFFFFF),'.',-1),
SUBSTRING_INDEX(SUBSTRING_INDEX(INET_NTOA(Framed_IP_Address&0xFFFFFFFF),'.',-2),'.',1),
SUBSTRING_INDEX(SUBSTRING_INDEX(INET_NTOA(Framed_IP_Address&0xFFFFFFFF),'.',2),'.',-1),
SUBSTRING_INDEX(INET_NTOA(Framed_IP_Address&0xFFFFFFFF),'.',1))) as fr_ip,
Acct_Session_Time,
Calling_Station_Id,
recv_date from dhs_sessions_log
where Acct_Status_Type=1 or Acct_Status_Type=3")or die("online_list.php -> err1 ".mysql_error($LINK)); //desc
$count=mysql_num_rows ($result);
?>
<TABLE align=center BORDER=0 CELLSPACING=1 CELLPADDING=4 BGCOLOR=black>
<TR BGCOLOR="#dddd99" ALIGN=center><TD COLSPAN="11"><b>Online: <?echo $count;?></b></TD></TR>
<TR BGCOLOR="#000000" ALIGN=center>
<TH><FONT color=#dddd99>N</TH>
<TH><FONT color=#dddd99>Пользователь</TH>
<TH><FONT color=#dddd99>IP</TH>
<TH><FONT color=#dddd99>Call from</TH>
<TH><FONT color=#dddd99>NAS</TH>
</TR>
<?
for ($i = 0; $i < mysql_num_rows ($result); $i++) {
$row = mysql_fetch_object ($result);
echo" <TR BGCOLOR=#dddd99>\n";
printf (" <TD ALIGN=center>%s</TD>\n", $i+1);
printf (" <TD ALIGN=center><B>%s</A></B></TD>\n", $row->User_Name);
printf (" <TD ALIGN=left>%s</TD>\n", ($row->fr_ip));
printf (" <TD ALIGN=CENTER>%s</TD>\n", $row->Calling_Station_Id);
#printf (" <TD ALIGN=CENTER>%s:%s</TD>\n", $row->NAS_Id, $row->NAS_Port);
printf (" <TD ALIGN=CENTER>%s:%s</TD>\n", $row->NAS_Id,$row->NAS_Port);
echo ("<TD ALIGN=center></a>
</TD>\n");
echo " </TR>\n";
}
mysql_free_result ($result);
?>
</TABLE>
Да, у меня действительно нет ВПН сессий.
За код спасибо. Думаю он пригодится если не мне, так кому то еще на форуме.
Сделал у себя следующим образом:
снял количество MAC из таблиц коммутатора ядра с помощью snmp
засунул эти данные в rrd и им же отрисовал графики.
Понятно, что это данные так себе, поскольку компы могут светится в этих таблицах и при условии что инет выключен, но общая динамика просматривается. Рисует красивые синусоиды да и по значениям активных пользователей базы с определенной погрешностью совпадает
.
Вообщем snmp + rrd рулит.
За код спасибо. Думаю он пригодится если не мне, так кому то еще на форуме.
Сделал у себя следующим образом:
снял количество MAC из таблиц коммутатора ядра с помощью snmp
засунул эти данные в rrd и им же отрисовал графики.
Понятно, что это данные так себе, поскольку компы могут светится в этих таблицах и при условии что инет выключен, но общая динамика просматривается. Рисует красивые синусоиды да и по значениям активных пользователей базы с определенной погрешностью совпадает

Вообщем snmp + rrd рулит.