Техническое задание
на создание средства анализа 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 ведет логирование использования траффика и в других вариантах представления, со строны клиента впоследствии возможны дополнительные обращения за расширением функциональности программы (по отдельному соглашению).
|