Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
22:04, 07 февраля 2010

Cacti для мониторинга ProFTPd сервера -простой график

Установил сервер FTP, все достаточно стандартно. Но вот захотелось смотреть статистику - детальную и общую. С детальной проблем не возникло - awstats мой выбор ) А вот с простым графиком - пользователи в онлайн в разерезе "авторизованные - анонимные" поначалу поставил в тупик, но все решилось за один вечер.

 

Для всего этого будем использовать cacti и туда же вставим ссылку на awstats чтобы все было в одном месте.

 

 

Установку Cacti не рассматриваю. Идем на cacti.net и на форуме качаем скрипт для определения пользователей online. После этого создаем

  1. Data input
  2. Data template
  3. Graph template

Data input - то как получаем данные для графика

В данном случае мы используем скрипт - unix_proftpd_who.pl  вот он

#!/usr/bin/perl
#===============================================================================
#
#         FILE:  unix_proftpd_who.pl
#
#        USAGE:  ./unix_proftpd_who.pl [--user|--host|--server] parameter
#
#  DESCRIPTION: Print out user|client|server count and total users count for cacti use
#
#      OPTIONS:  ---
# REQUIREMENTS:  Installed and configured ProFTPD
#         BUGS:  ---
#        NOTES:  ---
#       AUTHOR:  Dennis Yusupoff (dyr), denissia@mail.ru
#      COMPANY:  Smart-Telecom ISP
#      VERSION:  1.0
#      CREATED:  04.06.2009 18:46:55
#     REVISION:  ---
#===============================================================================

use strict;
use warnings;
use Getopt::Long;

my $cmd =  "/usr/local/bin/ftpwho";
my $args = " -v -o oneline";

my (%hash,$user,$client,$server,$help);
my $total = 0;

GetOptions('user=s' => \$user,
'client=s' => \$client,
'server=s' => \$server,
'help|?' => \$help);
&usage if $help;
&usage if ( $user ? ($client || $server) : ($client && $server) );  #Allow only one parameter
open(FH, "$cmd $args |") or die "Cannon execute command: $!\n";
while() {
if ($client) {
if (/client:\s(.+)\s\[(\d+\.\d+\.\d+\.\d+)\]/){
#$1 - client host name (ReverseDns)
#$2 - client host ip
$hash{$1}++;
#Or by ip
$hash{$2}++ unless ($1 eq $2);  #Prevent to duplicate ip if UseReverseDNS is Off in proftpd.conf
$total++;
}
}elsif ($server) {
if (/server:\s(\d+\.\d+\.\d+\.\d+):(\d+)\s\((.+)\)/){
#$1 - server ip
#$2 - server port
#$3 - server name
$hash{$1}++;
$hash{$3}++ unless ($3 eq $1);  #Prevent to duplicate servername if it equal ip
$total++;
}
}else  {
if (/^\s*(\d+)\s(\w+)\s+.+client:\s(.+)\s\[(\d+\.\d+\.\d+\.\d+)\]/){
#$1 - ID
#$2 - username
$hash{$2}++;
$total++;
}
}
}
close(FH);

if ($server) {
print "selected:".($hash{$server} || 0);
}elsif ($client) {
print "selected:".($hash{$client} || 0);
}elsif ($user) {
print "selected:".($hash{$user} || 0);
}else {
print "selected:U";
}

print " total:$total\n";

sub usage {
print "Usage: @_ [--user|--host|--server] parameter\n";
exit 0;
}
в системе должен быть установлен perl

Добавляем этот скрипт в папку установки cacti - обычно /usr/local/share/cacti/scripts/

после этого создаем Data Input Methods

скрипт имеет вводные параматры и выводные данные, поэтому создаем соответсвующие поля

Blog post image

вводные данные - их надо будет определить далее

Blog post image

выводные данные - cacti требует чтобы все выводные данные отделялись знаком ":"

Blog post image

Blog post image

Data template - как мы представляем то, что получаем

создаем новый data template- обращаю внимание на то, что у нас 2 поля вывода

Blog post image

и второе поле

Blog post image

Graph template - как мы показываем то, что представляем. Ну тут уже все просто :)

Blog post image

вверху grath template items - как все будет видется -

Blog post image

На графике я сделал так - total это area (залито все цветом), а anonymous это line1 (линия). Ведь total всегда либо больше, либо равно anonymous %) и получаем в принципе читаемый график.

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Вот примерно такой график. Вообще правильнее назвать его надо - соединения с ftp сервером :)

Blog post image

Ну вот и все...но тут есть один минус - точную статистику вы все равно не получите. Поясню, например я качаю download master с ftp файл - так вот он создает 5 секций и (в каждой! ) идет авторизация и получаем мы 5 анонимных пользователей с одного ip. Парсить же уникальные ip тоже не выход...а если сеть за шлюзом и nat - опять получаем вроде 1 ip но коннектов куча. Как вариант ограничить с одного ip по одному коннекту, но тогда попадают пользователи за nat. В итоге забил на это и оставил как есть, все равно более менее точная статистика есть в awstats, а данный график скорее быстрая пристрелка на нагрузку.

 

0
409
2