Traffic Accountin: Porovnání verzí

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání
m (pridani lang=bash)
 
(Není zobrazena jedna mezilehlá verze od jednoho dalšího uživatele.)
Řádek 10: Řádek 10:
  
 
Prvni cast scriptu, kterou jsem za asistence Coudka dal do kupy, je tato:
 
Prvni cast scriptu, kterou jsem za asistence Coudka dal do kupy, je tato:
 
+
<source lang="bash">
<nowiki>##</nowiki> Pokud vam bezi take na AP shaper, tak to musiste tahat odsud
+
## Pokud vam bezi take na AP shaper, tak to musiste tahat odsud
  
 
iptables -nL -t mangle -vx | grep eth1 | grep all | awk '{ if ($3 !="IMQ") {print $2 " " $8 " " $9}}' | cat > /root/data-frafic/users-data.tmp
 
iptables -nL -t mangle -vx | grep eth1 | grep all | awk '{ if ($3 !="IMQ") {print $2 " " $8 " " $9}}' | cat > /root/data-frafic/users-data.tmp
  
<nowiki>##</nowiki> Pak se to tridi na download a upload
+
## Pak se to tridi na download a upload
  
 
cat /root/data-frafic/users-data.tmp | awk '{ if ($2 !="0.0.0.0/0") {print $1 " " $2}}' | cat > /root/data-frafic/users-data.upload
 
cat /root/data-frafic/users-data.tmp | awk '{ if ($2 !="0.0.0.0/0") {print $1 " " $2}}' | cat > /root/data-frafic/users-data.upload
 
cat /root/data-frafic/users-data.tmp | awk '{ if ($3 !="0.0.0.0/0") {print $1 " " $3}}' | cat > /root/data-frafic/users-data.download
 
cat /root/data-frafic/users-data.tmp | awk '{ if ($3 !="0.0.0.0/0") {print $1 " " $3}}' | cat > /root/data-frafic/users-data.download
  
<nowiki>##</nowiki> Prevod do formatu '''MySQL'''
+
## Prevod do formatu '''MySQL'''
  
 
cat /root/data-frafic/users-data.upload | awk '{print "INSERT INTO `upload` ( `bytes` , `IP` ) VALUES ( '"'"'"$1"'"'"' , '"'"'"$2"'"'"' )" ";" }' | cat > /root/data-frafic/mysql-upload.sql
 
cat /root/data-frafic/users-data.upload | awk '{print "INSERT INTO `upload` ( `bytes` , `IP` ) VALUES ( '"'"'"$1"'"'"' , '"'"'"$2"'"'"' )" ";" }' | cat > /root/data-frafic/mysql-upload.sql
 
cat /root/data-frafic/users-data.download | awk '{print "INSERT INTO `download` ( `bytes` , `IP` ) VALUES ( '"'"'"$1"'"'"' , '"'"'"$2"'"'"' )" ";" }' | cat > /root/data-frafic/mysql-download.sql
 
cat /root/data-frafic/users-data.download | awk '{print "INSERT INTO `download` ( `bytes` , `IP` ) VALUES ( '"'"'"$1"'"'"' , '"'"'"$2"'"'"' )" ";" }' | cat > /root/data-frafic/mysql-download.sql
  
<nowiki>##</nowiki> Upload do MySQL databaze
+
## Upload do MySQL databaze
  
 
mysql -u uzivatel_db --password=heslo_do_db -D databaze < /root/data-frafic/mysql-upload.sql
 
mysql -u uzivatel_db --password=heslo_do_db -D databaze < /root/data-frafic/mysql-upload.sql
 
mysql -u uzivatel_db --password=heslo_do_db -D databaze < /root/data-frafic/mysql-download.sql
 
mysql -u uzivatel_db --password=heslo_do_db -D databaze < /root/data-frafic/mysql-download.sql
 +
</source>
  
 
----
 
----
Řádek 47: Řádek 48:
  
 
=== v1.0b ===
 
=== v1.0b ===
 +
<source lang="bash">
  
<nowiki>
+
  #!/bin/bash
 
+
  dir_data_txt="/opt/ipaccounting"
#!/bin/bash
+
  dir_data_rrd="/opt/ipaccounting/rrd"
dir_data_txt="/opt/ipaccounting"
+
  rrd_active="on"
dir_data_rrd="/opt/ipaccounting/rrd"
+
  txt_active="on"
rrd_active="on"
+
  # Nacteni dat z IPTABLES
txt_active="on"
+
  counter_file=`cat $dir_data_txt/data.txt `
 
+
  data=`iptables -t mangle -L unishaper_up -v -x -n -Z | grep all | awk '{ if ($1 !="0") {print }}' |  awk '{ if ($2 !="0") {print}}' | sed -e 's/ /-/g' | grep MARK`
# Nacteni dat z IPTABLES
+
  for i in $data; do
counter_file=`cat $dir_data_txt/data.txt `
 
 
 
data=`iptables -t mangle -L unishaper_up -v -x -n -Z | grep all | awk '{ if ($1 !="0") {print }}' |  awk '{ if ($2 !="0") {print }}' | sed -e 's/ /-/g' | grep MARK`
 
for i in $data; do
 
 
     ip=`echo $i | sed -e 's/-/ /g' | awk '{print $7}' `
 
     ip=`echo $i | sed -e 's/-/ /g' | awk '{print $7}' `
 
     out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}' `
 
     out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}' `
Řádek 69: Řádek 67:
 
     new_rrd_out="$new_rrd_out$ip-$out_aver\n"
 
     new_rrd_out="$new_rrd_out$ip-$out_aver\n"
 
     echo -ne "$ip\tOUT\tstare: $out_old \tnove: $out \tsoucet: $out_new\trate: $out_aver\n"
 
     echo -ne "$ip\tOUT\tstare: $out_old \tnove: $out \tsoucet: $out_new\trate: $out_aver\n"
done
+
  done
 
+
  data=`iptables -t mangle -L unishaper_down -v -x -n -Z | grep all | awk '{ if ($1 !="0") {print }}' |  awk '{ if ($2 !="0") {print}}' | sed -e 's/ /-/g' | grep MARK`
data=`iptables -t mangle -L unishaper_down -v -x -n -Z | grep all | awk '{ if ($1 !="0") {print }}' |  awk '{ if ($2 !="0") {print }}' | sed -e 's/ /-/g' | grep MARK`
+
  for i in $data; do
for i in $data; do
 
 
     ip=`echo $i | sed -e 's/-/ /g' | awk '{print $8}'`
 
     ip=`echo $i | sed -e 's/-/ /g' | awk '{print $8}'`
 
     in=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
 
     in=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
Řádek 81: Řádek 78:
 
     new_rrd_in="$new_rrd_in$ip-$in_aver\n"
 
     new_rrd_in="$new_rrd_in$ip-$in_aver\n"
 
     echo -ne "$ip\tIN\tstare: $in_old \tnove: $in \tsoucet: $in_new\trate: $in_aver\n"
 
     echo -ne "$ip\tIN\tstare: $in_old \tnove: $in \tsoucet: $in_new\trate: $in_aver\n"
done
+
  done
 
+
  # Zapsani hodnot do txt souboru (pocitadlo prenesenych dat)
 
+
  if [ $txt_active == "on" ]; then
# Zapsani hodnot do txt souboru (pocitadlo prenesenych dat)
 
if [ $txt_active == "on" ]; then
 
 
     for i in `echo -ne $new_file_out`; do
 
     for i in `echo -ne $new_file_out`; do
 
         ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
 
         ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
Řádek 93: Řádek 88:
 
     done
 
     done
 
     echo -ne $counter_data > $dir_data_txt/data.txt
 
     echo -ne $counter_data > $dir_data_txt/data.txt
fi
+
  fi
 
+
  # Zapsani hodnot do rrd databaze (grafy prenosu)
# Zapsani hodnot do rrd databaze (grafy prenosu)
+
  if [ $rrd_active == "on" ]; then
if [ $rrd_active == "on" ]; then
 
 
     for i in `echo -ne $new_rrd_out`; do
 
     for i in `echo -ne $new_rrd_out`; do
 
         ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
 
         ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
Řádek 106: Řádek 100:
 
             rrdtool update "$dir_data_rrd/host-$ip.rrd" -t in:out N:$in:$out
 
             rrdtool update "$dir_data_rrd/host-$ip.rrd" -t in:out N:$in:$out
 
     done
 
     done
fi
+
  fi
 
+
</source>
</nowiki>
 

Aktuální verze z 13. 2. 2009, 18:48

v0.2

Jelikoz statistiky Sosacu byli po padu iGW - Oriona zruseny/vypnuty/znova nenahozeny: http://charon.hkfree.org/~pavkriz/hkfree/stat.php

tak jsem se rozhodl ze bych si neco podobneho mohl pustit na APckach abych mel prehled kdo jak moc sosa. Sic by nekdo mohl namitnout, ze muzu pouzit RRD Tools, ale ty zatezujou system opravdu neskutecnym zpusobem, coz je neprijatelne a tak se to pokusim udelat jinak s tim ze to sice nebude graficky zobrazovano pres hotsanic (coz me netrapi) ale bude se to tahat z MySQL databaze.


Prvni cast scriptu, kterou jsem za asistence Coudka dal do kupy, je tato:

## Pokud vam bezi take na AP shaper, tak to musiste tahat odsud

iptables -nL -t mangle -vx | grep eth1 | grep all | awk '{ if ($3 !="IMQ") {print $2 " " $8 " " $9}}' | cat > /root/data-frafic/users-data.tmp

## Pak se to tridi na download a upload

cat /root/data-frafic/users-data.tmp | awk '{ if ($2 !="0.0.0.0/0") {print $1 " " $2}}' | cat > /root/data-frafic/users-data.upload
cat /root/data-frafic/users-data.tmp | awk '{ if ($3 !="0.0.0.0/0") {print $1 " " $3}}' | cat > /root/data-frafic/users-data.download

## Prevod do formatu '''MySQL'''

cat /root/data-frafic/users-data.upload | awk '{print "INSERT INTO `upload` ( `bytes` , `IP` ) VALUES ( '"'"'"$1"'"'"' , '"'"'"$2"'"'"' )" ";" }' | cat > /root/data-frafic/mysql-upload.sql
cat /root/data-frafic/users-data.download | awk '{print "INSERT INTO `download` ( `bytes` , `IP` ) VALUES ( '"'"'"$1"'"'"' , '"'"'"$2"'"'"' )" ";" }' | cat > /root/data-frafic/mysql-download.sql

## Upload do MySQL databaze

mysql -u uzivatel_db --password=heslo_do_db -D databaze < /root/data-frafic/mysql-upload.sql
mysql -u uzivatel_db --password=heslo_do_db -D databaze < /root/data-frafic/mysql-download.sql

Pokud by mel nekdo napad jak cokoliv vylepsit, zjednodusit ci zprehlednit necht klidne da vedet treba na newsech



Co je potreba dodelat

  1. Pricitani hodnot ke stavajicim aby tabulka v MySQL nemela behem dne milion radku
  2. Ukladani hodnot do nejakyho externiho souboru aby v pripade rebootu masiny, ci jen vymazani a znovu nahrani iptables pocitadlo nepocitalo odzacatku



v1.0b

  #!/bin/bash
  dir_data_txt="/opt/ipaccounting"
  dir_data_rrd="/opt/ipaccounting/rrd"
  rrd_active="on"
  txt_active="on"
  # Nacteni dat z IPTABLES
  counter_file=`cat $dir_data_txt/data.txt `
  data=`iptables -t mangle -L unishaper_up -v -x -n -Z | grep all | awk '{ if ($1 !="0") {print }}' |  awk '{ if ($2 !="0") {print}}' | sed -e 's/ /-/g' | grep MARK`
  for i in $data; do
    ip=`echo $i | sed -e 's/-/ /g' | awk '{print $7}' `
    out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}' `
    out_old=`echo -ne "$counter_file"  | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $3}' `
    out_new=$(($out_old + $out))
    new_file_out="$new_file_out$ip-$out_new\n"
    out_aver=$(($out / 120))
    new_rrd_out="$new_rrd_out$ip-$out_aver\n"
    echo -ne "$ip\tOUT\tstare: $out_old \tnove: $out \tsoucet: $out_new\trate: $out_aver\n"
  done
  data=`iptables -t mangle -L unishaper_down -v -x -n -Z | grep all | awk '{ if ($1 !="0") {print }}' |  awk '{ if ($2 !="0") {print}}' | sed -e 's/ /-/g' | grep MARK`
  for i in $data; do
    ip=`echo $i | sed -e 's/-/ /g' | awk '{print $8}'`
    in=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
    in_old=`echo -ne "$counter_file"  | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $2}'`
    in_new=$(($in_old + $in))
    new_file_in="$new_file_in$ip-$in_new\n"
    in_aver=$(($in / 120))
    new_rrd_in="$new_rrd_in$ip-$in_aver\n"
    echo -ne "$ip\tIN\tstare: $in_old \tnove: $in \tsoucet: $in_new\trate: $in_aver\n"
  done
  # Zapsani hodnot do txt souboru (pocitadlo prenesenych dat)
  if [ $txt_active == "on" ]; then
    for i in `echo -ne $new_file_out`; do
        ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
        out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
        in=`echo -ne "$new_file_in" | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $2}'`
        counter_data="$counter_data$ip-$out-$in\n"
    done
    echo -ne $counter_data > $dir_data_txt/data.txt
  fi
  # Zapsani hodnot do rrd databaze (grafy prenosu)
  if [ $rrd_active == "on" ]; then
    for i in `echo -ne $new_rrd_out`; do
        ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
        out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
        in=`echo -ne "$new_rrd_in" | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $2}'`
            if [ ! -e "$dir_data_rrd/host-$ip.rrd" ]; then
                rrdtool create "$dir_data_rrd/host-$ip.rrd" --step 120 DS:in:GAUGE:600:0:U DS:out:GAUGE:600:0:URRA:AVERAGE:0.5:1:3600 RRA:AVERAGE:0.5:6:3600 RRA:AVERAGE:0.5:42:3600;
            fi
            rrdtool update "$dir_data_rrd/host-$ip.rrd" -t in:out N:$in:$out
    done
  fi