Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
SNMP

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Netzwerk
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
[bKa]_J.J.



Anmeldungsdatum: 14.04.2004
Beiträge: 4

BeitragVerfasst am: 13. Dez 2004 9:51   Titel: SNMP

Hi @all ,

also ich weiss ja nich ob das hier der richtige Ort ist, aber man kanns ja mal probieren.
Also, ich hab n Perlscript geschrieben, welches das SNMP-Protokoll benutzt um z.B. die Prozessorauslastung eines beliebigen Hosts in einem Netzwerk auszulesen.
Jetzt hab ich das Problem dass wenn der Host ein Windowsrechner ist funktioniert alles wunderbar , wenn dort aber nun Linux läuft erhalte ich einen Fehler .
Kann es evtl. sein das die besagte Prozessorauslastung unter Linux eine andere OID hat als unter Windows, und wenn ja welche !!???

Achso, wems hilft, hier is mal der Quelltext:


#!/usr/bin/perl -w

use SNMP::Multi;
use DBI;
use DBD::mysql;
require ("pm/variables.pm");

&variables();
my @ips1=("192.168.0.101", "192.168.0.1", "192.168.0.100");
&snmp_data();

#=============================================================================================================================

# Datenbankverbindung öffen
sub database_open {
$snmpmulti_connect="DBI:mysql:$database";
$snmpmulti_dbhandle = DBI->connect("$snmpmulti_connect","$sqluser","$sqlpass", {RaiseError => 1, AutoCommit => 1}) or die "Database connection not made:$DBI::errstr";
}


# SQL und Datenbankverbindung beenden
sub database_close {
$snmpmulti_sql->finish();
$snmpmulti_dbhandle->disconnect();
}


# prüfen ob SNMP Protokoll installiert ist
sub snmpcheck_agent {

$snmp_check = $_[0];
if(system ("snmpget -c public $snmp_check 1.3.6.1.2.1.1.1.0 -v2c >/dev/null") eq "0"){
return ("on");
}
else{
return ("off");
}
}


# SNMP Daten sammel und Datenbank füllen
sub snmp_data {

&database_open();
foreach (@ips1){
$snmp_aktip=$_;
if (&snmpcheck_agent($snmp_aktip) eq "on"){
my $snmp_req = SNMP::Multi::VarReq->new (
nonrepeaters => 2,
hosts => [ $snmp_aktip ],
# sysDescr hrProcessorLoad ifDescr
vars => [ [ '1.3.6.1.2.1.1.1' ], [ '1.3.6.1.2.1.25.3.3.1.2' ], [ '1.3.6.1.2.1.2.2.1.2' ],
# ifSpeed ifInOctet ifOutOctets
[ '1.3.6.1.2.1.2.2.1.5' ], [ '1.3.6.1.2.1.2.2.1.10' ], ['1.3.6.1.2.1.2.2.1.16'] ]
);
die "VarReq: $SNMP::Multi::VarReq::error\n" unless $snmp_req;
my $snmp_sm = SNMP::Multi->new (
Method => 'bulkwalk',
MaxSessions => 32,
PduPacking => 16,
Community => 'public',
Version => '2c',
Timeout => 5,
Retries => 3,
UseNumeric => 1,
)
or die "$SNMP::Multi::error";
$snmp_sm->request($snmp_req) or die $snmp_sm->error;
my $snmp_resp = $snmp_sm->execute() or die "Execute: $SNMP::Multi::error\n";
@snmp_gotlist=();
for my $snmp_host ($snmp_resp->hosts()) {
for my $snmp_result ($snmp_host->results()) {
if ($snmp_result->error()) {
print "Error with $snmp_host: " .$snmp_result->error() ."\n";
next;
}
for my $snmp_varlist ($snmp_result->varlists()) {
push (@snmp_gotlist,map {$_->fmt()} @$snmp_varlist);
}
}
}
@snmp_sysdescr=();
@snmp_load=();
@snmp_ifdescr=();
@snmp_ifspeed=();
@snmp_ifin=();
@snmp_ifout=();
@snmp_mac=();
foreach (@snmp_gotlist){
$snmp_one = $_;
$snmp_two = $_;
$snmp_three = $_;
$snmp_four = $_;
$snmp_five = $_;
$snmp_six = $_;
if ($snmp_one =~ /(sysDescr)/){
$snmp_one =~ s/\r|\n//gs;
$snmp_one =~ /(".+")/;
$snmp_one = $1;
$snmp_one =~ s/"//gi;
push (@snmp_sysdescr, $snmp_one);
}
if($snmp_two =~ /(hrProcessorLoad)/){
$snmp_two =~ /(".+")/;
$snmp_two = $1;
$snmp_two =~ s/"//gi;
push (@snmp_load, $snmp_two);
}
if($snmp_three =~ /(ifDescr)/){
$snmp_three =~ /(".+")/;
$snmp_three = $1;
$snmp_three =~ s/"//gi;
push (@snmp_ifdescr, $snmp_three);
}
if($snmp_four =~ /(ifSpeed)/){
$snmp_four =~ /(".+")/;
$snmp_four = $1;
$snmp_four =~ s/"//gi;
push (@snmp_ifspeed, $snmp_four);
}
if($snmp_five =~ /(ifInOctets)/){
$snmp_five =~ /(".+")/;
$snmp_five = $1;
$snmp_five =~ s/"//gi;
push (@snmp_ifin, $snmp_five);
}
if($snmp_six =~ /(ifOutOctets)/){
$snmp_six =~ /(".+")/;
$snmp_six = $1;
$snmp_six =~ s/"//gi;
push (@snmp_ifout, $snmp_six);
}
}

$snmp_a="0";
foreach(@snmp_sysdescr){
if(defined @snmp_sysdescr){
$snmp_mac_temp1 = `snmpwalk -c public $snmp_aktip 1.3.6.1.2.1.2.2.1.6 -v2c`;
@snmp_mac = split (/\n/,$snmp_mac_temp1);
foreach (@snmp_ifdescr) {
$snmp_mac_temp2 = $snmp_mac[$snmp_a];
$snmp_mac_temp2 =~ /(G:.+)/;
$snmp_mac_temp2 = $1;
$snmp_mac_temp2 =~ s/(G: )//gi;
if ($snmp_mac_temp2 eq ""){
$snmp_mac_temp2="[unknown]";
}

$snmpmulti_sql = $snmpmulti_dbhandle->prepare("SELECT sid FROM $table5 WHERE status=1");
$snmpmulti_sql->execute();
@snmp_jo=$snmpmulti_sql->fetchrow_array;
if (defined $snmp_jo[1]) {
die "ERROR";
}
if(defined $snmp_load[0]) {
$snmpmulti_sql = $snmpmulti_dbhandle->prepare("INSERT INTO $table6(ip, sysdescr, cpuload, ifdescr, ifspeed, ifin, mac, ifout, owner_pid, owner_sid) VALUES ('$snmp_aktip', '$snmp_sysdescr[0]', '$snmp_load[0]', '$snmp_ifdescr[$snmp_a]', '$snmp_ifspeed[$snmp_a]', '$snmp_ifin[$snmp_a]', '$snmp_mac_temp2', '$snmp_ifout[$snmp_a]', $$, '$snmp_jo[0]')");
$snmpmulti_sql->execute();
$snmp_a++;
}
else {
$snmpmulti_sql = $snmpmulti_dbhandle->prepare("INSERT INTO $table6(ip, sysdescr, cpuload, ifdescr, ifspeed, ifin, mac, ifout, owner_pid, owner_sid) VALUES ('$snmp_aktip', '$snmp_sysdescr[0]', '[unknown]', '$snmp_ifdescr[$snmp_a]', '$snmp_ifspeed[$snmp_a]', '$snmp_ifin[$snmp_a]', '$snmp_mac_temp2', '$snmp_ifout[$snmp_a]', $$, '$snmp_jo[0]')");
$snmpmulti_sql->execute();
$snmp_a++;
}
}
}
}
}
else {
$snmpmulti_sql = $snmpmulti_dbhandle->prepare("SELECT sid FROM $table5 WHERE status=1");
$snmpmulti_sql->execute();
@snmp_jo=$snmpmulti_sql->fetchrow_array;
$snmp_error="[unreachable]";
$snmpmulti_sql = $snmpmulti_dbhandle->prepare("INSERT INTO $table6(ip, sysdescr, cpuload, ifdescr, ifspeed, ifin, mac, ifout, owner_pid, owner_sid) VALUES ('$snmp_aktip', '$snmp_error', '$snmp_error', '$snmp_error', '$snmp_error', '$snmp_error', '$snmp_error' ,'$snmp_error', $$, '$snmp_jo[0]')");
$snmpmulti_sql->execute();
next;
}
}
&database_close();
}


Gruß und danke schon im Vorraus

Jens
 
Benutzer-Profile anzeigen Private Nachricht senden

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 13. Dez 2004 9:59   Titel:

Du brauchst einen Demon, der auf die Anfragen reagiert.

http://www.die.net/doc/linux/man/man8/snmpd.8.html
 
Benutzer-Profile anzeigen Private Nachricht senden

[bKa]_J.J.



Anmeldungsdatum: 14.04.2004
Beiträge: 4

BeitragVerfasst am: 13. Dez 2004 10:52   Titel:

Hey,

natürlich läuft der daemon, aber unter Linux wird wohl offensichtlich die "hrProzessorLoad" (1.3.6.1.2.1.25.3.3.1.2) OID nicht unterstützt. Meine Frage ist eigendlich nur ob die OID unter Linux evtl. eine Andere ist als unter Windows.

Gruß

Jens
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Netzwerk Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy