[linux_var] x buccia - bash

Lesinigo Luca lucky a luckyluke.org
Mer 8 Set 2004 23:28:58 UTC


Più che odor di FAQ sento puzza di accrocchi scriptati da 423412 
processi.

Un tempo ne avevo N che giravano per fornire i dati a MRTG e 
praticamente l'insieme di cose che serviva a fare i grafici delle 
prestazioni era responsabile di metà dell'uso CPU :D
Posso suggerirti di mettere un net-snmp in ascolto su 127.0.0.1 e usare 
il protocollo SNMP per avere i dati che ti servono? -alla fine è nato e 
viene usato al 99% solo per cose del genere-

Penso che persino un snmpget in uno script bash sia più veloce (cat | 
awk | cut | sed | etc... sono N processi che vanno...). se invece usi 
qualunque altra cosa che non sia bash (eg. stai scriptando/codando in 
perl/php/python/C/whatever) ci sono sicuramente delle librerie snmp 
native per il linguaggio usato.

Non è nulla di difficile, una volta capito come orientarsi tra un MIB e 
l'altro... ti mando un esempio di un snmpwalk, la sfilza di dati la 
copio per una interfaccia sola altrimenti faccio mega e mega di email, 
ma come vedi all'inizio ci sono tutte le interfacce che vuoi e scegli 
di quale avere i dati...
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: sit0
IF-MIB::ifDescr.3 = STRING: eth0
IF-MIB::ifDescr.4 = STRING: eth1
IF-MIB::ifDescr.5 = STRING: eth2
IF-MIB::ifDescr.6 = STRING: eth3
IF-MIB::ifDescr.7 = STRING: br0
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: tunnel(131)
IF-MIB::ifType.3 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.4 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.5 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.6 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.7 = INTEGER: ethernetCsmacd(6)
[.....]
IF-MIB::ifType.7 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.7 = INTEGER: 1500
IF-MIB::ifSpeed.7 = Gauge32: 10000000
IF-MIB::ifAdminStatus.7 = INTEGER: up(1)
IF-MIB::ifOperStatus.7 = INTEGER: up(1)
IF-MIB::ifInOctets.7 = Counter32: 752335444
IF-MIB::ifInUcastPkts.7 = Counter32: 2362750
IF-MIB::ifInDiscards.7 = Counter32: 0
IF-MIB::ifInErrors.7 = Counter32: 0
IF-MIB::ifOutOctets.7 = Counter32: 1453369562
IF-MIB::ifOutUcastPkts.7 = Counter32: 2727357
IF-MIB::ifOutDiscards.7 = Counter32: 0
IF-MIB::ifOutErrors.7 = Counter32: 0
IF-MIB::ifOutQLen.7 = Gauge32: 0

Puoi vedere (In|Out)Octects (cioè i bytes), i pacchetti, i pacchetti 
scartati, gli errori... poi magari in altri MIB trovi anche altre cose 
più esotiche ma direi che queste sono le informazioni base... quindi se 
vuoi sapere quanti byte sono usciti da quell'interfaccia:

lucky $ snmpget -v 2c -c public 127.0.0.1 ifOutOctets.7
IF-MIB::ifOutOctets.7 = Counter32: 1453405330
...in versione scriptata diventa:
BYTE_USCITI=‘snmpget -v 2c -c public 127.0.0.1 -Oqv ifOutOctets.7‘;
...che ti lancia un solo processo senza averne altri N per parsare la 
riga. E comunque bash rimane il worst case scenario, da python C o 
altro il tutto è ancora più veloce e immediato.

Il giorno 18/ago/04, alle 16:50, HelLViS69 ha scritto:
> Ciao Buccia, nn è ke mi potresti spiegare come si fanno le espressioni
> regolari con la bash? io devo cattare un file e prendere solo delle 
> parole,
> ke immagino andranno in un array x comodità. Devo fare sto lavoro:
> prendere il file /proc/net/dev e stampare il nome delle interfacce di 
> rete
> presenti, i bute ricevuti e inviati, e gli errori/drop. Mi daresti una 
> mano?

--
Lesinigo Luca



More information about the Talking mailing list