otomasyon etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
otomasyon etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

7 Temmuz 2015 Salı

Riverbed SteelCentral AppResponse 6000 [Opnet] ile network&uygulama analiz ve troubleshoot

Merhaba,


Bu yazımda uzun zamandır takip ettiğim ve yakınlarda inceleme fırsatı bulduğum Riverbed SteelCentral AppResponse 6000 bahsetmek istiyorum.

Network ve uygulama performansını izleyip, analiz ve troubleshoot etmek için kullanılan gerçekten başarılı bir ürün. Kapsamlı son kullanıcı deneyimi sunan ürün, uygulama ve network performansını analiz eden mühendislerin hayatını kolaylaştırıyor. Piyasada bu işi yaptığını iddia eden pekçok ürün bulunmakta. Riverbed bu konuda iddia etmekten bir adım öteye geçiyor ve nokta atışı sorun tespiti yapabiliyor. Networkünüzdeki tıkanıklıkları, darboğazları, performans problemlerinin kaynaklarını başarılı bir şekilde bulabiliyor. İşin güzel tarafı bu sorunların network yada uygulama kaynaklı olması farketmiyor. Bu anlamda uygulamacılar ile network uzmanları arasında uzun zaman süren çatışmalara da son veriyor. Ürün networkünüzdeki herhangi bir problemin hangi uygulama ve servisleri etkilediğini bulabiliyor. Böylece network mühendislerinin, problem son kullanıcıya ulaşmadan proaktif bir yaklaşımda bulunabilmesine izin veriyor.

Networkler son 15 yılda büyük değişime uğramış durumda. Networkü sadece router ve switchlerden oluşan bir altyapı olarak değerlendirmek artık pek de doğru bir yaklaşım olarak görülmüyor. Sanallaştırma, mobil cihazlara geçiş, uygulamaların web tabanlı dönüşümünün yaygınlaşması gibi konular networklerin yönetilmesini büyük ölçüde zorlaştırıyor. Forrester in yaptığı araştırmalara göre performans kaynaklı problemlerin %30 gibi azımsanmayacak bir kısmının çözülmesi minimum bir ay gibi zaman alıyor. Bir kısmıda hiçbir zaman tespit edilip çözülemiyor.
Network yönetimlerinin karşılaştığı bu problemlerin nedeni sahip olunan ürünlerin bazı yaklaşımları doğru olarak sergileyememesi olarak görülüyor. Bir NPM (Network Performance Manager) yada son kullanıcı deneyimi sunan ürün kullanıyor iseniz; Sahip olunan ürün monitoring ve torubleshooting arasında bağlantı kurabiliyor mu ? Uygulama performansı perspektifine sahip mi ? Son kullanıcı perspektifine sahip mi ? Manuel korelasyonlara ihtiyaç duyuyor mu ? gibi soruları kendinize sormanız gerekiyor. Riverbed'in ürünü bu sorulara çok net cevaplar verebileceğiniz bir yaklaşım sunuyor.

2012 yılında Riverbed in satın aldığı Opnet NPM & APM çözümlerinin kombinasyonu ile gerçekten vageçilmez bir ürün haline gelmiş durumda.



Borsa İstanbul firması network bölümünde Baş Uzman olarak çalışmakta olan Elektronik ve Haberleşme Mühendisi Sn. Kamber Aydın ürün ile ilgili sorularımızı cevapladı.

AppResponse 6000 ürününün yetenekleri nelerdir ?

Ürün network datasını toplayıp yorumlamaktadır. Ana amacı son kullanıcı deneyimi ile tespitlerde bulunarak derinlemesine analiz imkanı sunmaktır. Ürün şaşırtıcı biçimde datayı tek noktadan toplayarak nokta atışı tespitler yapmaktadır. Aynı paketleri discard eden deduplication mekanizmasına sahiptir. Topladığı paketlerden network ve sistem gecikmesini çıkarır. Riverbed ile yaptığımız işi ANPM (Application Specific Network Performance Management) olarak isimlendirebiliriz. 

Neden Riverbed AppResponse 6000 ürününü tercih ettiniz ?

Sorun anında troubleshoot amaçlı kullandığımız ürünler vardı. Biz bunun bir adım ötesine geçerek networkü devamlı izleyen ve aynı zamanda geriye dönük analizler de yapabileceğimiz bir araç arayışındaydık. Amacımız kritik noktaların sürekli olarak derinlemesine izlenmesi idi. Ürünün bu isteklerimizi detaylı olarak karşıladığını gördük. Oldukça kullanıcı dostu ekranlara sahip ürünün özelleştirilebilir arayüzü de bizi oldukça etkiledi. Ürünün Box ürün olması bizim için ayrıca bir tercih nedeni. Sunucular üzerine kurulan uygulamalar yüksek trafikte verimli çalışmayabiliyordu. Paket kaybı yada performans problemleri yaşanıyordu. İki adet 10G interface e sahip ürün donanım olarak oldukça iyi iş çıkarıyor.

AppResponse 6000 ürünü networkteki latency, jitter gibi olayları yakalayabiliyor mu ?

0,000000001 saniye hassasiyetle tespit yapabiliyor.


Ürün hayatınızda neleri kolaylaştırdı ?

Hızlı problem çözümü imkanı yanısıra sadece sorun anında değil devamlı ve geriye dönük olarak da kritik noktaları takip etme imkanı sağladı.

Ürünü networkünüzde nasıl konulandırdınız ?

Networkümüde oluşturduğumuz bir aggregator layer üzerinde izlenecek noktalardan gelen dataları toplamakta ve ürüne göndermekteyiz. Bunun için bir aggregator switch kullanmaktayız. Dataları yönlendirmek için ise Tap kullanımı ve mirroring yapmaktayız. Ürünün uygulama arayüzü ise bir dashboard server üzerinden yayın yapmaktadır.

Ürün diğer ürünler ile entegre olabiliyor mu ?

Ürün DataFeed, Trap, dashboard inser yöntemleri ile diğer ürünler ile entegre olabilmektedir. 

Üründe geliştirme yapılabiliyor mu ?

Evet Python ile yapılabiliyor.

Riverbed in tanıdığı ve derinlemesine izleyebildiği protokollere örnek verebilir misiniz ?

HTTP, Fix, Ftp, SSH, DB gibi birçok protokol izlenebilmekte. Yeni bir protokolü de ürüne tanıtmak mümkün. Ayrıca key sağlandığı taktirde https de izlemek mümkün.

Riverbed izlediği bir hattan geçen veriye parse ederek belli bir paterne uygun veriyi yakalayabilir mi ?

Evet. Örnek vermek gerekirse; geçen data içinde "Login Failed" yakaladığında alarm üretebilir.

Ürünün event, incident ve alarm yönetimi var mı ?

Evet. Dashboard üzerinde izlenebilir, sms ve email gönderebilir. Treshold belirlenebilir. TCP data izlenerek connection reset, reject, retransmit ler yakalanıp belli bir treshold geçildiğinde alarm üretebilir. 3rd party araçlar ile entegre olup besleme yapabilir.

Riverbed ile çözdüğünüz sorunlara örnek verebilir misiniz ?

Bir üyemiz yavaşlık problemi yaşamakta fakat WAN hatları incelendiğinde bir sıkıntı olmadığı görülmekteydi. WAN'da kayıp bulunmamaktaydı. Üye sadece belli bir uygulamada sorun yaşıyordu. Riverbed sorunun network kaynaklı olmadığını ve sunucudaki bir prosesin yüksek cpu tüketimine neden olduğunu net bir şekilde gösterdi. Daha derine indiğimizde ürünün Nagle ve Delayed Ack konularında da latency yapan cihazları tespit edebildiğini gördük.

Ürünü seçerken hangi kriterler etkili oldu ?
  • Firma ve personel yetkinliği (Sertifikalar, Referanslar, Deneyimler, vb.)
  • Sistem fiziksel özellikleri ve kapasitesi
  • Çözüm bileşenlerinin tek vendordan olması
  • HTTP&HTTPS analiz yeteneği
  • Ağ paketleri üzerinden kritik verileri gösterebilme yeteneği
  • L4-L7 analiz kapasitesi
  • Band genişliği değişiminin etkisinin simülasyonu
  • Dashboard ve özelleştirme özellikleri
  • Çeşitli protokolleri analiz ve yeni protokoller için özelleştirebilme yeteneği
  • Microburst analiz yeteneği
  • Paketlerin data kısmında istenen alanları parse edebilme yeteneği

Riverbed AppResponse 6000 ürününü tavsiye eder misiniz ?

Kesinlikle...

Teşekkürler,
Cem Selmanoğulları

29 Aralık 2014 Pazartesi

UC4 Automic ve Puppet ile Otomasyon

Merhaba,

UC4 Automic ve Puppet altyapı otomasyon ürünlerinin birlikte kullanımı ile ilgili basit bir örneği kabaca şekillendirmeye çalışacağım.

Sabah saat 3:00 AM. Herkes uykuda. Aklınıza çılgın bir web projesi fikri geliyor. Uyku tutmuyor, hemen bir domain almalı ve projeye başlamalı...

Müşteri olarak siz istediğiniz domain ismi ve sunucu özelliklerini belirtmelisiniz ve sonrasında tek yapacağınız kredi kartı bilgilerinin sağlanması olmalı. Akabinde 20 dakika gibi kısa bir sürede sunucunuz ve domaininizin hazır olduğuna dair bir email ve sms alacak ve sitenizi yayınlamaya başlayacaksınız.

Nasıl ? Çok mu hızlı ? Eskiden 3 gün süren işlemlere göre gayet hızlı diyebiliriz.

Üstelik insan kaynaklı hatalar ve birşeylerin unutulması riskinden uzak.

Arka planda bunu kim yapıyor ? Tabiki UC4 ve Puppet gibi entegre çalışan otomasyon sistemleri.

Puppet güçlü bir altyapı otomasyonu sunarken işin workflow tarafını UC4 Automic hallediyor.

Bahsettiğim senaryonun workflow unu alttaki gibi şekillendirmek mümkün.

Kabaca belirttiğim Automic ve Puppet adımlarını detaylandırmak mümkün.


UC4 Automic tüm adımları paralel yada seri çalışacak şekilde sıralıyor ve belli koşullara ve önşartlara göre başka adımları tetikliyor. Bu tetiklenen adımlar Automic üzerinde yeni bir iş olabileceği gibi birçok işi içeren başka flowlar da olabilir. Gerekli durumlarda ise altyapı otomasyonunu üstlenen Puppet devreye giriyor ve kendine düşen görevleri tamamlayarak Automic in bir sonraki adımına hazır hale getiriyor.

Bu işleri yaparken, her iş bittikten sonra işin düzgün tamamlanıp tamamlanmadığını tespit eden adımları da Puppet yada Automic scriptleri ile yaparak Automic job larını beslemek mümkün.



23 Aralık 2014 Salı

NOC için Dashboard geliştirmesi - PHP - Perl - RestAPI

Merhaba,

Telekom hatları, şubeleri ve backbone cihazlarını tek sayfada izlemek isteyen bir müşterim için hazırladığım Dashboard'ı sizlerle paylaşmak isterim. Tamamen canlı bir dashboard ve arkasında ayrıca bir alarm mekanizmasına da sahip.

Uzun yıllar monitoring ve otomasyon işi yapmış biri olarak müşterilerin aldıkları ürünlerden hiçbir zaman tam performans alamadıklarını gördüm. Yüzbinlerce dolarlık ürünler yüzlerce karmaşık işi yapıyor fakat müşterinin istediği bazı şeyleri yapamıyordu. Müşteri hayalinde bir dashboard canlandırıyor ve networkünü bu şekilde izlemek istiyordu. Fakat ürünler bunu sağlayamadığı için hem müşteri tarafında memnuniyetsizlik oluşuyor, hem de projeyi yapan firmanın yetkinliği sorgulanıyordu.

Enterprise seviyede bir monitoring ürününü entegre ederken büyük bir firmada yine benzer bir sorunla karşılaştım. Müşteri büyük paralar karşılığında aldığı ürünü ile gelen dashboardları beğenmiyor ve istediği şekilde bir dashboard oluşturamamamıza anlam veremiyordu.

Müşteriden tam olarak istediği Dashboard ı kağıt kalem alıp çizmesini ve bana birkaç gün müsade etmesini istedim. Çizime göre bunu sadece elimdeki ürünle yapamayacağım aşikardı. İşte bu benim için yeni bir meydan okumaydı. Öncelikle monitoring ürününün API sini araştırdım. Ürün RestAPI interface ine sahipti ve istediğim pekçok veriyi (up-down, cpu high, interface down) gibi alarm verilerini bu arayüzden almam mümkündü. Tüm şube routerları ve backbone cihazları ile ilgili pek çok bilgiyi RestAPI ile alabilecektim.

Telekom hatları ile ilgili ise kendim bir pinger uygulaması yazmayı planladım. Dashboard ın yayınlanacağı sunucuda ayrıca birçok pinger uygulaması çalışacak ve telekom hatlarının ucundaki çeşitli cihazları pingleyerek hatların durumunu kontrol edecekti. Ayrıca gerekli durumlarda email ve sms atacaktı. Bunları da Perl ile yazmaya karar verdim.

Sıra Dashboard ekranın hazırlanmasına gelmişti. Bunu ise PHP ve HTML ile dizayn etmek çocuk oyuncağı idi. Sonuç itibari ile Perl, PHP, Html, Javascript, RestAPI birleşimi ile müşterinin hayallerinin de üstünde herşeyi izleyebileceği bir dashboard geliştirilmişti.

Dashboard, hem monitoring uygulamasından hem de perl ile yazdığım scriptlerden besleniyor ve 30 ar saniyelik aralıklarla kendini güncelliyordu.

Fikir olması açısından 4 ekrandan oluşan Dashboard ekranlarından birini paylaşmak isterim.

Alttaki ekran sıfırdan geliştirilmiş olup monitoring uygulamasından herhangi bir ekran yada görsel alınmamıştır.





Teşekkürler,
Cem Selmanoğulları


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.


#!/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ı

25 Haziran 2014 Çarşamba

Otomasyon Örnekleri - 1

Merhaba,

Yaptığım otomasyon işlerinden bazı örnekleri "Otomasyon Örnekleri" yazı dizisinde paylaşmaya çalışacağım.

450 tane şubesi olan bir şirket, şubelerindeki switchlere Juniper Routerlar bağlıyor. Fakat switchlerin hangi portuna bağladıkları bilgisini girmiyorlar. Bir süre sonra bazı özel konfigurasyonlar yapılacağında bu envanter kaydı eksikliği büyük probleme neden oluyor.

Amaç Juniper routerların switchin hangi portunda olduğunu öğrenmek, ilgili porta description olarak Juniper bağlantısını yazmak ve switch üzerinde port bazlı bazı tanımlar yapmak. 450 şubenin hepsini ziyaret etmek zor... Her switche tek tek bağlanıp bakmak zor.

Yazdığımız script perl ssh kütüphanelerini kullarak cihazlarla ssh bağlantısı kurmaktadır. Bir for döngüsü ile 450 tane şube switchine sıra ile bağlanmakta ve her switchte alttaki işleri yapmaktadır. Birkaç saat içinde otomatik olarak iş bitmektedir.

Switche bağlanan script mac adreslerini listeleyecek komutu çalıştırır. Tüm mac adreslerini aldıktan sonra Juniper e özel mac adresini aradan çeker. Bilindiği üzere her Vendor a özel bir mac adresi başlığı bulunmaktadır. 48 bitlik mac adreslerinin ilk 24 biti vendorlara aittir. Dolayısı ile switch üzerinde 1 adet Juniper cihaz olduğu için 1 adet Juniper mac adres olacaktır.

Mac tablosuna bakıldığında ilgili Junper mac adresinin hangi port üzerinden geldiği görünecektir. İşte bu interface Juniper router ın bağlı olduğu interfacedir. Interface bulunduğuna göre script ile gönderilecek komutlarla istenen konfigurasyonlar yapılır. Bu işlem 450 cihaz için tekrar eder ve kısa sürede tamamlanır.

Bir yada birkaç kişinin günlerce switchlere bağlanarak yapacağı bir işi çok kısa sürede başarmış oluyorsunuz.

Teşekkürler,
Cem Selmanoğulları

16 Haziran 2014 Pazartesi

Ping monitor (Perl Script)

Merhaba,

Basit bir ping monitor nasıl yazılır, görelim.

Genelde tercihim perl script dilidir. Diğer dillerde de yazmak mümkündür.
Perl kütüphanelerini kullanabilir yada kendimiz de direkt olarak yazabiliriz.
Öncelikli olarak perl Net::Ping kütüphanesinin kullanımını görelim.

5 adet ip adresine ping attırıp sonucu almaya çalışalım.

Bu 5 ip adresi pinglenecek sonuç ekrana bastırılacak. Ayrıca C:\ipsonuclari.txt isimli dosyaya yazılacak.

Öncelikle 5 ip adresini bir dizide toplayacağız. Sonrasında bu dizi içinde bir for döngüsü ile dönüp her ip adresini pingleyeceğiz.

  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::Ping;
  4. my $ip1 = "10.1.1.1";
  5. my $ip2 = "10.1.1.2";
  6. my $ip3 = "10.1.1.3";
  7. my $ip4 = "10.1.1.4";
  8. my $ip5 = "10.1.1.5";
  9. my $ip_durum = "";
  10. my @array = ($ip1,$ip2,$ip3,$ip4,$ip5);
  11. foreach (@array) {
  12.     my $ipadres = $_; 
  13.     chomp($ipadres);
  14.     print $_."\n"
  15.     my $p = Net::Ping->new(icmp);
  16.     if($p->ping($ipadres)) {
  17.         print "BASARILI";
  18.         $ip_durum = $ip_durum." ".$ipadres.":OK ";
  19.     } else {
  20.     print "BASARISIZ";
  21.     $ip_durum = $ip_durum." ".$ipadres.":BASARISIZ ";
  22.     }
  23. }
  24. print $ip_durum;
  25. my $dosyasil = "C:\\ipsonuclari.txt";
  26. unlink $dosyasil;
  27. open(MYFILE, '>> C:\\ipsonuclari.txt');
  28. print MYFILE $dosyasil
  29. close (MYFILE);

Buradaki önemli noktalardan birisi new(icmp); fonksiyonunun çalışabilmesi için bu scriptin hem icmp paketleri göndermeye hem de gelen cevapları dinlemeye iznimizin olmasıdır.
Aksi takdirde ping atılamayan bazı ip ler ayakta gibi görünecektir.

Teşekkürler,
Cem Selmanoğulları