Witam.
W dużym skrócie: przygotowałem moduł uaktualniający statystyki ruchu LMS, na podstawie danych NetFlow.
A teraz rozwinięcie dla osób zainteresowanych tematem. Swego czasu gdy routingiem zajmował się PC z linuxem na pokładzie używałem sktyprów liczących transfer na podstawie wpisów w iptables. Od czasu gdy zmieniliśmy router na mikrotika kombinowałem na kilka sposobów jak uzyskac statystyki, ale nie udawało mi się żadnego szybkiego i logicznego rozwiązania uzyskać. W zeszłym tygodniu na MUM-ie był prowadzony wykład o NetFlow. W dużym uproszczeniu jest to protokół zajmójący się przesyłaniem informacji o ruchu pomiędzy urządzeniami. Stosuje się go między innymi w urządzeniach Cisco i własnie Mikrotikach. Skonfigurowałem na mikrotiku generowanie danych, i na PC demona (flow-capture) odbierającego te dane i zapisującego do plików. W załączniku przerobiony skrypt lms-traffic-logiptables. Popełniłem go kilka godzin temu i jak na razie ładnie działa. Nie zmieniłem domyślnych nazw sekcji konfiguracji - "traffic-logiptables" - jeżeli miał ktoś kiedyś już skonfigurowane, może tego nadal używać. Najważniejsze parametry do ustawienia to : "netflow_stat_binary" i "netflow_cat_binary". Skrypt do poprawnej pracy wymaga parametru z nazwą pliku zawierającego pobrane z urządzenia dane. Nazwa tego pliku sie zmienia, więc nie można użyć ustawień konfiguracji.
flow-capture można skonfigurować (opcje -n i -R ) aby co zadany czas zmieniał plik i ewentualnie uruchamiał dowolny program, przekazując mu jako pierwszy argument nazwę ukończonego pliku z danymi. Nazwa pliku jest podawana bez ścieżki dostępu.
Przykład: Uruchomienie : "/usr/sbin/flow-capture 0/0/1234 -w /var/lib/netflow -N0 -S1 -n 288 -R /lms/lms-stats.sh" - (nasłuchuje na porcie 1234, zapisuje dane do katalogu /var/lib/netflow, nie tworzy podkatalogów, zapisuje bufor co minute, zmienia plik 288 razy na dobe (co 5 min), przy każdej rotacji pliku z logiem uruchamia skrypt /lms/lms-stats.sh)
Plik /lms/lms-stats.sh: #!/bin/bash /lms/lms-netflow-stats --flow-file="/var/lib/netflow/$1" rm -f "/var/lib/netflow/$1"
P.S. Mogą pojawiać się opóźnienia w naliczaniu transferu. Netflow (przynajmniej na mikrotiku) podaje dane o ruchu który się zakończył, czyli transfery które trwały w czasie naliczania ruchu pojawią się dopiero po ich zakończeniu. Byc może daje sie to regulować parametrami "timeout" w mikrotiku, ale nie sprawdzałem jeszcze.
P.S.2. Wydaje mi sie że nieprawidłowo wypełniłem informacje o wersji w źródłach. Proszę - nie bijcie tylko naprostujcie.