
Техническое задание
на создание средства анализа log-файлов программы iptraf v.
2.7
Аннотация
Техническое задание (далее ТЗ) составлено с
целью описания требований к созданию средства анализа log-файлов программы iptraf версии 2.7 на предмет подсчета
исходящего/входящего траффика в анализируемом (заданном) периоде. Далее средство
условно именуется как "ipta". При присвоении окончательного наименования учесть,
что в названии не должно быть более 4 символов.
1 Что есть
1.1 iptraf
Программа iptraf есть программное обеспечение сетевого online
мониторинга и ведения статистики работы сетевых интерфейсов. Кроме того, она
поддерживает фильтры на уровне сетевых протоколов.
В целях настоящего ТЗ
iptraf
рассматривается как средство накопления статистики о работе сетевых
интрфейсов локальной сети с акцентом на сбор статистики относительно входящего
(исходящего) траффика в операционной системе Red Hat Linux 7.3 Сама программа
iptraf была
полученна с сайта разработчика в виде исходных текстов (тарболл) и собрана на
машине пользователя.
1.2 iptraf - текущая конфигурация
пользователя* Перодичность записи в лог - 1 минута.
* Отслеживаемые
сетевые интрфейсы - eth0.
* Фильтры - отслеживаются и принимаются к учету пакеты любого
сетевого протокола, а TCP&UDP: входящие - "откуда угодно, с любого порта на
мой IP и мой любой порт"; исходящие "куда угодно, на любой порт с моего
IP-адреса и любого моего порта". Таким образом например броадкаст-пакеты,
генерируемые прочими станциями в сети к учету не принимаются.
* Детальная статистика интрефейса: запись в отдедьный
лог-файл суммарного объема входящего и исходящего траффика в разрезе сетевых
протоколов на указанном сетевом интерфейсе по всем портам - детальная статистика
сетевого интерфейса (в теминологии разработчика iptraf). При запуске программы по
команде: $ /usr/local/bin/iptraf -d eth0 -L
/var/log/iptraf/iface_stats_detailed-eth0.log -B
iptraf ведет детальную статистику
сетевого интерфейса eth0 (опция "-d eth0") и записывает ее в указанный
пользователем файл /var/log/iptraf/iface_stats_detailed-eth0.log (опция "-L "имя
лог-файла""). Кроме того, указав опцию "-B" iptraf переходит в фоновый режим
работы и уже не требует вмешательства пользователя.
Вышеприведенная команда выполняется при каждой
загрузке системы путем включения ее в файл /etc/rc.d/rc.local или создания
отдельного файла в /etc/init.d, непосредственно после поднятия соответствующего
сетевого интерефейса и до загрузки программ генерирующих
траффик.
Пример генерируемого лог-файла:
Sat Jan 18 15:13:24 2003;
******** Detailed interface statistics started ********
** Detailed statistics for interface eth0,
generated Sat Jan 18 15:14:24 2003 Total: 45
packets, 5981 bytes (incoming: 0 packets, 0 bytes; outgoing: 45
packets, 5981 bytes) IP: 45 packets, 5351 bytes (incoming: 0
packets, 0 bytes; outgoing: 45 packets, 5351 bytes) TCP: 0
packets, 0 bytes (incoming: 0 packets, 0 bytes; outgoing: 0
packets, 0 bytes) UDP: 37 packets, 4679 bytes (incoming: 0
packets, 0 bytes; outgoing: 37 packets, 4679 bytes) ICMP: 8
packets, 672 bytes (incoming: 0 packets, 0 bytes; outgoing: 8
packets, 672 bytes) Other IP: 0 packets, 0 bytes (incoming: 0
packets, 0 bytes; outgoing: 0 packets, 0 bytes) Non-IP: 0
packets, 0 bytes (incoming: 0 packets, 0 bytes; outgoing: 0
packets, 0 bytes) Broadcast: 0 packets, 0 bytes
Average rates: 0.08
kbytes/s, 0.75 packets/s Incoming: 0.00 kbytes/s, 0.00 packets/s Outgoing:
0.08 kbytes/s, 0.75 packets/s Peak total activity: 0.37 kbytes/s, 3.20
packets/s Peak incoming rate: 0.00 kbytes/s, 0.00
packets/s Peak outgoing rate: 0.37 kbytes/s, 3.20
packets/s
IP checksum
errors: 0
Running
time: 60 seconds
*** Detailed
statistics for interface eth0, generated Sat Jan 18 15:15:24 2003
Total: 45 packets, 5981 bytes (incoming: 0
packets, 0 bytes; outgoing: 45 packets, 5981 bytes) .....
и так далее каждые 60 секунд.
* При
каждом запуске (при загрузке системы) в лог-файле формируется новая строка типа
"Sat Jan 18 15:13:24 2003; ** Detailed interface statistics started **"
*
В том случае, если логирование производилось в то время, когда работает
интерактивный монитор программы iptraf, то при завершении работы iptraf в логе
формируется строка вида "Sat Jan 18 16:17:25 2003; ** Detailed interface
statistics stoped**"
* При логировании информации в обычном фоновом
режиме (опция "-В") при остановке работы программы (например перегрузка,
выключение системы, killall iptraf, и т.п) никаких дополнительных строк не
формируется и последней непустой строкой в лог-файле до нового запуска программы
будет строка вида "Running time: 720 seconds"
* В том случае, если
логирование было завершенно до истечения 60 секунд от его начала, последней
строкой в лог-файле будет строка вида "Sat Jan 18 15:13:24 2003; ** Detailed
interface statistics started **", а после возобновления - аналогичная
строка.
* Мне неизвестны случаи неполного вывода в файл блока информации
о логировании последнего минутного интервала. Образец оригинального лог-файла
прилагается.
* Ротация лог-файлов - осуществляется
средствами logrotate (версия 3.6.4). Ежедневно оценивается размер файла и если
его размер достигает 5000 kb, он переименовывается, сжимается, а в распоряжение
iptraf, после
его перезапуска, предоставляется новый пустой файл. Настройки процесса ротации
для этих файлов в /etc/logrotate.conf выглядят так:
/var/log/iptraf/iface_stats_detailed-eth0.log
{ daily compress create rotate
70 missingok size=5000k }
Таким образом,
большая часть лог-файлов будет находится в заархивированном средствами gzip
виде. Следует это учесть.
2 Что надо
Программу (или скрипт) написать,
которая позволяет выводить в файл или стандартный вывод отчеты на основании
анализа информации из вышеприведенных файлов.
2.1 ТТП команды
Программа должна:
1. Запускаться в командной строке путем
непосредственного вызова, т.е. без добавления указаний относительно
интерпретатора (perl, phyton & etc). Исполняемый файл (или ссылка) по
умолчанию должен находится в директории /usr/local/bin/.
2. Воспринимать параметры из командной строки и частично
файла конфигруации iptarc (стандартное расположение - /usr/local/etc/). При
наличии противоречий между параметрами командной строки и конфиг-файла,
параметры конфиг-файла игнорировать. Порядок набора параметров командной строки
- произвольный.
3. Команда: ipta
4. Опции (ключи) команды и их дизайн:
* -o file - выводить информацию в
file. При невозможности создания файла вывести соответствующее сообщение об
ошибке, анализ и формирование отчета не производить. При отсутствии такого ключа
- отчет выводить на стандартный вывод;
* -fYYMMDDhhmm - выбрать накопленную в
логах информацию начиная с момента времени YYMMDDhhmm (timestamp) включительно.
В случае отсутствия такого timestamp выбрать информацию начиная с первого более
позднего timestamp включительно. Допускается сокращенное указание timestamp вида
YYMMDDhh, YYMMDD, YYMM, YY. В этом случае принимать информацию начиная от
наиболее раннего timestamp, имеющего в своем составе указанное. Значение по
умолчанию - первое значение текущих суток;
* -lYYMMDDhhmm - выбрать накопленную в
логах информацию заканчивая моментом времени YYMMDDhhmm включительно. В случае отсутствия
такого timestamp выбрать информацию начиная с первого более раннего timestamp
включительно. Допускается сокращенное указание timestamp вида YYMMDDhh, YYMMDD,
YYMM, YY. В этом случае принимать информацию заканчивая наиболее поздним
значением timestamp, имеющего в своем составе указанное. Значение по умолчанию -
момент ввода команды;
* в случае ввода нелогичных периодов (задом наперед, часы в
25-тиричном счислении, рання дата находится в будущем относительно текущего
системного времени и т.п.) - выдать соотвествующе сообщение об
ошибке;
* --year YY - выбрать накопленную в
логах информацию за календарный год YY текущего столетия. Значения YY цифровые
без ведущего нуля. Без указания значения YY - выбирается информация с начала
текущего года по момент запуска команды. При указании опций -t и (или) -l -
опция --year игнорируется. В случае полного отсутствия данных удовлетворяющих
критерию - вывести отчет вида "In the required period YYYY the data are absent".
При указании года из будущего выдать соответствующее сообщение об
ошибке;
* --month MM - выбрать накопленную в
логах информацию за календарный месяц MM текущего года. Значения ММ цифровые без
ведущего нуля. Без указания значения ММ - выбирается информация с начала
текущего месяца по момент запуска команды. При указании опций -t и (или) -l -
опция --month игнорируется. В случае полного отсутствия данных удовлетворяющих
критерию - вывести отчет вида "In the required period YYMM the data are absent"
При указании месяца из будущего выдать соответствующее сообщение об
ошибке;
* -d dir1
dir2 ... - указать месторасположние лог-файлов iptraf в
системе. По умолчанию применяется директорий /var/log/iptraf/ или значение из
конфигруционного файла. В конфиг-файле значение может быть задано
как;
--- # To make search of files in a directory dir dir /var/log/iptraf /var/log/ipta
/var/log/anywhere
---
* -m
mask1 mask2 ... - производить анализ файлов из директория dir
по маске mask. В нашем случае mask будет выглядеть как
iface_stats_detailed-eth0* В случае отсутствия файлов, удовлетворяющих маске,
вывести сообщение об ошибке. По умолчанию применяется маска из конфигурационного
файла, а при его отсуствии программа выводит соответствущее сообщение об ошибке.
В конфиг-файле маска может быть задана как:
--- # Mask for analyzed files from a directory dir mask
iface_stats_detailed-eth0* Everythi??
---
* -с - указать конфигурационный файл
иной нежели по умолчанию.
5. Учесть, что команда будет исполнятся
исключительно от имени супер-пользователя или посредством утилиты sudo.
6. Команда будет исполнятся, как правило, с помощью cron.
Т.е. необходимо предусмотреть выдачу стандартных кодов завершения, позволяющих
cron оценивать результаты выполнения и, в случае ошибок, наравлять
соотвествующее уведомление администратору (и исполнять соотвествующую запись в
своем лог-файле).
7. Возможно изменение дизайна конфиг-файла и (или)
опций комндной строки на усмотрение разработчика, но по согласованию с
клиентом.
2.2 Форма отчета
1. Форма отчета по результам
анализа лог-файлов аналогична форме, в которой ведется сам лог-файл. Формат
данных - plain text. Отличия в шапке отчета. Пример вывода в файл ~/rep0212.txt
при нормальном завершении команды запущенной со следующими
параметрами:
$ ipta -l0212312400 -o ~/rep0212.txt
-f0212010000 -d /var/log/iptraflogfiles -m
if_st_det*
--- ________________________________________________________ Statistics
about generated incoming and outgoing traffic Station - yan3.mg.net.ua Period from 00h 00min Dec01, 2002 for 24h
00min Dec31, 2002 ________________________________________________________
Total:45 packets, 5981
bytes (incoming: 0 packets, 0 bytes; outgoing: 45
packets, 5981 bytes) IP: 45 packets,
5351 bytes (incoming: 0 packets, 0 bytes; outgoing: 45
packets, 5351 bytes) TCP: 0 packets,
0 bytes (incoming: 0 packets, 0 bytes; outgoing: 0
packets, 0 bytes) UDP: 37
packets, 4679 bytes (incoming: 0 packets, 0 bytes; outgoing: 37
packets, 4679 bytes) ICMP: 8
packets, 672 bytes (incoming: 0 packets, 0 bytes; outgoing: 8
packets, 672 bytes) Other IP: 0
packets, 0 bytes (incoming: 0 packets, 0 bytes; outgoing: 0
packets, 0 bytes) Non-IP: 0
packets, 0 bytes (incoming: 0 packets, 0 bytes; outgoing: 0
packets, 0 bytes) Broadcast: 0 packets, 0 bytes
IP checksum errors: 0
The
first
timestamp in iptraf logfiles of the period - 08h 37min Dec01,
2002 Last timestamp in iptraf logfiles of
the period - 23 h 12 min Dec31, 2002 TOT of the iptraf in the given
period - 412h 35min 12sec
__________________________________________________________________ This report
is created by the ipta (tool for analysis logfiles of the iptarf)
at 17h 18min
of Dec18, 2003 Copyright **** The license **** BlaBlaBla about
money&women, но не более 2-х строк pls __________________________________________________________________
2. В вышеприведенном отчете:
* все выделения bold font мои
и только для пояснений здесь. В реальном отчете - никаких признаков
форматирования;
* значение "yan3.mg.net.ua" есть вывод команды host
-f;
* значение "Period" есть переформатированное
представление периода, заданного в командной строке;
* Для рассмотрения
остальных значений введем понятия "блок". Под блоком будем понимать часть
лог-файла, содержащего статистику за период равный установленному для сброса
информации в лог-файл. iptraf позволяет
устанавливать минимальный период времени для сброса информации в лог-файл равный
1 минуте. Я применяю именно такую периодичность, т.е. лог-файл обнавляется
ежеминутно. Таким образом лог-файл представляет из себя последовательность
блоков статистики, где каждый последующий блок есть сумма соответствующих
значений блока предыдущего и вновь созданного. Такое "накопление результата"
проводится до тех пор пока не завершится сеанс работы iptraf. С началом нового
сеанса "накопление результата" начинается по новой, т.е. с ноля. В этом случае
итоговым блоком сеанса будет тот блок, после формирования которого сеанс работы
iptraf завершен. Итоговым блоком заданного периода будет тот блок, в котором
дата в строке вида "** Detailed statistics for interface eth0, generated Sat Jan
18 15:14:24 2003" представляет последнюю более раннюю или равную дате из
параметра -l, или последнюю более раннюю или равную дате на момент ввода
команды. Соответственно начальным блоком заданного периода будет тот блок, в
котором дата в строке вида "** Detailed statistics for interface eth0, generated
Sat Jan 18 15:14:24 2003" представляет наиболее раннюю или равную дате из
параметра -f. Надеюсь, все понятно :)
* значение "first
timestamp" есть переформатированное представление даты из
строки вида "** Detailed statistics for interface eth0, generated Sat Jan 18
15:14:24 2003" начального блока заданного периода;
* значение "Last timestamp"
есть переформатированное представление даты из строки вида "** Detailed
statistics for interface eth0, generated Sat Jan 18 15:14:24 2003" итогового
блока заданного периода;
* значение TOT
(total opereting time) есть сумма значений поля "Running time" итоговых блоков сеансов в
течение заданного периода за вычетом соотвествущего значения итогового блока
периода предыдущего заданному и увеличенная на значение итогового блока
заданного периода;
* значения полей IP, TCP, UDP,
ICMP, Other IP, Non-IP, Broadcast есть сумма значений соответствующих
полей итоговых блоков сеансов в течение заданного периода за вычетом значений
соотвествующих полей итогового блока периода предыдущего заданному и увеличенные
на значения соответствующих полей итогового блока заданного
периода;
* значение поля Total
есть сумма соответствующих значений полей IP, TCP, UDP,
ICMP, Other IP, Non-IP, Broadcast настоящего отчета.
* значение поля IP checksum
errors есть сумма значений соответствующего поля итоговых блоков сеансов в течение
заданного периода за вычетом соотвествущего значения итогового блока периода
предыдущего заданному и увеличенная на значение итогового блока заданного
периода;
* значение поля at есть дата завершения
анализа лог-файлов программы iptraf.
2.3 Заключение1. При розработке программы (скрипта) не предъявляется
каких-либо требований к языку программирования.
2. Следует учесть, что
ввиду того, что iptraf ведет логирование
использования траффика и в других вариантах представления, со строны клиента
впоследствии возможны дополнительные обращения за расширением функциональности
программы (по отдельному соглашению).
|