Merhaba,
Linux makinelerde disk doluluğunu bulup belli bir yüzdenin altında ise alarm üreten bir script yazalım.
use strict;
use warnings;
use Filesys::DiskSpace;
# /log izlenecek
my $dir = "/log";
my $kritik_seviye=10;
# /log için df ciktisini alalim - burada ciktidaki tab ile ayrilmis kolonlar aliniyor - linux versiyonuna # gore degisiklik gosterebilir.
my ($fs, $fs_description, $used, $available, $filesystemused, $fmountedon) = df $dir;
# /log icin bos alan yuzdesini hesaplayalim
my $logfree = (($available) / ($available+$filesystemused)) * 100.0;
# display message
my $cikti = sprintf("$dir icin bos disk alani == %0.2f\n",$logfree);print $cikti;
if($logfree < $kritik_seviye) {
print "Alarm";
#Bu asamada email yada sms gonderilebilir
}
Teşekkürler,
Cem Selmanoğulları
Yazılım Geliştirme. Otomasyon. Web & Mobil Yazılım Geliştirme. WebServis & RestApi Uygulamaları. Sunucu ve Network Otomasyon Yazılımları.
alarm etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
alarm etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
2 Ocak 2015 Cuma
23 Aralık 2014 Salı
Bir hata durumunda Alarm üreten, email atan script - (Alarm Clear özelliği ile birlikte)
Merhaba,
PERL ile basit bir monitoring uygulaması yazalım.
Bu uygulama linux makineye ssh ile bağlansın. Bir script çalıştırarak bu scriptin çıktısında içinde Alarm geçen satırlar olması durumunda email atsın. Çıktıdaki Alarm kelimeleri yok olduğunda ise hata düzeldi şeklinde email atsın.
Bunun için Perl ün Net::SSH2 kütüphanesini kullanıyoruz.
Linux makineye ssh ile bağlandıktan sonra ilgili scripti çalıştırıp çıktıyı alıyor ve işlemlerimize alttaki scriptteki açıklamalar ile devam ediyoruz.
Burda script kendi makinenizde çalışmakta ve uzaktaki makineye ssh ile bağlanmakta ve komut gönderip çıktısını alıp yine kendi makinenizde çıktıyı işlemektedir.
PERL ile basit bir monitoring uygulaması yazalım.
Bu uygulama linux makineye ssh ile bağlansın. Bir script çalıştırarak bu scriptin çıktısında içinde Alarm geçen satırlar olması durumunda email atsın. Çıktıdaki Alarm kelimeleri yok olduğunda ise hata düzeldi şeklinde email atsın.
Bunun için Perl ün Net::SSH2 kütüphanesini kullanıyoruz.
Linux makineye ssh ile bağlandıktan sonra ilgili scripti çalıştırıp çıktıyı alıyor ve işlemlerimize alttaki scriptteki açıklamalar ile devam ediyoruz.
Burda script kendi makinenizde çalışmakta ve uzaktaki makineye ssh ile bağlanmakta ve komut gönderip çıktısını alıp yine kendi makinenizde çıktıyı işlemektedir.
#!/usr/bin/perl -w
use Net::SSH2;
use warnings;
use strict;
no warnings 'uninitialized';
my $host = "192.168.10.1";
my $user = "myuser";
my $password = "mypassword";
my $ssh = Net::SSH2->new();
### SSH ile yukarıdaki ip adresine bağlanılır
if(!$ssh->connect($host)){
print("SSH Baglantisi Saglanamadi - $@ \n");
exit(1);
}
if(!$ssh->auth_password($user,$password)){
print("Kullanici Otantikasyon Sorunu - $@");
exit(1);
}
### Script çıktısı ve alarmları yazmak için Alarms.txt ve output.txt dosyaları oluşturulur.
my $myfilepath = "C:\\Otomasyon\\Alarms.txt";
unlink $myfilepath;
$myfilepath = "C:\\Otomasyon\\output.txt";
unlink $myfilepath;
my $output;
### showlines.pl scripti ssh bağlantısı üzerinden çalıştırılır ve çıktısı output a alınır.
my $channel = $ssh->channel();
$channel->shell();
my @output;
my $r=0;
print $channel ("showlines.pl\n");
@output=$channel->READLINE();
print @output;
$channel->close;
$ssh->disconnect;
print scalar @output;
for($r=0; $r < (scalar @output);$r++){
print $output[$r]."\n";
}
### Alınan çıktı output.txt dosyasına yazılır
open (MYFILE, '>> C:\Otomasyon\output.txt');
for($r=0; $r < (scalar @output);$r++){
print MYFILE $output[$r]."\n";
}
close (MYFILE);
my $old_alarm_state = 0;
my $line="";
### Her kontrolde bir önceki kontrolde alınan alarmların sayıları ToplamAlarmSayisi.txt dosyasında tutulur
### Burada bir önceki kontrolde kaç alarm olduğu çekilir
open (MYFILE, 'C:\Otomasyon\ToplamAlarmSayisi.txt');
while (<MYFILE>) {
chomp;
$line = $_;
$old_alarm_state = $line;
}
my $alarm_state = 0;
my $alarms="";
### Yeni kontrolde kaç alarm olduğu ve hangi satırlarda alarm olduğu çekilir
open (MYFILE, 'C:\Otomasyon\output.txt');
while (<MYFILE>) {
chomp;
$line = $_;
if($line=~ m/Alarm/ || $line=~ m/alarm/ || $line=~ m/ALARM/){
$alarm_state++;
$alarms = $alarms.$line."\n";
} else { }
}
### Yeni alarm sayısı ToplamAlarmSayisi.txt dosyasına yazılır. Böylece bir sonraki kontrolde kullanılacak.
open (MYFILE, '> C:\Otomasyon\ToplamAlarmSayisi.txt');
print MYFILE $alarm_state;
close (MYFILE);
### Eğer en az 1 alarm alındı ise Alarms.txt dosyasına alarm olan satırlar eklenir.
if($alarm_state!=0) {
open (MYFILE, '>> C:\Otomasyon\Alarms.txt');
print MYFILE $alarms;
close (MYFILE);
open (MYFILE, '> C:\Otomasyon\ToplamAlarmSayisi.txt');
print MYFILE $alarm_state;
close (MYFILE);
}
### Eski alarm sayısı sıfırdan büyük (yani eskiden alarm vardı). Yeni alarm sayısı sıfır ise alarm temizlendi demektir. Mailler temizlendi şeklinde Clear mesajı atılır.
if($old_alarm_state!=0 && $alarm_state==0) {
print "\n\nAlarm Temizlendi - Mail Gonderildi \n\n";
system("wscript C:\\Otomasyon\\alarmtemizlendi.pl "."\"".$alarms."\"");
}
### Eski alarm sayısı ve yeni alarm sayısı sıfır ise Alarm yok demektir ve mail atılmaz
### Eski alarm sayısı ve yeni alarm sayısı eşit ise bir değişiklik yok demektir email atılmaz
### Eski alarm sayısı sıfır ve yeni alarm sayısı en az 1 ise yeni alarm geldi demektir mail atılır.
### Eski alarm sayısı sıfırdan fazla ise ve yeni alarm sayısı eski alarmsayısından en az 1 fazla ise yeni bir ### alarm geldi demektir. Mail atılır.
if($old_alarm_state==0 && $alarm_state==0) {
print "\n\nAlarm YOK >>>> Mail Gonderilmedi \n\n";
} elsif($old_alarm_state==$alarm_state) {
print "\n\nDurum Degisikligi Yok >>>> Mail Gonderilmedi \n\n";
} elsif($old_alarm_state==0 && $alarm_state!=0) {
print "\n\nYeni Alarm Olustu >>>> Hic Alarm Yoktu - Yeni Alarm Geldi";
system("wscript C:\\Otomasyon\\alarmmailigonder.pl "."\"".$alarms."\"");
} elsif($old_alarm_state!=0 && $alarm_state>$old_alarm_state) {
print "Daha Once Alarm Vardi >>>> Ek Alarm Satiri Geldi";
system("wscript C:\\Otomasyon\\alarmmailigonder.pl "."\"".$alarms."\"");
}
Teşkkürler,
Cem Selmanoğulları
Kaydol:
Kayıtlar (Atom)