Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
ACCOUNT - skrypt obsługi liczników http://forum.freesco.pl/viewtopic.php?f=24&t=11177 |
Strona 1 z 2 |
Autor: | jamp [ czwartek, 9 lutego 2006, 16:00 ] |
Tytuł: | ACCOUNT - skrypt obsługi liczników |
Poniżej wstawiłem kod skryptu obsługi liczników account. UWAGA jest to wersja testowa kernel musi być z zaimplementowaną obsługą liczników account #! /bin/sh # --------------------------------------------------------------------------- # # Skrypt obsługi liczników account # rcaccount Piotr "JamP" Jamrozik <jamp(at)jamp.int.pl> # # !!! UWAGA !!! # wersja testowa 001 # --------------------------------------------------------------------------- # # Skrypt należy umie¶cić w katalogu /etc/rc.d/ i dopisać w sekcji DAEMONS # w pliku /etc/rc.conf bezpo¶rednio po iptables # # W trakcie startu systemu odbudowywany stan istniej±cych w kopii liczników # Podczas zatrzymywania systemu wykonywane jest zapisanie obecnego stanu # liczników do kopii ( st±d niestandardowe użycie opcji stop - nie zatrzymuje # liczenia tylko zapisuje liczniki ) # # Dostępne opcje: # # start - uruchomienie liczników i rozpoczęcie zliczania # stop - zapisanie kopii liczników do pliku # reset - kasowanie liczników i rozpoczęcie zliczania od zera # stat - proste statystyki # # --------------------------------------------------------------------------- # # Użyte zmienne konfiguracyjne: # # SIECLAN # ------- # Do zmiennej SIECLAN wpisz swoj± sieć lokaln± w formacie: "192.168.1.0/24" # !!! UWAGA !!! # maska może mieć mieć tylko jedn± z 3 warto¶ci: 8, 16, 24 lub # można j± pomin±ć zliczaj±c tylko 1 użytkownika wtedy podajemy "192.168.1.2" # --------------------------------------------------------------------------- # # PELNE # ----- # Zmienna PELNE=1 - pełne / PELNE=0 - skrócone (bez rozbicia na na usługi) # # --------------------------------------------------------------------------- # # GDZIE # ----- # Zmienna GDZIE zawiera ¶cieżkę do zapisywania kopii liczników # # --------------------------------------------------------------------------- # # W tej chwili skrypt obsługuje tylko 1 plik liczników # W budowie obsługa limitowania niceshapera na podstawie liczników account # # --------------------------------------------------------------------------- # # Kopię liczników co 1 minutę można uzyskać przez dopisanie w cronie poleceniem # crontab -e # 0-59/1 * * * * /etc/rc.d/rcaccount stop # # --------------------------------------------------------------------------- # # Narazie skrypt nie jest optymalny ani piękny ale chyba działa bez problemów:) # Napisałem go dzi¶ w nocy więc mog± wyst±pić jakie¶ nieprzewidziane trudno¶ci # # Proszę o zgłaszanie uwag i potrzeb co do dalszego sposobu rozwijania skryptu:) # # Miłej zabawy z licznikami account :) # # --------------------------------------------------------------------------- . /etc/rc.conf . /etc/rc.d/functions # --------------------------------------------------------------------------- # Te 3 parametry ustaw sam :) # --------------------------------------------------------------------------- SIECLAN="192.168.1.0/24" PELNE=1 GDZIE="/etc/iptables/account" # --------------------------------------------------------------------------- # Poniżej nie musisz nic zmieniać # --------------------------------------------------------------------------- case "$1" in start) stat_busy "Uruchamianie liczników account" if [ ! -d $GDZIE ]; then mkdir -p $GDZIE; fi if [ ! -e /proc/net/ipt_account/mynetwork ]; then iptables -N statistics if [ "$PELNE" = "1" ]; then iptables -A statistics -m account --aaddr $SIECLAN --aname mynetwork LINIAZERO="bytes_src = 0 0 0 0 0 packets_src = 0 0 0 0 0 bytes_dest = 0 0 0 0 0 packets_dest = 0 0 0 0 0 time = 0" else iptables -A statistics -m account --aaddr $SIECLAN --aname mynetwork --ashort LINIAZERO="bytes_src = 0 packets_src = 0 bytes_dest = 0 packets_dest = 0 time = 0" fi iptables -I FORWARD -j statistics if [ ! -e $GDZIE/.mynetwork.zero ]; then stat_busy "Budowa pliku zerowania accounta" sleep 5 while read line; do echo $line | echo "ip = `cut -f 3 -d ' '` $LINIAZERO" >> $GDZIE/.mynetwork.zero done < /proc/net/ipt_account/mynetwork stat_done fi fi stat_done stat_busy "Zapis ostatnich warto¶ci do liczników account" if [ -f $GDZIE/.mynetwork.save ]; then while read line; do echo $line > /proc/net/ipt_account/mynetwork; done < $GDZIE/.mynetwork.save fi stat_done wynik ;; stop) stat_busy "Zapis liczników account" if [ -f /proc/net/ipt_account/mynetwork ]; then cat /proc/net/ipt_account/mynetwork > $GDZIE/.mynetwork.save fi stat_done wynik ;; reset) $0 stop stat_busy "Zerowanie licznikópw account" if [ -f $GDZIE/.mynetwork.zero ]; then while read line; do echo $line > /proc/net/ipt_account/mynetwork; done < $GDZIE/.mynetwork.zero fi stat_done stat_busy "Kopia liczników account" if [ ! -f $GDZIE/.mynetwork.kopia ]; then cat $GDZIE/.mynetwork.save > $GDZIE/.mynetwork.kopia else cat $GDZIE/.mynetwork.kopia > $GDZIE/.mynetwork.kopia1 cat $GDZIE/.mynetwork.save > $GDZIE/.mynetwork.kopia fi cat $GDZIE/.mynetwork.zero > $GDZIE/.mynetwork.save stat_done wynik ;; stat) stat_busy "Proste statystki liczników account" echo "+-----------------+------------+------------+------------+--------------+" echo "| Użytkownik | razem | odebrał | wysłał | nieatywny od |" echo "+-----------------+------------+------------+------------+--------------+" if [ "$PELNE" = "1" ]; then awk 'BEGIN {aaa=0}{bbb="B"}{bbb1="B"}{bbb2="B"}{ccc=$6+$20} {ddd=$6}{eee=$20}{zm=0}{roz="B"}{fff=$33} function jednostka(zm){{if(zm < 1024 ) {roz="B"}} {if((zm > 1024 )&&(zm < 1024^2)) {{zm/=1024} {roz="KB"}}} {if((zm > 1024^2)&&(zm < 1024^3)) {{zm/=1024^2}{roz="MB"}}} {if(zm > 1024^3) {{zm/=1024^3} {roz="GB"}}} {ccc=zm}{bbb=roz}} {if(ccc > 0) { {jednostka(ccc)}{op1=ccc}{w1=bbb} {jednostka(ddd)}{op2=ccc}{w2=bbb} {jednostka(eee)}{op3=ccc}{w3=bbb} {cz=$34 " sek"} {if($34 > 31536000 ) {cz="ponad roku"}} {printf"| %-15s | %7.2f %-2s | %7.2f %-2s | %7.2f %-2s | %12s |\n",$3,op1,w1,op2,w2,op3,w3,cz} {zm=0}{roz="B"} }}' /proc/net/ipt_account/mynetwork else awk 'BEGIN {aaa=0}{bbb="B"}{bbb1="B"}{bbb2="B"}{ccc=$6+$12} {ddd=$6}{eee=$12}{zm=0}{roz="B"}{fff=$33} function jednostka(zm){{if(zm < 1024 ) {roz="B"}} {if((zm > 1024 )&&(zm < 1024^2)) {{zm/=1024} {roz="KB"}}} {if((zm > 1024^2)&&(zm < 1024^3)) {{zm/=1024^2}{roz="MB"}}} {if(zm > 1024^3) {{zm/=1024^3} {roz="GB"}}} {ccc=zm}{bbb=roz}} {if(ccc > 0) { {jednostka(ccc)}{op1=ccc}{w1=bbb} {jednostka(ddd)}{op2=ccc}{w2=bbb} {jednostka(eee)}{op3=ccc}{w3=bbb} {cz=$18 " sek"} {if($18 > 31536000 ) {cz="ponad roku"}} {printf"| %-15s | %7.2f %-2s | %7.2f %-2s | %7.2f %-2s | %12s |\n",$3,op1,w1,op2,w2,op3,w3,cz} {zm=0}{roz="B"} }}' /proc/net/ipt_account/mynetwork fi echo "+-----------------+------------+------------+------------+--------------+" stat_done wynik ;; *) echo "Użycie: rcaccount [ start | stop | reset | stat ]" ;; esac exit 0 ![]() Dodane 10.02.2006r. Trochę o skrypcie ![]() Narazie nie zauważyłem usterek w działaniu skryptu ![]() Powstał dlatego że: - był dla mnie niezbędny ![]() - obsługa account jest w kernelu (nowe wersje) i działa lepiej oraz szybciej niż inne sposoby liczenia ruchu w sieci oraz jest łatwa w zastosowaniach - brak gotowych rozwiązań w NND na zapis, odczyt i kasowanie liczników oraz prostych statystyk Bardzo proszę o opinię bo narazie niemam zielonego pojęcia czy jest jakiekolwiek zainteresowanie moim skryptem, a robienie czegoś czego nikt nie potrzebuje mija się z celem ![]() |
Autor: | Liroy [ niedziela, 12 lutego 2006, 23:12 ] |
Tytuł: | |
a po czym poznac ze kernel ma zaimplementowaną obsługą liczników account |
Autor: | jamp [ poniedziałek, 13 lutego 2006, 00:35 ] |
Tytuł: | |
Liroy pisze: a po czym poznac ze kernel ma zaimplementowaną obsługą liczników account Odpal skrypt który zbudowałem z opcją start po wstępnym ustawieniu zmiennych, i zobacz czy w /proc/net/ipt_account/ jest plik mynetwork
|
Autor: | marask [ poniedziałek, 13 lutego 2006, 00:54 ] |
Tytuł: | |
sprawdź w pliku /boot/kconfig |
Autor: | Liroy [ wtorek, 14 lutego 2006, 10:47 ] |
Tytuł: | |
jamp wogole wlaczyc nie moge marask czego mam tam szukac |
Autor: | jamp [ wtorek, 14 lutego 2006, 11:14 ] |
Tytuł: | |
Liroy pisze: jamp wogole wlaczyc nie moge marask czego mam tam szukac Czego włączyć nie możesz ?? napisz coś bliżej bo skrypt robi to co powinien ![]() Wyślij co wstawiłeś do zmiennych i jaki masz adres sieci. |
Autor: | marask [ wtorek, 14 lutego 2006, 12:09 ] |
Tytuł: | |
jamp skąd masz kernel z obsługą ipaccount? jakiś link czy cuś ;] |
Autor: | jamp [ wtorek, 14 lutego 2006, 12:16 ] |
Tytuł: | |
marask pisze: jamp skąd masz kernel z obsługą ipaccount? jakiś link czy cuś ;] W wersji 2.4.32-6nnd napewno jest. Chyba w ...-5nnd też, ale tego nie jestem pewien.
|
Autor: | tasiorek [ wtorek, 14 lutego 2006, 12:23 ] |
Tytuł: | |
Jest w NND w kernelach wyzszych niz 2.4.31-1nnd. |
Autor: | jamp [ wtorek, 14 lutego 2006, 13:26 ] |
Tytuł: | |
Drobny błąd powoduje odwrotne wyświetlanie ściągania z wysyłaniem ![]() Wystarczy zmienić z # linia 148 {ddd=$6}{eee=$20} na {ddd=$20}{eee=$6} oraz # linia 165 {ddd=$6}{eee=$12} na {ddd=$12}{eee=$6} lub wystarczy jeżeli komuś odpowiada kolejność zamienić miejcami wyświetlany nagłówek ( linia 144). |
Autor: | marask [ wtorek, 14 lutego 2006, 17:44 ] |
Tytuł: | |
skąd masz kernel 2.4.32-6nnd ? |
Autor: | tasiorek [ wtorek, 14 lutego 2006, 18:05 ] |
Tytuł: | |
Z iso testowego. |
Autor: | jamp [ wtorek, 14 lutego 2006, 19:36 ] |
Tytuł: | |
tasiorek pisze: Z iso testowego. albo z CVSu
|
Autor: | Liroy [ środa, 15 lutego 2006, 19:53 ] |
Tytuł: | |
no to kicha bo ja mam Cytuj: Linux router_nnd 2.4.31-1nnd #1 wto cze 7 21:48:56 BST 2005 i586 unknown unknown GNU/Linux
|
Autor: | marask [ środa, 15 lutego 2006, 22:41 ] |
Tytuł: | |
a 2.4.32-5nnd też się nada ? |
Autor: | tasiorek [ czwartek, 16 lutego 2006, 00:02 ] |
Tytuł: | |
marask pisze: a 2.4.32-5nnd też się nada ?
Przeczytaj jeszcze raz watek to bedziesz wiedzial. Liroy, to sobie zainstaluj nowsze. |
Autor: | Liroy [ czwartek, 16 lutego 2006, 17:42 ] |
Tytuł: | |
tasiorek jesli mozna to napisz jak |
Autor: | tasiorek [ czwartek, 16 lutego 2006, 18:01 ] |
Tytuł: | |
http://ww1.devel-nnd.brb.pl/nnd/repo.test/ Tu masz repozytorium, a jak to zrobic powie Ci man pacman. |
Autor: | jamp [ środa, 8 marca 2006, 12:07 ] |
Tytuł: | |
Widząc ilość odwiedzin ![]() |
Autor: | Alfred [ środa, 8 marca 2006, 19:27 ] |
Tytuł: | |
Swego czasu dość intensywnie interesowałem się tym zagadnieniem. Opracowałem nawet odpowiednie skrypty do współpracy account z bazą rrdtool i skrypty wyświetlania wyników w rrdtool. Zainteresowanych zapraszam na www.ao.sytes.net Tam opisałem co i jak, ale uwaga - początkujący niech sobie odpuszczą. I jeszcze jedna uwaga - ten opis jest z października 2005. |
Strona 1 z 2 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |