PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MRTG traffic Auswertung nach disconnect



lam3r
12.12.06, 13:46
Hallo,

bei mir lief der MRTG über 1 Jahr einwandfrei, aber seit ich Debian auf etch aktualisiert habe, ist dem nicht mehr so :(
Nachdem die T-Com alle 24h eine Zwangstrennung macht, funktioniert auch der mrtg nicht mehr auf ppp0. Eth0 kann auch weiterhin via snmpd ausgelesen werden.

Ich erhalte dann folgenden Fehler:

mrtg traffic.cfg
SNMP Error:
Received SNMP response with error code
error status: noSuchName
index 4 (OID: 1.3.6.1.2.1.2.2.1.16.9)
SNMPv1_Session (remote host: "127.0.0.1" [127.0.0.1].161)
community: "public"
request ID: 772800169
PDU bufsize: 8000 bytes
timeout: 2s
retries: 5
backoff: 1)
at /usr/share/perl5/SNMP_util.pm line 490
SNMPGET Problem for ifDescr.9 ifInOctets.9 ifDescr.9 ifOutOctets.9 sysUptime sysName on public@127.0.0.1::::::v4only
at /usr/bin/mrtg line 2043
2006-12-12 14:27:40: WARNING: could not match&get 127.0.0.1:/ifInOctets for Descr 'ppp0'
2006-12-12 14:27:40: ERROR: Target[localhost_ppp0][_IN_] ' $target->[1]{$mode} ' did not eval into defined data
2006-12-12 14:27:40: ERROR: Target[localhost_ppp0][_OUT_] ' $target->[1]{$mode} ' did not eval into defined data


Bei nochmaligem aufrufen von mrtg mit entsprechendem Parameter erscheint diese Fehlermeldung nicht mehr, MRTG will trotzdem nicht mehr (Zeigt dann 0Kbyte Traffic an, was nicht stimmt.)

Wenn ich dann wie wild den snmpd neu starte, neue configs fuer mrtg erstelle funktioniert das ganze dann irgendwann wieder, system konnte ich dahinter nicht erkennen.

Die config sieht wie folgt aus:

### Interface 1 >> Descr: 'eth0' | Name: 'eth0' | Ip: '192.168.0.1' | Eth: '00-04-76-c9-f9-b7' ###

Target[localhost_eth0]: \eth0:public@127.0.0.1:
SetEnv[localhost_eth0]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_eth0]: 1250000
Title[localhost_eth0]: 192.168.0.1 -- Local Network
PageTop[localhost_eth0]: <h1>192.168.0.1 -- Local Network</h1>


### Interface 9 >> Descr: 'ppp0' | Name: 'ppp0' | Ip: '217.233.135.140' | Eth: '' ###
Target[localhost_ppp0]: \ppp0:public@127.0.0.1:
SetEnv[localhost_ppp0]: MRTG_INT_IP="" MRTG_INT_DESCR="ppp0"
MaxBytes[localhost_ppp0]: 393216
Title[localhost_ppp0]: ppp0 -- Internet
PageTop[localhost_ppp0]: <h1>ppp0 -- Internet</h1>
(Workdir usw, habe ich mal weggelassen)

snmpd.conf:

com2sec local 127.0.0.1/32 public
com2sec local 192.168.0.0/24 public

group MyROGroup v1 local
group MyROGroup v2c local
group MyROGroup usm local

view all included .1 80

access MyROGroup "" any noauth exact all none none

syslocation DE
syscontact Me <root@localhost>


An was könnte das liegen? Ich habe nichts an der config geaendert, aber der snmpd/mrtg wurde aktualisiert.

Grüsse

marce
12.12.06, 13:51
wird nach dem disconnect automatisch die Verbindung neu aufgebaut?

lam3r
12.12.06, 13:54
wird nach dem disconnect automatisch die Verbindung neu aufgebaut?

Ja, wird durch RP-PPPoE bewerkstelligt.

lam3r
13.12.06, 12:34
Neue Erkenntnis:
nach dem disconnect gibt es den ppp0 anscheinend doppelt:

snmptable -v1 -c public localhost ifTable | cut -b-33
SNMP table: IF-MIB::ifTable

ifIndex ifDescr ifType
1 eth0 ethernetCsmacd
2 eth1 ethernetCsmacd
3 eth2 ethernetCsmacd
4 eth3 ethernetCsmacd
5 lo softwareLoopback
11 ppp0 ppp
12 ppp0 ppp


Ich schätze, mrtg versucht den "ghost" ppp0 zu graphen. Nun ist die Frage, was kann man dagegen tun?
Laut ifconfig gibt es nur einen ppp0. :(

bierchen
17.01.07, 23:10
ich habe genau das gleiche problem. sobalt ich die ppp verbindung trenne und sie dann wieder starte, erscheint in der if-mib table von snmp das device ppp0 doppelt. mit jeder weiteren einwahl kommt ein neuer eintrag dazu. damit ändert sich für mrtg jedes mal die schnittstelle, die es abfragen sollte. das ganze sieht dann wie folgt aus:


> snmpwalk -v2c -c public 127.0.0.1 ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: sit0
IF-MIB::ifDescr.4 = STRING: ppp0
IF-MIB::ifDescr.5 = STRING: ppp0
IF-MIB::ifDescr.6 = STRING: ppp0

hat sich für dieses problem mittlerweile eine lösung ergeben?
wäre für jede hilfe sehr dankbar.

dino03
18.01.07, 07:07
MRTG kann man auch wunderbar mit eigenen Scripten mit Daten versorgen.
Habt ihr schon mal versucht, Das Interface z.B. ip "ifconfig" abzufragen und mit
nem Script die IF-Counter zu extrahieren ? Dann kann man bei MRTG die Daten
mit "cat" aus ner Datei einlesen und fertig ;)

Hier habe ich mal ein Fragment aus nem Script von mir ...


# #################### NETZWERK-SCHNITTSTELLEN ################################
# castor:~ # ip -s link
# 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
# link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# RX: bytes packets errors dropped overrun mcast
# 965869 3205 0 0 0 0
# TX: bytes packets errors dropped carrier collsns
# 965869 3205 0 0 0 0
# 2: eth0: <BROADCAST,MULTICAST,ALLMULTI,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
# link/ether 00:30:1b:10:26:cc brd ff:ff:ff:ff:ff:ff
# RX: bytes packets errors dropped overrun mcast
# 13697 77 0 0 0 0
# TX: bytes packets errors dropped carrier collsns
# 13697 77 0 0 0 0
# ...
# 4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
# link/sit 0.0.0.0 brd 0.0.0.0
# RX: bytes packets errors dropped overrun mcast
# 0 0 0 0 0 0
# TX: bytes packets errors dropped carrier collsns
# 0 0 0 0 0 0
#
# castor:~ # ip -f inet addr
# 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
# inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
# 2: eth0: <BROADCAST,MULTICAST,ALLMULTI,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
# inet 10.10.0.21/24 brd 10.10.0.255 scope global eth0
# 3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
# inet 213.252.179.24/24 brd 213.252.179.255 scope global eth1
# ================================================== ===========================
$ipout = `ip -f inet addr`; # Netzwerkschnittstellen abfragen
@iplines = split(/\n/,$ipout); # In Zeilen zerlegen
%iaddr = (); # Hash fuer IP-Addr anlegen
foreach $ipanalyse (@iplines)
{
$ipanalyse =~ s/ +/ /g; # Alle Leerzeichen durch eins ersetzen
($nummer, $f1, $f2, $d1, $d2) = split(/ /,$ipanalyse);
if ($nummer ne "")
{
$ifname = $f1; # Interface-Name sichern
$ifname =~ s/://g; # Alle Doppelpunkte vernichten
}
else
{ $iaddr{$ifname} = $f2; } # IP-Adresse und Maske ablegen
}

$ipout = `ip -s link`; # Netzwerkschnittstellen abfragen
@iplines = split(/\n/,$ipout); # In Zeilen zerlegen
$ifline = 0; # Zeile innerhalb der Interface-Info
%itext = (); # Hash fuer Infotext anlegen
foreach $ipanalyse (@iplines)
{
$ipanalyse =~ s/ +/ /g; # Alle Leerzeichen durch eins ersetzen
($nummer, $f1, $f2, $d1, $d2) = split(/ /,$ipanalyse);
if ($nummer ne "")
{
$ifline = 0; # Zeile innerhalb der Interface-Info
$ifname = $f1; # Interface-Name sichern
$ifname =~ s/://g; # Alle Doppelpunkte vernichten
}
else
{
if ($ifline == 0)
{
if ($f1 eq "link/ether") # $f1 = Linktyp , $f2 = MAC-Adresse
{
$itext{$ifname} = "$hostname : $ifname ( ".$iaddr{$ifname}." - $f2 )";
open (IFOUT, ">${datdir}${ifname}.dat");
if ($debug) { print $itext{$ifname}." \n"; }
}
else
{ $ifname = ""; } # Interface blockieren
}
elsif (($ifline == 2) and ($ifname ne "")) # Receive
{
# $f1 = int($f1 / 1024); # in kBytes umrechnen
print IFOUT "$f1\n";
if ($debug) { print " Rx: $f1 Bytes"; }
}
elsif (($ifline == 4) and ($ifname ne "")) # Transmit
{
# $f1 = int ($f1 / 1024); # in kBytes umrechnen
print IFOUT "$f1\n";
print IFOUT "\n";
print IFOUT "${hostname}_${ifname}\n";
close (IFOUT);
if ($debug) { print " Tx: $f1 Bytes \n"; }

$mrtg_inc .= "# ##### Interfacelast $hostname - $ifname ##### \n";
$mrtg_inc .= "Target[${hostname}_${ifname}]: \`cat ${datdir}${ifname}.dat\` \n";
$mrtg_inc .= "Options[${hostname}_${ifname}]: growright, nopercent \n";
$mrtg_inc .= "kilo[${hostname}_${ifname}]: 1024 \n";
$mrtg_inc .= "YLegend[${hostname}_${ifname}]: Bytes \n";
$mrtg_inc .= "ShortLegend[${hostname}_${ifname}]: Bytes \n";
$mrtg_inc .= "kMG[${hostname}_${ifname}]: ,k,M,G,T,,,, \n";
$mrtg_inc .= "MaxBytes[${hostname}_${ifname}]: 1000000000 \n";
$mrtg_inc .= "LegendI[${hostname}_${ifname}]: Receive \n";
$mrtg_inc .= "LegendO[${hostname}_${ifname}]: Transmit \n";
$mrtg_inc .= "Legend1[${hostname}_${ifname}]: Receive \n";
$mrtg_inc .= "Legend2[${hostname}_${ifname}]: Transmit \n";
$mrtg_inc .= "Title[${hostname}_${ifname}]: ".$itext{$ifname}." \n";
$mrtg_inc .= "PageTop[${hostname}_${ifname}]: <H1>".$itext{$ifname}."</H1> \n";
$mrtg_inc .= $htmlnav;
$mrtg_inc .= "\n\n";

$host_web .= "<a href=\"${hostname}_${ifname}.html\"><img src=\"${hostname}_${ifname}-day.png\" border=0></a><br>\n";
$host_web .= $itext{$ifname}." <br><hr><br>\n";

}
else
{ }
$ifline++; # Interface-Zeile incrementieren
}
}


Das Script liest alles mögliche aus Linux aus (HD-Temperatur,
Plattenbelegung, ...) und liefert die Daten über Dateien an MRTG weiter.

Versucht mal damit ein wenig zu experimentieren (Achja, das Script ist in Perl).

Über cron wird dann ein Shell-Script aufgerufen, in dem nacheinander das
Perl-Abfragescript und dann MRTG gestartet wird.

Wenn man das Abfragescript ohne Zieldateien startet, generiert es automatisch ne
HTML-Datei und die MRTG-Config.

wenn einer das ganze Script haben möchte ...
http://www.sccweb.de/pix/dino/sys-read

Auf meinem Laptop liest es auch noch den Ladezustand des Akkus aus. Dann sieht man wunderbar
die Lade-/Entladekurven und damit die Fitness des Akkus.
Bei meinem Acer-Laptop habe ich am Anfang mal 4h Laufzeit gehabt. Nach über 3 Jahren immer noch
um die 3h Laufzeit. RESPECT Acer !!! Super Akku (ist bestimmt nicht von Sony ;) )

Na denn viel Spaß :)

bierchen
18.01.07, 16:03
vielen dank für die hilfe! das war genau das richtige, damit läufts so wie gewünscht :)

:cool: