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.



28 Aralık 2014 Pazar

Perl ile XML dosyasından verileri parse edip HTML dosyası oluşturan basit bir script

Merhaba,

Basit bix XML dosyasından verileri alıp HTML dosyası oluşturan bir perl scripti paylaşmak istiyorum.

Öncelikle XML dosyasını alttaki şekilde fooxml.xml dosyası olarak oluşturalım.


  <config logfiles="/var/log/foologs/" debugfile="/tmp/foo.dbg" misc="mytest">
    <server name="ankara" osname="unix" osversion="2.6.5.3">
       <ipaddress>
             <address>10.1.0.101</address>
             <address>10.1.1.102</address>
       </ipaddress>
       <macaddress>
             <address>10:54:E5:12:43:A4:E2:21</address>
             <address>10:54:E5:12:45:A4:A4:41</address>
       </macaddress>
    </server>
    <server name="istanbul" osname="linux" osversion="6.6.5.3">
       <ipaddress>
            <address>10.16.0.105</address>
            <address>10.16.1.106</address>
      </ipaddress>
      <macaddress>
            <address>10:54:E5:12:43:A4:B2:31</address>
            <address>10:54:E5:12:43:E4:6Y:65</address>
      </macaddress>
    </server>
  </config>


Yukarıda gösterile XML dosyasını parse edecek scriptimizi perl ile oluşturacağız. Dosya ismi fooxmlparser.pl ve içeriği alttaki gibi olsun.



#!/usr/bin/perl

###Gerekli XML kutuphaneleri
  use XML::Simple qw(:strict);
  use Data::Dumper;

###XML dosyasini parse edip ekrana bastiralim
  my $config = XMLin("C:\\Otomasyon\\PerlXMLparser\\fooxml.xml", KeyAttr => { server => 'name' }, ForceArray => [ 'server', 'address' ]);

  print "Parse Edilecek XML Ciktisi : \n\**********\n";
  print Dumper($config);
  print "\n*************\n";

  ###Config icinde tanimli degerleri almaniz gerekirse alttakileri kullanabilirsiniz.###
  #print $config->{logdir};
  #print "\n";
  #print $config->{debugfile};
  #print "\n";
  #print $config->{misc};

###HTML dosyasina yazacagimiz degiskenlere atama yapalim

  my $srvankara="ankara";
  my $srvankaraip1 = $config->{server}->{ankara}->{ipaddress}->{address}->[1];
  my $srvankaramac1 = $config->{server}->{ankara}->{macaddress}->{address}->[1];
  my $srvistanbul="istanbul";
  my $srvistanbulip1 = $config->{server}->{istanbul}->{ipaddress}->{address}->[1];
  my $srvistanbulmac1 = $config->{server}->{istanbul}->{macaddress}->{address}->[1];
 
###HTML dosyasina yazacagimiz degiskenleri ayrica ekrana bastiralim
  print "Server : ANKARA\n\n";
  print "IP Address 1: ";
  print $config->{server}->{ankara}->{ipaddress}->{address}->[1];
  print "\n\n";
  print "MAC Address 1: ";
  print $config->{server}->{ankara}->{macaddress}->{address}->[1];
  print "\n";

  print "Server : ISTANBUL\n\n";
  print "IP Address 1: ";
  print $config->{server}->{istanbul}->{ipaddress}->{address}->[1];
  print "\n\n";
  print "MAC Address 1: ";
  print $config->{server}->{istanbul}->{macaddress}->{address}->[1];
  print "\n\n\n";
 
###HTML dosya içeriğini oluşturalım
  print "HTML Ciktisi : \n\n";
  print "<html>\n\n<meta>\n<title>XML Ciktisi</title>\n</meta>\n\n<body>\n\n<table>";
  print "\n<tr><td>".$srvankara."</td></tr>";
  print "\n<tr><td>".$srvankaraip1."</td></tr>";
  print "\n<tr><td>".$srvankaramac1."</td></tr>";
  print "\n<tr><td>".$srvistanbul."</td></tr>";
  print "\n<tr><td>".$srvistanbulip1."</td></tr>";
  print "\n<tr><td>".$srvistanbulmac1."</td></tr>\n</table>\n\n</body>\n</html>";
 
 
 
 
 
 
 

27 Aralık 2014 Cumartesi

Zabbix altyapı monitoring / izleme ürününe genel bakış

Merhaba,

Opensource bir altyapı izleme ürünü olan Zabbix i inceleyelim.

Alexei Vladishev tarafından geliştirilen vendor bağımsız bir ürün olan Zabbix networkünüzdeki geniş yelpazede iletişim, güvenlik ve sunucu sisteminin izlenmesine destek vermektedir. C ile geliştirilmiş olan ürün önyüzünde PHP kullanmaktadır.
Ürün verilerini depolamak için MySQL, PostgreSQL , Oracle, IBM DB2 ve SQLite veritabanlarını kullanabilmekteyiz.



Zabbix i bir sunucu üzerine kurmanın yanısıra virtual appliance olarak da hızlıca networkünüze dahil edip hemen kullanmaya başlayabilirsiniz. Open SUSE üzerine geliştirilmiş olan appliance altta belirtilen formatlarda bulunmaktadır.

  • vmdk (VMware/Virtualbox)
  • OVF (Open Virtualisation Format)
  • VHD (Hyper-V)**
  • CD iso
  • HDD/flash image
  • Xen guest
HTTP, SMTP, FTP, SSH vs. ve herhangi port bazlı izlemeyi ek bir yazılım kurmadan yapabilmekteyiz. Unix ve Windows sunucularda agent kurarak yada kurmadan CPU, RAM, Disk Kullanımı, Network kullanımı gibi değerleri izlemek mümkün. Agent kurulumuna alternatif olarak SNMP, TCP, ICMP kullanarak izleme yapabilmekteyiz. Ayrıca SSH, Telnet, JMX ve IPMI gibi protokoller üzerinden daha derinlemesine sorgular yaparak alınan çıktılara göre izleme yaparak olay ve alarm yönetimi yapmak mümkündür.

Üründe log rotation özelliği de mevcuttur. Zabbix ile Syslog ve log file monitoring yapılabilmekte ayrıca SNMP Trapleri alınmak sureti ile alarmlar üretilebilmektedir.

Zabbix ODBC desteklenen herhangi bir veritabanını sorgulayabilir. Bunu yapmak için Zabbix in direkt olarak veritabanına bağlanması şart değildir. ODBC arayüzü ve sürücülerini kullanması yeterlidir. Bu özellik değişik özelliklere sahip veritabanlarının daha efektif izlenmesine imkan verir.
Zabbix bu amaçla UnixODBC ve iODBC kullanmaktadır.

Daha detaylı ve akıllı izlemeler için Zabbix script monitoring imkanı sunmaktadır. İzlenen sistemde bazı scriptler çalıştırmak sureti ile üretilen çıktılar parse edilir ve yorumlanır.

Zabbix elde izlenen sistemlerden elde edilen veriler arasında matematiksel işlemler yapıp alınan çıktıları veritabanında tutabilmekte raporlayabilmekte ve alarm üretebilmektedir.

Ürün SNMP get ile herhangi OID ye ait snmp değerini belli periyodlarda sorgulamak sureti ile SNMP monitoring yapabilmektedir. SNMP v3 kullanımı ile MD5 ve DES protokolleri desteklenmektedir.

JMX monitoring özelliğini kullanarak Java uygulamalarının JMX sayaç değerlerini alabilmekteyiz. Bunun için Zapcat - JMX Zabbix Bridge en iyi çözüm olacaktır (Zabbix 1.8). Zapcat plug-in yüklemesi işlerinizi oldukça kolaylaştıracaktır. Zabbix 2.0 ile birlikte JMX monitoring default olarak Zabbix Java Gateway daemon ile birlikte gelmektedir. JMX sayaçlarının değerini almak gerektiğinde ürün Zabbix Java Gateway ile haberleşmekte ve istek JMX Management API aracılığı ile uygulamadan sorgulanmaktadır.

Zabbix ile Intelligent Platform Management Interface - IPMI desteklenen cihazların erişilebilirliği ve donanımsal özelliklerinin durumunun izlenmesi mümkündür. Bunu sağlamak için ilk kurulumunda IPMI desteği ile birlikte konfigure edilmelidir. Donanım statüsünün direkt olarak IPMI destekli kartlardan işletim sistemlerinden bağımsız olarak sorgulanmasına izin verir. Hatta bazı durumlarda makinenin açılmasına bile gerek kalmadan. HP ILO, DELL DRAC, IBM RSA ve SUN SSP gibi bu teknolojiyi desteklenen ürünler izlenebilmektedir.

Windows sistemlerde agent kurulumu ile event loglarını izlemek mümkündür. Performans counter değerleri alınabilmektedir. Servis ve Prosesleri detaylı olarak izleyebilmekteyiz.

Zabbix in network keşif / discovery özelliği alttaki bilgilere göre yapılabilir ve otomatize edilebilir.

  • IP aralıkları.
  • Servis bazlı. (FTP, SSH, WEB, POP3, IMAP, TCP, etc)
  • Zabbix agent tarafından sağlanan bilgiler.
  • SNMP destekli keşif.
Network topolojisinin keşfi desteklenmemektedir.
Ürün ile birlikte "Out-of-Box" alttaki keşif özellikleri gelmektedir.
  • File System Keşfi;
  • Network Interface Keşfi.;
  • SNMP OID Keşfi.
Zabbix probe larını network içinde değişik noktalarda konumlandırarak dağıtık bir yapıda izleme yapmak mümkündür. Zabbix probe proxy ana sunucu adına dataları toplar. Böylece tüm agent ve proxy ler tek bir merkezi Zabbix sunucusuna raporlar. Zabbix probe proxy kullanmak için alttaki maddeleri sayabiliriz;

  • Uzak noktaların izlenmesi.
  • Güvenilmez bağlantılar içeren noktaların izlenmesi.
  • Binlerce cihazın izlenmesi sırasında merkezi sunucunun yükünü hafifletmek.
  • DMZ ve izole networklerin izlenmesi. (Sadece merkezi sunucu ve proxy sunucu arasında güvenilir bağlantı sağlanması sureti ile)
Proxy kurulumu için bir TCP bağlantısı yeterlidir. Böylece Firewall lar üzerinde tek bir kural tanımlamak yeterli olacaktır.

Zabbix proxy sunucusunun kendine ait ayrı bir veritabanı bulunmalıdır. Proxy tarafından toplanan tüm data lokal olarak yerel veritabanında saklanır ve merkezi sunucuya iletilir. Böylece bağlantı sorunları nedeni ile oluşabilecek veri kayıplarının önüne geçilir.


ÖzellikProxy Tarafından Desteklenen
Items
Zabbix agent checksYes
Zabbix agent checks (active)Yes 1
Simple checksYes
Trapper itemsYes
SNMP checksYes
SNMP trapsYes
IPMI checksYes
JMX checksYes
Log file monitoringYes
Internal checksNo
SSH checksYes
Telnet checksYes
External checksYes
Built-in web monitoringYes
Network discoveryYes
Low-level discoveryYes
Calculating triggersNo
Processing eventsNo
Sending alertsNo
Remote commandsNo


[Tablo Alıntı : https://www.zabbix.com/documentation/2.0/manual/distributed_monitoring/proxies ]

Zabbix API programlanabilir arayüz ile 3rd party uygulamalar ile entegrasyon mümkündür. Ayrıca geliştireceğiniz bağımsız dashboard ekranları ve raporlarda bu API ile veri çekmek mümkün olacaktır.

API yi incelemek isterseniz : Appendixes section.

Zabbix ile oluşturulan Dashboard ekranlarını slide-show ekranları şeklinde birbiri peşisıra göstermek mümkündür.

Zabbix in görsellerine göz atalım;

Altta Network kullanımını bir grafik üzerinde görüyoruz.


Bir sistemin disk kullanım grafiği.


Kişiselleştirilmiş görsel bir ekran.








Zabbix ürününün diğer monitoring ürünleri ile karşılaştırmasını alttaki adresten inceleyebilirsiniz.

http://en.wikipedia.org/wiki/Comparison_of_network_monitoring_systems

Ürün hakkında detaylı bilgi almak için;

http://www.zabbix.com/product.php


Teşekkürler,
Cem Selmanoğulları





26 Aralık 2014 Cuma

Bir monitoring / izleme yazılımı alırken nelere dikkat edilmeli ?

Merhaba,

Bu yazımda monitoring yazılımı alınırken dikkat edilecek konulara dikkat çekmek istiyorum. Firmalar yıllar içinde çeşitli monitoring yazılımlarını denemekte ve birinden diğerine geçerek hem zaman hem de para kaybetmektedirler. Bu kayıpları azaltmak ve nokta atışı bir monitoring yazılımına sahip olmak için isterleri belirlemek çok önemlidir. Her şirketin isterleri farklılık gösterebileceği gibi tüm firmaların ortak isterleri olabilecek bazı maddeleri aşağıda belirlemeye çalıştım.

Bazı isterler monitoring araçları dışında CMDB ve Servis bazlı izleme araçlarının da projeye dahil edilmesini isteyeceği gibi hepsini biraraya toplayan ürün çözümleri de bulunmaktadır.

+İzlenen altyapıda sorun oluştuğunda otomatik olarak istenilen listeye e-posta, SMS atabilme
+Otomatik Eskalasyon
+Yeni eklenen SNMP özellikli donanımların otomatik olarak bulma
+Yetkilendirilmiş kullanıcı tanımlayabilme
+"Kişiye yada Bölüme özel Dashboard hazırlanabilmesi.
+Dashboardlarda bilgiler belli periyodlarda dinamik güncellenmeli."
+Yöneticiye özel rapor alınabilmesi
+Rootcause analiz yapabilmesi
+Detaylı event management ve korelasyon özelliklerinin olması
+Geçmişe yönelik CPU, RAM v.b. kullanımının izlenip grafiklenebilmesi.
+Sanallaştırma ortamlarının izlenmesi. VMware api entegrasyonu
+Grafik oluştururken üst üste grafik bindirme özelliğinin olması
+Servis bazlı izleme yapılabilmesi
+Servis Masası ile entegre olabilmesi. Otomatik kayıt açıp kapatabilme
+Sunucu üzerinde ismi tarihe bağlı olan bir dosyada keyword arayabilme
+Hatlarının etkin şekilde izlenebilmesi. Hat durumlarının yada hattın ucundaki cihaz
durumlarının izlenebilmesi.
+Uygulamalarla ilgili izlemelerin kolay eklenmesi
+Dinamik keşfedilen interfacelerin bandwidth değerlerinin doğru çekiliyor olması.
+CMDB ile entegre olabilmeli.
+İzlenecek her cihaz model ve versiyonu desteklemeli. Bu cihazlardan
birer örnek dashboard incelenerek doğru data geldiği tespit edilmeli.
+Belli saate planlı yada belli zaman periyodlarında çalışabilecek oto keşif yapabilmeli.
+Keşif kriterleri verilirken istenmeyen cihazlar ip, model, vendor, cihaz tipi bazlı exclude edilebilmeli.
+Kolay bir MIB yönetim arayüzü olmalı.
+Hazır raporlar dışında  mümkün olduğunca özelleştirilebilir olmalı.
+Raporlarda format değiştirilebilmeli
+Raporlara yeni sütun eklenebilmeli yada var olan sütunlar çıkartılarak özelleştirilebilmeli.
+Detaylı Availability ve Reachability raporları çıkarılabilmeli.
+Detaylı envanter raporu sunabilmeli.
+Grafiklere zoom yapma ve time windows değiştirme özelliği olmalı.
+Cihaz sayfalarına custom alanlar eklenebilmeli.
+Interface grup oluşturulabilmeli.
+Cihaz grupları oluşturulabilmeli.
+Yedekli çalışan cihazlarla ilgili korelasyonlar yapılabilmeli
+"Interface ve cihaz grupları dinamik olarak filtrelerle oluşturulabilmeli. Ör: Sysname içinde
TR1 geçen cihazlar ilgili gruba otomatik yerleşsin."
+"Dinamik harita çizebilmeli. Çizilen haritada manuel bağlantı değişikliklerine
(Ekleme-Silme) izin vermeli."
+Servis ağaçları oluşturulabilmeli. Servis ağaçlarından oluşturulacak servis görsel olarak izlenebilmeli.
+"Servis ağaçlarının içindeki her elemanın değişikliği dinamik olarak takip edilip değişiklikler
servis ağacına yansımalı."
+"Geriye dönük mümkün olduğunca bilgi tutabilmeli. En az 90 günlük veri çok detaylı sağlanabilmeli.
1-3 yıllık özet bilgi saklanabilmeli."
+"Log içinde arama yapıp belli bir kelime yakalandığında alarm üretmeli.
Bu olay incremental olmalı her taramada eğer yeni bir error kelimesi eklendiyse alarm üretmeli."
+Syslog mesajlarını alarma çevirebilmeli. Gelen mesajları parse edilebilmeli.
+NOC izlemesi için CCTV ekranları hazırlanabilmeli. Bu ekranlar belli periyodlarda güncellenebilmeli.
+Mümkünse şirket içi geliştirmeler için veritabanından bilgi çekme amaçlı webservis yada api si olmalı.
+Domain Controller izlemeye özel yetenekleri olmalı.
+Exchange i izlemeye özel yetenekleri olmalı.
+"Mümkünse APM yeteneği olmalı. Veritabanlarını izleyebilmeli. Veritabanı performansını
izleyebilmeli. Sunucu üzeri çalışan uygulamaları izleyebilmeli. Sentetik kullanıcı ile belli
olayları simule edip kontrol edebilmeli. "
+Bir hataya karşı üreyecek alarmın bir aksiyon üretebilmesi.
+Mümkünse ürün problu yapıda çalışabilmeli.
+Trending yapabilmeli.
+Ürünün kendi kendini detaylı izleme mekanizması olmalı. Kendi health check ini yapabilmeli.
+Belli bir cihaz grubuna toplu olarak izleme ayarı yapılabilmeli.
+Belli bir interface grubuna toplu olarak izleme ayarı yapılabilmeli. 
+Port izleme yapabilmeli. Availability grafikleyebilmeli.
+Ping, tracert, telnet gibi basit troubleshoot toollarını üzerinde barındırmalı.
+URL monitoring yapabilmeli.
+Isı, voltaj, kart ve modüllerin durumu gibi donanım komponentleri kontrol edilip alarm üretilmeli.
+Switchler üzerinde hangi interface üzerinde hangi sunucu olduğunu gösterebilmeli.
+SSH, WMI, SNMP polling, SNMP Trap, Syslog Trap ile izleme yapabilmeli.
+Cihazlar için response time, paket kaybı gibi bilgileri verebilmeli.
+Ürün sayfalarında menüler kişiye özel düzenlenebilmeli.
+Gereksiz email sms göndermemeli. Buna yönelik korelasyon yapılabilmeli.
+Raporları schedule olarak email atabilmeli.
+Kuracak firma 7/24 teknik destek verebilmeli. Gerektiğinde yerinde destek verebilmeli.
+LDAP entegrasyonu
+Mobil cihazlarla uyumlu arayüz.
+Failover seçeneğinin olması.
+Gerektiğinde internet üzerinden izleme için proxy tanımlanabilmesi
+Bakım modu olmalı.
+Dosya ve klasör izleme yapabilmeli.
+Windows ve Linux makinelerde servis ve prosesleri izleyebilmeli.
+Windows ve Linux makinelerde remote script çalıştırıp sonucu parse edebilmeli.
+Diskler üzerinde I/O kullanım, read-write
+Güvenlik cihazlarında VPN bağlantı sayıları
+SAN Switchleri ve depolama cihazlarını izleyebilmeli
+Vendor bağımsız izleme yapabilmeli.
+Hem network, hem sunucu, hem depolama ünitelerini izleyebilmeli

Teşekkürler,
Cem Selmanoğulları

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ı

22 Aralık 2014 Pazartesi

Altyapı Otomasyon Araçları - Puppet & Chef

Merhaba,

Bugün son zamanların popüler altyapı otomasyon araçlarından bahsetmek istiyorum. CFEngine, Bcfg2, Puppet ve Chef gibi ürünler bulut, sanal ve fiziksel ortamların otomasyonunda sıkça kullanılmaktadır




Altyapı yönetimi yapan ekiplerin işlerini rahatlatan bu ürünler son zamanlarda yazılımcıların da dikkatini çekmeye başladı. Ürünlerin yazılım projelerine de dahil edildiğini görmek mümkün. Özellikle yazılımcılar ile alt yapı yönetimi yapan uzmanlar arasında kalan bölgede bu araçların güzel işler yaptığını görüyoruz.








Bu ürünlerden benim ilgimi en çok çeken Puppet ve Chef e kısa bir bakış atmak istiyorum.

CHEF :

2009 yılından bu yana kullanılmakta olan Chef in Puppet tan etkilendiğini söylemek mümkün. Ubuntu, Debian, Rhel, Centos, Fedora, MAC OS, Windows, MS Windows Server gibi geniş bir yelpazede ürünü destekliyor. Temelde geliştirme Ruby scripting dili domaininde yapılmakta, buda Ruby bilen kişilerin Chef i kullanmasını kolaylaştırıyor. 



Birbiri ile iletişim halinde 3 modül içermektedir. Chef sunucusu, node lar ve Chef Workstation. Chef sunucusu çoklu node ortamlarını yönetebilecek konfigurasyon datası içerir.Bu konfigurasyonlar ve kaynaklar gerektiğinde node lar tarafından istenir. Chef otomasyon adımlarını içeren reçeteleri  üzerinde tutar. Birden fazla reçete (Recipe) ve şablon (Template) CookBook ları oluşturur. Kullanıcılar "Knife" ismi verilen bir CLI aracılığı ile Chef ile etkileşime geçerler.Belirlenen bir otomasyon reçetesinin bir yada çoklu node ortamına uygulanması mümkündür. Bir otomasyon reçetesi uygulanırken diğer reçeteleri de çağırarak uygulamaya koyabilir.







Alttaki çizimden anlaşılacağı üzere CookBook ları workstationda düzenleyip Knife ile Chef sunucusuna göndeririz. Chef istemcisi belli periyodlarda yapılandırma bilgilerini sunucudan alarak node lar üzerinde uyguluyor.





Chef komponentlerini detaylı listeleyecek olursak;

ComponentDescription
AttributesDescribe node data, such as the IP address and hostname.
Chef clientDoes work on behalf of a node. A single Chef client can run recipes for
multiple nodes.
Chef SoloAllows you to run Chef cookbooks in the absence of a Chef server.
CookbooksContain all the resources you need to automate your infrastructure and
can be shared with other Chef users. Cookbooks typically consist of
multiple recipes.
Data bagsContain globally available data used by nodes and roles.
KnifeUsed by system administrators to upload configuration changes to the
Chef Server. Knife is used for communication between nodes via SSH.
Management consoleChef server's web interface for managing nodes, roles, cookbooks,
data bags, and API clients.
NodeHosts that run the Chef client. The primary features of a node, from Chef's
point of view, are its attributes and its run list. Nodes are the component
to which recipes and roles are applied.
OhaiDetects data about your operating system. It can be used stand-alone,
but its primary purpose is to provide node data to Chef.
RecipeThe fundamental configuration in Chef. Recipes encapsulate collections of
resources that are executed in the order defined to configure the nodes.
Repository (Chef repository)The place where cookbooks, roles, configuration files, and other artifacts for
 managing systems with Chef are hosted.
ResourceA cross-platform abstraction of something you're configuring on a node.
For example, users and packages can be configured differently on different
OS platforms; Chef abstracts the complexity in doing this away fro
m the user.
RoleA mechanism for grouping similar features of similar nodes.
Server (Chef server)Centralized repository of your server's configuration.
[Tablo http://www.ibm.com/ sitesinden alınmıştır.]

Chef ile yapılabilecek basit bir örneği ele alacak olursak;
Networkünüzdeki tüm windows, linux, unix sunucularınız ile router ve güvenlik cihazlarınızda NTP konfiurasyonu yapmak istiyorsunuz. NTP konfigurasyonu olmayanlara eklenecek, var olanlarsa ise bu konfigurasyon yenilenecek. Bu işi Chef ile hazırlayacağınız otomasyon reçeteleri ile hızlıca halletmeniz mümkün olacaktır. Onlarca cihazdan binlerce cihaza konfiurasyon yapmak için aynı reçeteleri kullanarak hem zamandan kazanacak hem de insan kaynaklı dikkatsizlikler ile oluşabilecek hataların önüne geçeceksiniz.

Chef ile neler yapabiliriz;

Hayallerinizle sınırlı olmakla birlikte altta birkaç başlık sayabiliriz.

- Sunucu başlatma/kapatma
- Sunucu üzerine uygulama kurma
- Sunucu üzerinde uygulama yönetimi
- Sunucu üzerinde konfigurasyon yönetimi
- Sunucu envanter yönetimi
- Sunucu üzerinde şirket politikalarına uyumluluk kontrolleri
- Kurulacak uygulama öncesi ortam isterlerinin hazırlanması
- Yeni sunuculara işletim sistemi kurulumu...

PUPPET :
Puppet ın 2005 yılı civarından buyana kullanıldığını görüyoruz. Google, Oracle gibi firmalar altyapı yönetiminde bu aracı kullanmaktadır. Chef e göre daha zor bir öğrenme süreci olan Puppet çok geniş bir yelpazede işletim sistemini desteklemektedir. Kullanıcı topluluklarının Chef e göre çok daha geniş ve aktif olduğunu söylemek mümkün. 


Puppet "Puppet Master" isimli bir ana sunucuyu kullanır. Bu sunucu node lar ve gruplar arasında konfigurasyonları merkezileştirir. Örnek vermek gerekirse üzerinde Apache çalışan linux makinelerinizi Puppet Master üzerinde gruplayabilirsiniz. Puppet Agent yönetilen sistemler üzerinde çalışır. Böylece herhangi bir otomasyon işini yada konfigurasyon değişikliğini bir yada birden fazla grup içinde makinelere aynı anda uygulama şansına sahip olursunuz. 





Puppet "Facter" ismi verilen bir araca sahiptir. Facter sistem metadatasını tutar ve sunucular arasında filtrelemeye izin verir. Sunucu isimleri, işletim sistem versiyonları, modelleri, ip leri gibi...
Puppet komponentlerine göz atalım.

ComponentDescription
AgentA daemon process running on a node that collects information about the node and
sends it to the Puppet master.
CatalogCompilation of facts that specifies how to configure the node.
FactsData about a node, sent by the node to the Puppet master.
ManifestDescribes resources and the dependencies among them.
ModuleGroups related manifests (in a directory). For example, a module might define how a
database like MySQL gets installed, configured, and run.
NodeA host that is managed by the Puppet master. Nodes are defined like classes but
contain the host name or fully qualified domain name.
Puppet masterThe server that manages all the Puppet nodes.
ResourceFor example, a package, file, or service.
[Tablo http://www.ibm.com/ sitesinden alınmıştır.]

Puppet "Dependency Management" özelliğini diğer otomasyon ürünlerine göre çok daha fazla geliştirmiş ve ön plana çıkarmış bir üründür. Buda özellikle kompleks ve geniş IT altyapısı olan firmalarda özellikle altyapı yönetimi yapan ve script kullanmayı tercih mühendislerin gözünde ürünü vazgeçilmez hale getirmektedir.

Puppet ile network otomasyon işleri de yapmak mümkündür. Network ve güvenlik uzmanları çoğunlukla işlerini rahatlatmak amacı ile scripting kullanmakta fakat yaptıkları bu işleri daha organize ve tekrar kullanılabilir hale getirememektedirler. Puppet bu konuda da geniş networklerin yönetiminde uzmanlara zaman kazandırmakta ve mühendisleri yaptıkları işlerde insan hatasından uzak tutmaktadır.

Puppet ile yapılabileceklere bir örnek vermek gerekirse;

Bir bankaya ait 250 şube yönlendiricilerinde onlarca satırlık ACL düzenlemesi yapmak, yeni satır eklemek, silmek, var olan ACL satırlarında değişiklik yapmak ve bu işlemleri hatasız gerekleştirmek çok uzun bir sürece yayılacak bir projedir. Puppet ile bunu çok kısa sürede yapmanız mümkündür. Bunu yaparken yapılan konfigurasyonların test edilmesi, rollback mekanizmasının oluşturulması gibi konular da Puppet ın yetenekleri arasında olacaktır.

Puppet ile yapılabilecekleri genelleyecek olursak;

- Sunucu başlatma/kapatma
- Sunucu üzerine uygulama kurma
- Sunucu üzerinde uygulama yönetimi
- Sunucu üzerinde konfigurasyon yönetimi
- Sunucu envanter yönetimi
- Sunucu üzerinde şirket politikalarına uyumluluk kontrolleri
- Kurulacak uygulama öncesi ortam isterlerinin hazırlanması
- Yeni sunuculara işletim sistemi kurulumu
- Disk/Storage/Dosya Sistemi yönetimi
- Kullanıcı/Grup yönetimi
- Yedekleme işlemleri
- Güvenlik yönetimi

Ve daha önce de belirttiğimiz gibi hayallerinizle sınırlı pek çok otomasyon işi.


Teşekkürler,
Cem Selmanoğulları