LINUX.ORG.RU
ФорумAdmin

Детальный анализ логов ftp сервера


0

0

Есть proftpd сервер, который ведет логи в формате стандарта xferlog, который содержит сведения о направлении передачи данных, т.е о данных скаченных с сервера и закаченных на сервер.

Есть задача эти логи анализировать. Анализаторов куча, я посмотрел на webalizer, awstat, FTPWebLog, FTP Logger 1.5. Но есть одно НО - все эти проги (поправьте меня, если я ошибаюсь) выдают очень общую статистику. Мне же нужна такая простая вещь - как объем скаченного и объем закаченного на фтп сервер траффика. Все рассмотренные проги выдавали только общий объем данных. Я подозреваю, что найти такую программу-анализатор довольно трудно. Но так как, я уверен, что поставленная задача возникла не у меня первого, существуют какие-то наработки по решению данного вопроса. Какие нибудь самописные скрипты и т.д.. Так вот, я не силен в скриптописании и прошу добрых людей поделиться подобной вещью или хотя бы посоветовать какую-нибудь программу-анализатор, которая справлялась бы с поставленной задачей.

Заранее спасибо.

anonymous

Можно подробнее? На сервере установлен только FTP или есть еще какие-нить службы типа http, mail, ... Если только он один, то тогда можно считать весь трафик с машины. Если нет - тогда немного сложнее, но есть выход.

nevsky
()

Ну можешь выложить здесь (preformated text) пару-тройку строк лога, я тебе на awk скрипт напишу.

sdio ★★★★★
()
Ответ на: комментарий от anonymous

Sat Jan 3 14:02:25 2004 0 10.10.4.34 776 /home/ftp/ReadMe.txt b _ o a ftp 0 * c Sat Jan 3 14:02:52 2004 0 10.10.4.34 882 /home/ftp/raspisanie.txt b _ o a ftp 0 * c

вот и описание:

Формат журнала xferlog:

1. сокращенное английское название дня недели (Sat) 2. сокращенное английское название месяца (Dec) 3. день месяца 4. часы:минуты:секунды (время местное) 5. год (4 цифры) 6. продолжительность передачи в секундах 7. имя или адрес удаленного хоста 8. размер файла в байтах 9. полное имя файла (безотносительно chroot) 10. тип передачи * a - ascii * b - binary 11. действие над файлом в процессе передачи (для ProFTPD всегда отсутствует) * C - сжат * U - разжат * T - tar-ед * _- не было произведено никаких действий 12. направление передачи * o - с сервера * i - на сервер * d - удаление 13. тип пользователя * a - анонимный * g - guest * r - real (из /etc/passwd) 14. имя реального пользователя или идентификационная строка (вводимая вместо пароля) для анонимного или гостя (м.б. пробел) 15. имя сервиса (ftp) 16. способ аутентификации * 0 - никакой * 1 - ident (rfc931) 17. аутентифицированный идентификатор пользователя. Если аутентификация не использовалась, то звездочка 18. завершенность передачи * c - передача была закончена * i - не закончена

желательно, что скрипт подсчитывал суммарный траффик In и Out по дням/месяцам

anonymous
()
Ответ на: комментарий от anonymous

Sat Jan 3 14:02:25 2004 0 10.10.4.34 776 /home/ftp/ReadMe.txt b _ o a ftp 0 * c
Sat Jan 3 14:02:52 2004 0 10.10.4.34 882 /home/ftp/raspisanie.txt b _ o a ftp 0 * c

вот и описание:

Формат журнала xferlog:

1. сокращенное английское название дня недели (Sat)
2. сокращенное английское название месяца (Dec)
3. день месяца
4. часы:минуты:секунды (время местное)
5. год (4 цифры)
6. продолжительность передачи в секундах
7. имя или адрес удаленного хоста
8. размер файла в байтах
9. полное имя файла (безотносительно chroot)
10. тип передачи
* a - ascii
* b - binary
11. действие над файлом в процессе передачи (для ProFTPD всегда отсутствует)
* C - сжат
* U - разжат
* T - tar-ед
* _- не было произведено никаких действий
12. направление передачи
* o - с сервера
* i - на сервер
* d - удаление
13. тип пользователя
* a - анонимный
* g - guest
* r - real (из /etc/passwd)
14. имя реального пользователя или идентификационная строка (вводимая вместо пароля) для анонимного или гостя (м.б. пробел)
15. имя сервиса (ftp)
16. способ аутентификации
* 0 - никакой
* 1 - ident (rfc931)
17. аутентифицированный идентификатор пользователя. Если аутентификация не использовалась, то звездочка
18. завершенность передачи
* c - передача была закончена
* i - не закончена


желательно, что скрипт подсчитывал суммарный траффик In и Out по дням/месяцам

anonymous
()
Ответ на: комментарий от anonymous

#!/bin/bash

USAGE=' Usage:\n\n ./<progname> -m <month> [-d <date>] -t [i|o] -f <log file>\n\n'
Day=0

while getopts "m:d:t:f:h" Option
 do
  case $Option in
    m)   Month=$OPTARG
    ;;
    d)   Day=$OPTARG
    ;;
    t)   Type=$OPTARG
    ;;
    f)   File=$OPTARG
    ;;
    h)   echo -e $USAGE;exit 1
    ;;
    *)   echo -e $USAGE;exit 1
    ;;
  esac
 done
cat $File |awk -v Month=$Month -v Day=$Day -v Type=$Type \
'BEGIN{sum=0}\
{if (($12 == Type && $2 == Month) && ($3 == Day || Day == 0)) \
{sum+=$8}}\
END{print sum,"bytes"}'

Вот нечто подобное можно использовать. Как обязательные параметры скрипту задаешь месяц, 
тип передачи данных (i или o) ну и соответственно сам лог файл. Если передать число,
посчитается за конкретный день, если не передавать - за месяц.

Пример:

./scriptname.sh -d 1 -m Jan -t i -f /var/log/proftpd.log

посчитает входящий трафик за первое января. Выкинешь '-d 1' -- посчитает за месяц.

Особо не тестил, но должно работать нормально.

kvit
()
Ответ на: комментарий от anonymous

./xferlog.awk -v Month=Jan xferlog.log


#! /usr/bin/awk -f

$2 == Month { if ($12 == "o") {
                o[$3]+=$8
                to+=$8
              }
              if ($12 == "i") {
                i[$3]+=$8
                ti+=$8
              }
            }

END         {
              print "Month is: "Month"\n"
              for (day in o) {
                print "Output for day "day" = "o[day]
              }
              print "\nTotal OUTPUT = "to"\n"
              for (day in i) {
                print "Input for day "day" = "i[day]
              }
              print "\nTotal INPUT = "ti
            }


Недостаток: Вывод дней не упорядочен (хэш).

sdio ★★★★★
()
Ответ на: комментарий от sdio

Все на этом остановимся :-)

#! /usr/xpg4/bin/awk -f

BEGIN       {for (d=1; d<=31; d++) {o[d]=0; i[d]=0}
}

$2 == Month {
              if ($12 == "o") {
                o[$3]+=$8
                to+=$8
              }
              if ($12 == "i") {
                i[$3]+=$8
                ti+=$8
              }
}

END         {
              print "Month is: "Month"\n"
              print "Day\t:\tOut\t:\tInput:"
              for (d=1; d<=31; d++) {
                print d"\t:\t"o[d]"\t:\t"i[d]
              }
              print "\nTotal\t:\t"to"\t:\t"ti
}

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.