Use um roteador Cisco como sensor de temperatura para um armário de dados ou sala.

Já passei por momentos em que você pode não ter sensor remoto de temperatura em um armário de dados ou sala de dados, mas você precisa saber se está ficando muito quente. Certos roteadores e equipamentos Cisco possuem sensores de temperatura integrados que podem ser consultados via SNMP para obter os valores que estão detectando.

Em um lugar em que trabalhei, tínhamos alguns roteadores Cisco 7204VXR em alguns locais dos quais eu podia pesquisar e obter dados de temperatura. Abaixo está um script perl que escrevi para pesquisar os dados de temperatura e enviar um e-mail se a sala ultrapassou o limite definido.

#!/usr/bin/perl -w
use strict;
use Net::SNMP;
use Mail::Mailer;
use POSIX;

my $OID_ciscoEnvMonTemperatureStatusDescr = '1.3.6.1.4.1.9.9.13.1.3.1.2.1';
my $OID_ciscoEnvMonTemperatureStatusValue = '1.3.6.1.4.1.9.9.13.1.3.1.3.1';

my $lfile = "/var/log/pdrtempchk.log";
my $ldate = strftime "%H:%M:%S - %m/%d/%Y", localtime;

my ($session, $error) = Net::SNMP->session(
-hostname => shift || 'enter the router FQDN or IP',
-community => shift || 'enter the SNMP RO Community String',);

if (!defined $session) {
printf
"ERROR: %s.n", $error;
exit 1;
}

my $result1 = $session->get_request(-varbindlist => [ $OID_ciscoEnvMonTemperatureStatusDescr ],);
my $result2 = $session->get_request(-varbindlist => [ $OID_ciscoEnvMonTemperatureStatusValue ],);

if (!defined $result1) {
printf
"ERROR: %s.n", $session->error();
$session
->close();
exit 1;
}

if (!defined $result2) {
printf
"ERROR: %s.n", $session->error();
$session
->close();
exit 1;
}

my $ctemp = $result2->{$OID_ciscoEnvMonTemperatureStatusValue};
my $temp = ((($ctemp * 9)/5)+32);

open OUT
, ">>", $lfile or die "Cannot open $lfile for writing!!!nn";
print OUT "$ldate: ";
printf OUT
"The measured temperature for %s is %s degrees Fahrenheit from the %s.n", $session->hostname(), $temp, $result1->{$OID_ciscoEnvMonTemperatureStatusDescr};

if ($temp > 95) {
print "Temp: $tempn";

my $server = "Enter your mail server FQDN or IP";
my @to = ('email@address1.com','email@address2.com');

my $mess = "Primary Data Room Overtemp - $temp degrees Fahrenheit as of $ldate";

foreach (@to) {
my $mailer = Mail::Mailer->new('smtp', Server => $server);
$mailer
->open( { From => 'tempmon@yourdomain.com',
To => $_,
Subject => "Primary Data OVERTEMP Alert" } );
print $mailer $mess;
$mailer
->close;
}

}

close OUT
;
$session
->close();

exit 0;

Você terá que verificar se o seu equipamento específico pode retornar essas informações para você via SNMP e os OIDs podem mudar dependendo da marca e do modelo do equipamento.

Robert Maxwell