728x90
반응형
대부분의 네트워크 장비에서는 콘솔로 작업을 할 수 있도록 ssh, telnet 등의 접속을 지원하고 있다. 가장 많이 이용되는 SAN 스위치 중의 하나인 브로케이드(EMC) 의 SAN 스위치에서는 switchstatusshow 명령을 통해서 장비의 상태를 확인할 수 있는데, SwitchState 항목을 체크하면 장비의 전체적인 상태를 알아볼 수 있다. 여기에서는 간단하게 Telnet 으로 접근하여 해당 항목이 HEALTHY 인지 여부에 따라서 정상이 아니면, 담당자에게 문자를 보낼 수 있다록 해보았다.
Ruby 에서도 한번 구현해보려고 했는데, 신형 장비(EMC)에는 잘 접속이 되었으나, 구 장비(Brocade)에는 로그인이 제대로 성공하지 못했다.
#!perl
# ------------------------------------------------------------------------------
# SAN 스위치 장애 체크 (Telnet)
# ------------------------------------------------------------------------------
# (1) SAN 스위치의 Telnet에 연결하여, switchstatusshow 명령의 결과에 따라서
# HEALTHY 가 아니면 장애로 간주하고 담당자에게 문자메시지를 보낸다.
#
# (2) 하루에 1번 작동한다.
#
# Perl Version : 5.16.2
#
# Normal Status ----------------------------------------------------------------
# SwitchState: HEALTHY
# ------------------------------------------------------------------------------
use 5.016;
use strict;
use warnings;
use diagnostics;
use Net::Telnet;
use DBI;
# ------------------------------------------------------------------------------
sub send_sms {
my $msg = shift(@_);
my $dsn = "DBI:ODBC:Driver={SQL Server};Server=서버주소;Database=데이터베이스이름";
# 아레오 SMS 의 경우
my $sql = "insert arreo_sms ( CMP_MSG_ID,
CMP_USR_ID,
WRT_DTTM,
RCV_PHN_ID,
CALLBACK,
SND_DTTM,
SND_MSG ,
SND_PHN_ID,
RSRVD_ID )
values ('011' + CONVERT(varchar, GETDATE(), 12) + REPLACE(CONVERT(varchar, GETDATE(), 14), ':', '') + SUBSTRING(CONVERT(VARCHAR, RAND(), 109), 3, 2),
'00000',
CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 8), ':', ''),
'01055551234',
'01055554321',
CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 8), ':', ''),
'$msg',
'ADMIN',
'ADMIN' ) ";
my $dbh = DBI->connect($dsn, '아이디', '비밀번호') || die $DBI::errstr;
$dbh->do($sql);
$dbh->disconnect;
}
# ------------------------------------------------------------------------------
my %devices = ( "SAN_SW1", "172.16.0.21",
"SAN_SW2", "172.16.0.22",
"SAN_SW3", "172.16.0.23",
"SAN_SW4", "172.16.0.24", );
foreach my $device_key (keys %devices) {
my $tn = new Net::Telnet (Host => $devices{$device_key}, Timeout => 5, Prompt => '/> /');
$tn->login("아이디", "비밀번호");
my @lines = $tn->cmd("switchstatusshow");
foreach my $line (@lines) {
if ($line =~ /SwitchState/) {
my $msg = "";
if ($line =~ /HEALTHY/) {
$msg = "$device_key : Normal";
# send_sms($msg);
} else {
$msg = "$device_key : Error";
send_sms($msg);
}
say $msg;
}
}
$tn->close();
}
728x90
반응형
'Programming > Perl' 카테고리의 다른 글
(Perl) MojoExample 이용해서 사이트 만들기 (0) | 2014.05.01 |
---|---|
(Perl) Hitachi Storage 장애 체크 (Web) (0) | 2013.03.14 |
Perl : 모듈 관리 (0) | 2012.11.05 |
Perl : StrawberryPerl 에서 PAR::Packer 설치하기 (0) | 2012.05.14 |
perl 스크립트를 통한 해킹 사고 (0) | 2011.06.23 |
댓글