2013-03-24 traffic analysis tool

by Vasil Kolev

(докъде стигнах, да качвам код в github)

https://github.com/krokodilerian/trafstat.git

Система за събиране и анализ на трафик, базирано на tcp retransmit-и и bgp routing таблици.

Аз я използвам на няколко места да си анализирам трафика и да го балансирам откъде да минава. Имаме пусната една версия на ts.hahpss.com, на която може да гледате от един български сайт как изглежда трафика към вас.

Системата за мен е много по-хубава от различните варианти с ping от време на време (smokeping, mtr и т.н.), понеже е върху целия трафик на web сървъра, който реално потребителите виждат, а не нещо, което може да има различно поведение и различни shaper-и.

Кодът е леко допипнат, за да става за публична употреба, но има още доста да се желае (например трябва да сложа един __packed__ атрибут на една структура, дето пращам по мрежата). В момента може да се каже, че е в works-for-me версия, но мисля, че повечето админи биха се справили да го подкарат при себе си. Изисква да може да си пипнете web сървъра и да може да вземете отнякъде read-only BGP feed.

Състои се от няколко компонента:

– модул за nginx, който за всеки request взима колко трафик е направен, колко е било mss-то на връзката (за да може да се изчисли броя сегменти) и броя tcp retransmit-и, и го праща до един централен сървър по UDP. Мариян е навит да напише същия модул за apache.

– сървър, който получава udp пакетите и ги пише във файл (реално може да прави директно заявки в базата и може да го оправя в бъдеще).

– cron script, който попълва в базата данни за всички router-и, за които знае системата routing таблиците им (prefix-и и aspath-ове).

– друг cron script, който на колкото-време-му-кажете хваща лога на демона, сдъвква го и вади заявки, с които да запише трафика по префикси и типове.

– още един скрипт, който веднъж на час почиства нулевите редове и архивира данните в една таблица, за да може да се анализират (т.е. дава ви почасови данни).

Има и някакви визуализиращи неща, които ще се появят по-късно.

Не съм решил какъв да е лиценза, защото и вътре има няколко неща, които не са мои (bgpdump от ripe), приемам идеи.

Tags: ,

15 Responses to “2013-03-24 traffic analysis tool”

  1. Георги Иванов Says:

    Демона е сила хахахаха , тва с ротирането на лога и сигнала e мазно :D . Гледам и неква идея и имало за тредове ама не са видели бел свят. Кода не е само works for me ами е и за govnokod.ru . Без лоши чувства ;)

  2. Vasil Kolev Says:

    @Георги, реално кодът вършеше много други неща и писането на лога му беше странична дейност. Има още неща за почистване, но няма особена нужда.
    Иначе, submit-ни го, ще ми е интересно ако го приемат какъв толкова проблем ще видят в него :)

  3. Георги Иванов Says:

    Къв ли ?
    Я си виж main-а fopen-a и след тва setlinebuf :)

  4. Vasil Kolev Says:

    Не виждам особен проблем. Мога да напиша един check някъде там какво ми е върнало, но как точно ще изгърми (щото ако не може да напише лога, няма смисъл да прави квото и да е) няма значение.

  5. Георги Иванов Says:

    Понеже оставам без думи от аргумента ти – http://img.over-blog.com/600×523/2/87/79/27/bibi-over-here-fdp/facefloor.jpg

  6. бацето Says:

    @Георги Иванов ти усещаш ли се, че не допринасяш с нищо като се надуваш с неаргументирани коментари. До тук коментарите ти мога да ги категоризирам като *тролене*. Много са ми антипатични такива надувки, дето много говорят, мислят се за изключителни, а всъщност нищо съществено не казват/немогат.

  7. Георги Иванов Says:

    Много си ми незначителен за да ти отговарям.

  8. Vasil Kolev Says:

    @Георги, има тривиален начин да има смисъл от коментарите ти, пусни един patch, github дава лесен начин. Core or shut up :)

  9. Георги Иванов Says:

    Маниаксе целях друго като коментирах ама аре като се видим на кафе ше ти обесня :)

  10. Vasil Kolev Says:

    Виждам аз, че целиш да се лигавиш :)

  11. Иво Вачков Says:

    Следвайки препоръката от постът по-нагоре:

    http://govnokod.ru/12826

    @бацето, разглеждайки кода в github:
    1) Според посочения Makefile всичко се компилира с debug символи
    2) Използват се много hardcoded стойности, които спокойно могат да са параметри
    3) Използват се глобални променливи
    4) На едни места char ip[16], на други char ip[256]
    5) Съществува функция daemon(), която може да замени void daemonize()
    6) На всякъде се презюмира, че open()/fopen() връща успешно файлов дескриптор, не се проверява за грешки
    7) Смесват се threads и signals по странен начин
    8) Не се проверява резултата от malloc()
    9) На едни места memcpy(), на други strcpy()
    10) Грам коментар няма да обясни магически конструкции от рода: time(&tm); if (pmsg->msg.tm+20msg.tm-20>tm){

    И даже не съм гледал съдържанието на cron директорията и .sh/.php писанията там :)

    Но, за да завършим по-весело … прочетете коментара в govnokod.ru :D

  12. Vasil Kolev Says:

    1) да, това за текущия стадий е нормално
    2) да, щото идва от такова място. Ще проима config файл някой ден
    3) и?
    4) това е в списъка за оправяне
    5) може
    6) това може да го оправя един хубав ден
    7) всъщност thread-ове няма, точно в тоя код, иначе – няма проблем със сигнала, това много съм го ровил
    8) да, вероятно ще сложа един wrapper с умиране
    9) на различни места има нужда от различни неща
    10) нищо магическо няма в тоя код :) ако е по-старо съобщението с 20 секунди, се реже

    Иначе, благодаря, тва е по-смислен коментар, нищо, че идва от изпаднал трол:)

  13. бацето Says:

    За това говорим – конструктивен диалог/разговор, който се вижда от последните два коментара, това кефи, а не празните приказки.

  14. бацето Says:

    Пък дори и само две точки от всички точки на @Иво Вачков да бяха споменати, u c?

  15. бацето Says:

    Хм като гледам вече мина известно време има 11 коментара под кода ти, оценката му е 0 за сега – http://govnokod.ru/12826, тоест струва ми се, че хората там не го намират за лош код.
    @Vasil поглеждал ли си там и какво мислиш?

Leave a Reply