ipac-ng zu mrtg

Bash, Shell, PHP, Python, Perl, CGI
kos
Posts: 56
Joined: 2004-02-15 03:36

ipac-ng zu mrtg

Post by kos » 2004-12-01 00:29

hallo,

also ich hab mir mal ipac-ng auf den server geworfen und auch mrtg. beides läuft soweit ganz gut.
ich möchte nun, wie der titel bereits sagt, den traffic von ipac-ng zu mrtg übertragen.
im package/source von ipac-ng ist bereits die ipaccount enthalten mit der das funktionieren soll. so nun hab ich allerdings das problem, es werden nur 0-werte zurück gegeben. hier mal die ipaccount:

Code: Select all

#!/usr/bin/perl -w
#
# /usr/local/bin/ipaccount
#
# ipaccount reads data from ipac-ng logs and updates mrtg log file(s).
# ipaccount is used with ipac-ng and mrtg to create ip traffic graphs.

#
# The "fetchipac" (part of ipac-ng) application creates log files that
# contain historical IP traffic data depending on rules set in ipac.conf.
#
# The mrtg reads data from a unique log file for each "target" ($TARGET.log)
# The "target" log files depend on rules set in the mrtg.cfg file.
# mrtg can use this data for creation of graphs.
#
# Read ipac-ng and mrtg manuals for more information.
#########################################################################
 
$ENV{PATH}="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin";
 
die "Usage: ipaccount <relative time> <regexp>n" if $#ARGV < 1;
 
@output = `/usr/local/sbin/ipacsum --exact -s $ARGV[0]`;
die "Can't execute ipacsum: $!n" if !defined @output;
 
$bytesin=0;
$bytesout=0;
 
foreach (@output)
{
    # Incoming...
    $bytesin = $1 if (/^[* ]s+incomings+$ARGV[1]s+:s+(d+)/);
 
    # Outgoing...
    $bytesout = $1 if (/^[* ]s+outgoings+$ARGV[1]s+:s+(d+)/);
}
 
print "$bytesinn$bytesoutn0nn";
ehrlich gesagt ich sehe dort eigentlich ein problem. Ich hab auch schon ein paar test gemacht, ob überhaupt etwas in der @output drin ist, und ja es ist die ausgabe vom ipacsum enthalten.
ich vermute nun es ist irgendwie ein fehler im regex beim if. ich kann jedoch noch kein regex und weiß leider nicht so recht zu interpretieren was dort steht. (gut das nach incoming und outgoing gesucht wird versteh ich ;-) und das der : gesucht wird)

hier mal die ipacsum ausgabe

Code: Select all

# /usr/local/sbin/ipacsum --exact -s 15m -f "TeamSpeak Server"      
IP accounting summary
Host: xxx / Time created: 2004/12/01 00:23:37 CET
Data from 2004/12/01 00:08:37 CET to 2004/12/01 00:23:37 CET
  TeamSpeak Server incoming                       :          187712
  TeamSpeak Server outgoing                       :          179805
(also ob dort nun leerzeichen im namen der rule steht oder nicht das ist egal das hab ich auch schon getestet)

Code: Select all

# /usr/lib/mrtg2/ipaccount 15m "TeamSpeak Server"               
0
0
0
ich hoffe mir kann jemand damit behilflich sein.
DANKE!

mfg KoS

kos
Posts: 56
Joined: 2004-02-15 03:36

Re: ipac-ng zu mrtg

Post by kos » 2004-12-02 02:46

hmm, muss ich jetzt davon ausgehen, das es hierbei keinen rat oder lösung gibt?
ich hab bisher über google auch noch nichts gefunden. hatte ja schon vor posting ne weile gesucht, allerdings nur im allgemeinen was bezüglich ipac2mrtg, aber nichts was mein problem anspricht.

hiiiilffeeee... :-/

dogholiday
Posts: 17
Joined: 2004-09-30 16:36

Re: ipac-ng zu mrtg

Post by dogholiday » 2004-12-02 08:23

Hmm also rexexp sind auch nicht meine Welt aber irgendwie sieht das für mich sehr falsch aus...

Sollte das nicht eher so sein:

Code: Select all

    # Incoming...
    $bytesin = $1 if (/^[* ]s+$ARGV[1]s+incomings+:s+(d+)/);
 
    # Outgoing...
    $bytesout = $1 if (/^[* ]s+$ARGV[1]s+outgoings+:s+(d+)/); 
da $ARGV[1] = TeamSpeak Server
und dann erst outgoing bzw. incoming kommt.

kos
Posts: 56
Joined: 2004-02-15 03:36

Re: ipac-ng zu mrtg

Post by kos » 2004-12-02 08:59

hm, da hast du allerdings nicht ganz unrecht.
wobei es glaub ich rules-einstellungssache ist eben weil bei http, ftp ... etc. vorne das incoming hat und ich bei teamspeak das hinten hab.
also müsste ich das erstmal in einheitliche form bringen.

hm ich sehe grad ich hab auch ein kleines detail übersehen was steht wenn man ipaccount mal ohne variablen übergibt. was allerdings auch logisch ist. er möchte auch einen regwx ausdruck haben wenn ich den "regelnamen" nenne. d.h. für teamspeak muss ich also:
ipaccount 15m TeamSpeak Server
(der ggf. dann direkt mit erweiterten befehlen arbeiten wie * oder so)

Trozdem danke hat mir erstmal super geholfen!!!