[Linuxtrent] MRTG

  • From: "Gelpi Andrea - Liste" <liste@xxxxxxxx>
  • To: "Linuxtrent" <linuxtrent@xxxxxxxxxxxxxxxxx>
  • Date: Sun, 17 Mar 2002 22:33:30 +0100

Riassumo brevemente ciò che ho fatto con MRTG anche con l'aiuto di Guido per
gli script.

Per chi non lo sapesse MRTG è un prodottino che permette di fare dei grafici
sull'utilizzo di apparati di rete, ma non solo.
Di default lavora con il protocollo SNMP.

Io invece volevo monitorare il traffico del mio modem ISDN interno.

Dopo aver letto un po' di documentazione ho trovato che MRTG oltre al
protocollo SNMP accetta anche in input dati in questo formato:
4 righe con su ogni riga: byte in input, byte in output, uptime e nome del
sistema.

Insieme al prodotto c'è una directory chiamata contrib piena di script per
acquisire dati da dispositivi che non utilizzano SNMP.

Cercando in questa directory ho trovato uno script che prende in input i
byte conteggiati da una qualche regola di iptables o di ipchain, ma lo
script fornito come esempio conteneva degli errori, almeno facendolo girare
nella mia Red Hat. Con un po' di prove e l'aiuto di Guido ho sistemato lo
script, ma la soluzione non mi piaceva per il fatto che per ogni interfaccia
che si vuole monitorare è necessario creare due chain una per l'input e
l'altra per l'output. Poi vanno inserite delle chiamate a queste chain in
tutte le chain di default (INPUT, FORWARD e OUTPUT). Tutto questo allunga di
molto l'output di iptables e lo rende molto meno leggibile.
Quindi non mi è sembrata una buona soluzione dato che il Firewall è già una
cosa complessa per conto suo, e renderlo meno leggibile solo per contare i
byte in transito sulle interfacce proprio non mi sembra il caso.

Con l'aiuto di Guido ho modificato lo script per leggere l'output di
iptables e ne ho creato uno per leggere /proc/net/dev.

Ora finalmente ho uno script in grado di monitorare via MRTG qualsiasi
interfaccia presente sul PC.

Ho proposto a Guido di inviare lo script a quelli di MRTG per farlo inserire
in contrib, dato che nella versione che ho (l'ultima distribuita da Red Hat
via rpm) uno script come questo non c'è.

Allego qui sotto lo script.

----------------------------------------------------------------------------
--------------
#!/usr/bin/perl
use strict;
  my (%interface_acc, $interface, $upTime, $host);
  $host=`/bin/hostname --fqdn`;  # local hostname (for information only)
  ($interface) = @ARGV;
  $interface = "eth0" if !defined $interface;

  open DEV, "</proc/net/dev";
  <DEV>;<DEV>;  #skip header
  while(<DEV>){
    chop;
    my($name, $str_bytes) = split /:/, $_, 2;
    $name =~ s/\s+//;
    $str_bytes =~ s/\s+// if($str_bytes =~ m/^\s/);
    my @bytes = split /\s+/, $str_bytes, 16;
    $interface_acc{$name} = \@bytes;
  }
  close DEV;

# uptime of the machine
open(UPTIME, "uptime |cut -b 14-27|");
$upTime=<UPTIME>;
close(UPTIME);
chop $upTime;

# 4 lines of output only.

print "$interface_acc{$interface}->[0]\n",
      "$interface_acc{$interface}->[8]\n",
      "$upTime\n",
      "$host";
----------------------------------------------------------------------------
----------------

--
Gelpi ing. Andrea
--------------------------------------------------------------
It took the computing power of three C-64s to fly to the Moon.
It takes a 486 to run Windows 95. Something is wrong here.
--------------------------------------------------------------

-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con SOGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx


Other related posts:

  • » [Linuxtrent] MRTG