Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : ifconfig auswerten und das ergebnis in eine mysql schubsen



meinereinerseiner
18-10-2002, 08:17
hallo,

ich möchte die Ausgabe von ifconfig was den traffic betrifft in eine mysql db schubsen.

ifconfig ppp0 | tail -n 2 | head -1
RX bytes:47454509 (45.2 Mb) TX bytes:16778851 (16.0 Mb)

ich bräuchte da die werte die in den klammern stehen, ohne das [leer]MB !??

der tom

TommeS73
18-10-2002, 11:59
ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/\(([0-9\.]+).*?\).*\(([0-9\.]+).*/; print "RX = $1\nTX = $2\n" '

mfg
Thomas

meinereinerseiner
18-10-2002, 16:28
danke für die schnelle antwort.


hab nur grad festgestellt, das es nicht wirklich clever ist den wert in den klammern
zu nehmen, da da ja auchmal nur kb stehen können, ist ja dann besser wenn
ich mit den bytes arbeiten würde - muss mir sie dann im php ja nur entsprechend
zurecht rechnen.

wie bekomme ich die raus und wie kann ich damit im shell script weiter arbeiten,
sprich wie bekomme ich die perl variablen in die bash - über export?


der tom

blackm
18-10-2002, 16:43
HI Thomas,

es wäre noch ganz gut, wenn da noch eine Einheit wäre. Es ist ja ein Unterschieb, ob 2,8 MB oder 2,8 GB Traffic hast
ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/\(([0-9\.]+)(.*?)\).*\(([0-9\.]+)(.*?)\).*/; print "RX = $1 $2\nTX = $3 $4\n" '
Richtig nobel wäre das dann noch, wenn man die Werte in Byte umrechnen würde.

by, blackm

blackm
18-10-2002, 16:47
Oder man nimmt gleich die Werte vor den Klammern *g*...
ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "RX = $1\nTX = $2\n" '

by, blackm

fork
18-10-2002, 17:02
Die Variablen werden hier ausgegeben und du kannst die Ausgabe abfangen

VAR_RX_BYTES=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; \
$RX+=$1; $TX+=$2;} print "$RX" ')

VAR_TX_BYTES=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; \
$RX+=$1; $TX+=$2;} print "$TX" ')

meinereinerseiner
18-10-2002, 18:17
hi,

habs - danke für die schnelle hilfe - hab bei der ganzen sache nochwas entdeckt:
das script:

ifconfig ppp0
RX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; $RX+=$1; $TX+=$2;} print "$RX" ')
TX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/; $RX+=$1; $TX+=$2;} print "$TX" ')
RX_BYTES_2=$(ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$1" ')
TX_BYTES_2=$(ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$2" ')
echo ${RX_BYTES_1}
echo ${TX_BYTES_1}
echo ${RX_BYTES_2}
echo ${TX_BYTES_2}


bringt folgende Ausgabe:

evil:/ # ./loger_test.sh
ppp0 Link encap:Point-to-Point Protocol
inet addr:217.231.158.137 P-t-P:217.5.98.177 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:2077814 errors:0 dropped:0 overruns:0 frame:0
TX packets:1707497 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:1642188898 (1566.1 Mb) TX bytes:358904400 (342.2 Mb)

3284377796
717808880
1642189352
358904486

irgendwie sind die ersten beiden Zeilen das doppelte des eigentlichen wertes??


der tom

fork
18-10-2002, 20:19
Kleiner Fehler meinerseits, die Korrektur:


> ifconfig ppp0
> RX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/ and \
$RX+=$1 and $TX+=$2;} print "$RX" ')
> TX_BYTES_1=$(ifconfig ppp0| perl -e 'for(<>) { /RX bytes:([0-9]+).*TX bytes:([0-9]+)/ and \
$RX+=$1 and $TX+=$2;} print "$TX" ')

meinereinerseiner
30-10-2002, 18:28
so - nun rennts wie's soll - falls es jemanden interessiert, hier das fertige script:

#!/bin/sh
#
#
# traffic_db.sh
#

if [ ! "$(/sbin/ifconfig | grep ppp0)" == "" ]; then

a_IP=`netstat -rn | egrep ^0.0.0.0 | sed -e "s,.* ,,g" | xargs /sbin/ifconfig | grep "inet.addr" | sed -e "s,.*addr:,," -e "s, .*,,"`

a_RX_BYTES=$(/sbin/ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$1" ')
a_TX_BYTES=$(/sbin/ifconfig ppp0 | tail -n 2 | head -1 | perl -ne ' m/.*?:([0-9]+).*?:([0-9]+)/; print "$2" ')

a_date=`date +%Y.%m.%d-%k:%M:%S`
a_jahr=`date +%Y`
a_monat=`date +%m`
a_tag=`date +%d`
a_zeit=`date +%k:%M:%S`
a_unixtime=`date +%s`

o_RX_BYTES=`cat /var/log/traffic/traffic.tmp | grep "o_RX_BYTES" | cut -c12-`
o_TX_BYTES=`cat /var/log/traffic/traffic.tmp | grep "o_TX_BYTES" | cut -c12-`
o_IP=`cat /var/log/traffic/traffic.tmp | grep "o_IP" | cut -c6-`


if [ "$o_IP" = "$a_IP" ]; then
data_rx=`expr ${a_RX_BYTES} - ${o_RX_BYTES}`
data_tx=`expr ${a_TX_BYTES} - ${o_TX_BYTES}`
else
data_rx=${a_RX_BYTES}
data_tx=${a_TX_BYTES}
fi

echo "INSERT INTO ppp0 VALUES ('${a_unixtime}','${a_jahr}','${a_monat}','${a_tag }','$a_IP','${data_rx}','${data_tx}','${a_RX_BYTES }','${a_TX_BYTES}','${a_zeit}');" > /var/log/traffic/trafficdb.tmp
mysql -u root -pgeheim --database=traffic < /var/log/traffic/trafficdb.tmp
rm -f /var/log/traffic/trafficdb.tmp

echo o_RX_BYTES=${a_RX_BYTES} > /var/log/traffic/traffic.tmp
echo o_TX_BYTES=${a_TX_BYTES} >> /var/log/traffic/traffic.tmp
echo o_IP=${a_IP} >> /var/log/traffic/traffic.tmp

else

echo "ppp0 nicht Aktiv!"

fi

exit 0



ist sicherlich an manchen stellen verbesserungswürdig, aber es tut - danke an die die mir geholfen haben

der tom