par bobyII » 12 Mai 2004 11:38
Salut,
j'ai déja fait ca avec PERL et la librairie qui va bien (net::snmp).
(Et sous windows, avec vbs et WMI)
En fait, tu peux faire une page en PERL/CGI qui collecte les infos a la demande. Le plus souX, c'est de trouver la bonne information. Utilise un explorateur SNMP qui te permet de voir ou est ton info.
__________________________________________________________________
- "Explorateur" SNMP sous windows : snmputlg.exe et getif (il doit y en avoir une tétrachié sous linux)
- je te balance un script que j'ai fait y a pas mal de temps ... je ne sais pas si ca va te servir.
#!c:\perl\bin\perl.exe
#################################################
# #
# Recupération des taux d'occupation disk #
# VIA SNMP #
# #
#################################################
#################################
# Récupération des params #
# externes #
#################################
# determine le nom des serveurs #
open(NOMS,"../ServeursExchange.lst");
while(<NOMS>){
chomp($_);
$NomCourt=(split(/:/,$_))[0];
$Domaine=(split(/;/,$_))[2];
push(@NomsServeurs,$NomCourt);
$NomsReseauxServeurs{$NomCourt}="$NomCourt\.$Domaine";
}
close(NOMS);
#################################
# Initialisation #
#################################
use Net::SNMP qw(oid_lex_sort DEBUG_ALL);
$FicResult="../alertes/UsageDisk.txt";
#$BaseOIDDisk.NumArg.NumDisk
#NumArg = (3=Nom avec label et serial , 4=TailleBlock, 5=EspaceTotal, 6=EspaceUtilisé)
$BaseOIDDisk=".1.3.6.1.2.1.25.2.3.1";
@Disk=("C","D");
$MaxLoop=50;
#################################
# Récupération des données #
#################################
foreach $Host (@NomsServeurs){
%ResultatWalk=SnmpWalk($Host,"$BaseOIDDisk\.3");
foreach (sort keys %ResultatWalk){
$Nom = (split(/:/,$ResultatWalk{$_}))[0];
foreach $Disk (@Disk){
if($Disk eq $Nom){
$CurrentNumDisk=(split(/\./,$_))[-1];
#
$TailleBlock=SnmpGet($Host,"$BaseOIDDisk\.4\.$CurrentNumDisk");
if($TailleBlock == 0){next;}
$EspaceTotal=SnmpGet($Host,"$BaseOIDDisk\.5\.$CurrentNumDisk");
$EspaceUsed=SnmpGet($Host,"$BaseOIDDisk\.6\.$CurrentNumDisk");
#
$Occupation = int(($EspaceUsed*100) / $EspaceTotal) +1;
$$Host{$Nom}=$Occupation;
}
}
}
}
#################################
# Inscription dans FicResult #
#################################
open(RESULT,">$FicResult");
foreach $Host (@NomsServeurs){
$CurrentLigne="";
foreach (keys %$Host){
$CurrentLigne=$CurrentLigne."$_=$$Host{$_};";
}
print RESULT "$Host:$CurrentLigne\n";
}
close(RESULT);
#################################
# Fonctions #
#################################
#variables dans @_
#Usage : SnmpGet($Host,$Oid);
#uniquement pour une communitée public
sub SnmpGet{
my $Host=$NomsReseauxServeurs{$_[0]};
my $Oid=$_[1];
push(@Oid,$Oid);
#Overture de session
$Session=Net::SNMP->session( -hostname => $Host );
#Recupération de la donnée (GET)
$Session->get_request( -varbindlist => \@Oid);
#Récupération du résultat
my $Result = $Session->var_bind_list()->{$Oid};
#Fermeture session
$Session->close();
#
return $Result;
}
#
sub SnmpWalk{
my $Host=$_[0];;
my $Oid=$_[1];
$OldOid=$Oid;
#Overture de session
$Session=Net::SNMP->session( -hostname => $Host );
#Recupération des données
while($Oid ne ""){
@Oid=($Oid);
$Session->get_next_request( -varbindlist => \@Oid);
foreach (keys(%{$Session->var_bind_list()})) {
$Resultat = $Session->var_bind_list()->{$_};
if($CurrentLoop <= $MaxLoop and /$OldOid/){
$Oid=$_;
$Resultat{$_}=$Resultat;
}
else{$Oid="";}
}
}
#Fermeture session
$Session->close();
#
return %Resultat;
}
#
sub SnmpGetNext{
my $Host=$_[0];;
my $Oid=$_[1];
@Oid=($Oid);
#Overture de session
$Session=Net::SNMP->session( -hostname => $Host );
#Recupération de la donnée (GET)
$Session->get_next_request( -varbindlist => \@Oid);
#Récupération du résultat
foreach (keys(%{$Session->var_bind_list()})) {
$Resultat = $Session->var_bind_list()->{$_};
}
#Fermeture session
$Session->close();
#
return $Resultat;
}
#
___________________________________________________________________