nagios-plugin-couchbase, iki yıl önce Necdet Yücel'in düzenlediği Yakından Eğitim ile ortaya çıktı. Bu projeyi Kaan'ın danışmanlığında geliştirdim. Daha önce kullanmadığım Nagios, Couchbase'i kullanmam ve NoSQL kavramlarını öğrenmem bakımından oldukça faideli bir proje olmuştu :).
Projeye ilk başladığımız zamanlar geliştirimi Couchbase 2.0 üzerinde yapıyordum. Şimdi Couchbase 2.x serisi kararlı halde ve 3.0'ın beta aşamasındalar. Ben de eklentiyi güncelledim ve artık Couchbase 2.x ile uyumlu diyebiliyorum :).
Eklentiye birkaç yama gönderilmişti onları aldım, bir de her güncellemede yeniden .cfg oluşturması uzun sürmesin diye örnek bir dosya ekledim. Bu arada proje aynı zamanda nagios-exchange'de de yer alıyor ^_^.
Bu projeyi geliştirmemi sağlayan Yakından Eğitim ekibine teşekkürler.
couchbase etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
couchbase etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
2 Nisan 2015 Perşembe
23 Temmuz 2013 Salı
Yakından Eğitim Projem Nagios Exchange'de Yer Aldı
Nagios Exchange Nagios için yazılan belgeler, eklentiler, Nagios ile birlikte çalışan uygulamaların yer aldığı resmi sistesi. Kaan ile birlikte üzerinde çalıştığım Yakından Eğitim projesi olan nagios-couchbase-plugin'in Nagios Exchange'de yer alması için dün istekte bulundum ve bugün Nagios Exchange'den proje kabul edildi maili aldım :)
Eklenti eğer resmi sayfada yer alırsa daha çok kullanılır ve daha yararlı olur diye düşündüm. Projenin linkine buradan ulaşabilirsiniz.
Eklenti eğer resmi sayfada yer alırsa daha çok kullanılır ve daha yararlı olur diye düşündüm. Projenin linkine buradan ulaşabilirsiniz.
Etiketler:
couchbase,
gezegen,
nagios,
yakindanegitim
3 Temmuz 2013 Çarşamba
Vagrant, Chef Solo, Chef Server ile Sunucu Yönetimi
Bu yaz stajı 2 sistem yöneticisinin yanında yapıyorum. Öğreneceğim teknolojiler de gene sunucu bakımı, yönetimi üzerine olacak. Şuan çok fazla bilmediğim kavram olduğu için bir süreyi kavramları öğrenmeye, temel bir kaç deneme yapmaya ayırdık. Kullanmam gereken şeyler arasında tek bildiğim şey Ruby, kullanacağım diğer her şeyi ben de daha önce kullanmadım. Zaten on tane makine açayım onları yapılandıran betikler yazayım gibi bir düşüncesi olmuyor insanın durup dururken :)
Dün Kaan kendi kullandıkları teknolojilerden bahsetti. Yeni duyduğum, öğrendiğim şeyler karşısında verdiğim standart tepki olarak "insanlar biliyorlar, insanlar yapıyorlar" oldu :)
Çalışmaya önce Vagrant ile başladım. Vagrant sanal makine açarken istediğimiz özellikleri daha rahat verebildiğimiz bir araç. Örneğin ram ayarlarını bir Vagrantfile içerisinden makineyi ilk oluştururken yapabiliyoruz. Komut satırından yönetim yaptığımız için hızlı.
Chef solo kullanımı ilk Vagrantfile içerisinden yaptım. Vagrantfile içerisinden çalıştırılması gereken cookbookları tanımlayabiliyoruz. Bu şekilde Chef sunucusu, Chef istemcisi gibi konulara bakmadan temel bir cookbook çalışmasını ve dosyalarını inceleyebiliriz. Cookbooklar ise Chef'teki makinelerin nasıl çalışacağının adımları tanımlayan dosyalardan oluşuyor. Biraz Couchbase cookbookunun kodunu incelemiştim. Burada temel bir cookbook yapmışlar. Çalıştırıp denemedim henüz ama belgesinde Couchbase kurulumu ve yapılandırması sağladığı yazıyor, ama Couchbase'de yapılan diğer işlere destek vermiyor. Cookbooklar da temel olarak aşağıdaki işlemler sağlanabiliyor:
1) Düğüm (node) üzerindeki temel ayarlar
2) Dosya dağılımları
3) Versiyon kısıtlamaları, desteklediği platformlar
4) Recipes dizini içerisindeki dosyaların hangi tarife göre çalıştırılacağı
Cookbooklarda karşımıza çıkan kavramlardan kaynaklar (resources) ve sağlayıcı (provider) ise şu şekilde: Kaynaklar, Chef farklı görevler için çalışırken (paket yükleme, dosya sistemine erişme, servis çalışabilir durumda mı, hangi kullanıcı, hangi grup için, dosyaların nereye kopyalanacağı gibi) hangi sağlayıcının kullanılacağını söyler. Çünkü her kaynak bir sağlayıcı ile ilişkilendirilmiştir. Sağlayıcı ise bu çalışma işlemlerini sağlar. Yani sağlayıcı, kaynaktaki adımları tanımlar. Örneğin paket yüklemesinde "apt_package" kaynağı apt kullanan sistemler için yükleme yapar, bu kaynağın yapabileceği işlemler ise install, remove, upgrade gibi "action" kavramı olarak tanımlı. Bu temel örnekteki gibi cookbooklar içerisinde istediğimiz işlemleri sırayla işletebiliriz.
Chef ise sunucuları yerleştirmeyi yönetmeyi sağlayan bir alt yapıdır ve bu yönetim cookbooklar ile sağlanır. Her makinenin kendi platformuna uygun ve isteniyorsa aynı özelliklere sahip olması sağlanır. Chef'te kullanılan kavramlar ise sunucu, çalışma alanı, ve düğümler.
Çalışma alanı denilen kavram cookbookların konumudur. Ve her düğüm ihtiyaçlarına göre bir Chef istemcisi içerir.
Son olarak knifedan da bahsedeyim. Knife, Chef üzerinde işlem yapmak için kullanılan bir araç. Chef sunucusu kurulumunu ve kullanımını kolaylaştırıyor. Ben ilk olarak Chef'i depodan indirip yapılandırmak istedim, ancak İşbaran karşı çıktı, ben biraz direndim, derken knife ile kurulum sağladık. Çünkü knife ile kurulum gerçekten daha kolay oluyormuş. Bize kurulum sırasında çeşitli seçenekler sunuyor, ve dosyaları gerekli yerlere kendisi kopyalıyor.
Dün Kaan kendi kullandıkları teknolojilerden bahsetti. Yeni duyduğum, öğrendiğim şeyler karşısında verdiğim standart tepki olarak "insanlar biliyorlar, insanlar yapıyorlar" oldu :)
Çalışmaya önce Vagrant ile başladım. Vagrant sanal makine açarken istediğimiz özellikleri daha rahat verebildiğimiz bir araç. Örneğin ram ayarlarını bir Vagrantfile içerisinden makineyi ilk oluştururken yapabiliyoruz. Komut satırından yönetim yaptığımız için hızlı.
Chef solo kullanımı ilk Vagrantfile içerisinden yaptım. Vagrantfile içerisinden çalıştırılması gereken cookbookları tanımlayabiliyoruz. Bu şekilde Chef sunucusu, Chef istemcisi gibi konulara bakmadan temel bir cookbook çalışmasını ve dosyalarını inceleyebiliriz. Cookbooklar ise Chef'teki makinelerin nasıl çalışacağının adımları tanımlayan dosyalardan oluşuyor. Biraz Couchbase cookbookunun kodunu incelemiştim. Burada temel bir cookbook yapmışlar. Çalıştırıp denemedim henüz ama belgesinde Couchbase kurulumu ve yapılandırması sağladığı yazıyor, ama Couchbase'de yapılan diğer işlere destek vermiyor. Cookbooklar da temel olarak aşağıdaki işlemler sağlanabiliyor:
1) Düğüm (node) üzerindeki temel ayarlar
2) Dosya dağılımları
3) Versiyon kısıtlamaları, desteklediği platformlar
4) Recipes dizini içerisindeki dosyaların hangi tarife göre çalıştırılacağı
Cookbooklarda karşımıza çıkan kavramlardan kaynaklar (resources) ve sağlayıcı (provider) ise şu şekilde: Kaynaklar, Chef farklı görevler için çalışırken (paket yükleme, dosya sistemine erişme, servis çalışabilir durumda mı, hangi kullanıcı, hangi grup için, dosyaların nereye kopyalanacağı gibi) hangi sağlayıcının kullanılacağını söyler. Çünkü her kaynak bir sağlayıcı ile ilişkilendirilmiştir. Sağlayıcı ise bu çalışma işlemlerini sağlar. Yani sağlayıcı, kaynaktaki adımları tanımlar. Örneğin paket yüklemesinde "apt_package" kaynağı apt kullanan sistemler için yükleme yapar, bu kaynağın yapabileceği işlemler ise install, remove, upgrade gibi "action" kavramı olarak tanımlı. Bu temel örnekteki gibi cookbooklar içerisinde istediğimiz işlemleri sırayla işletebiliriz.
Chef ise sunucuları yerleştirmeyi yönetmeyi sağlayan bir alt yapıdır ve bu yönetim cookbooklar ile sağlanır. Her makinenin kendi platformuna uygun ve isteniyorsa aynı özelliklere sahip olması sağlanır. Chef'te kullanılan kavramlar ise sunucu, çalışma alanı, ve düğümler.
Çalışma alanı denilen kavram cookbookların konumudur. Ve her düğüm ihtiyaçlarına göre bir Chef istemcisi içerir.
Son olarak knifedan da bahsedeyim. Knife, Chef üzerinde işlem yapmak için kullanılan bir araç. Chef sunucusu kurulumunu ve kullanımını kolaylaştırıyor. Ben ilk olarak Chef'i depodan indirip yapılandırmak istedim, ancak İşbaran karşı çıktı, ben biraz direndim, derken knife ile kurulum sağladık. Çünkü knife ile kurulum gerçekten daha kolay oluyormuş. Bize kurulum sırasında çeşitli seçenekler sunuyor, ve dosyaları gerekli yerlere kendisi kopyalıyor.
Etiketler:
chef,
chef server,
chef solo,
cookbook,
couchbase,
gezegen,
ruby,
vagrant,
vagrantfile
27 Haziran 2013 Perşembe
Nagios plugin to monitor Couchbase
I've created CouchBase plugin for Nagios. I used Python for plugin. I put plugin in Github. You can access here. Nagios Plugin Couchbase is available under the GPLv3. Your suggestions and feedbacks will be valued and highly appreciated.
Nagios plugin couchbase supply to monitor a lot of summary statistics:
Cache miss ratio, creates per second, disk read, high and low watermark, set per second, memory usage, operations per second.. etc.
You can monitor vbucket resources with option "--vbucket". You can see all option using "--help" parameter and you should read from Readme for more information about usage. And a screenshot:
Nagios plugin couchbase supply to monitor a lot of summary statistics:
Cache miss ratio, creates per second, disk read, high and low watermark, set per second, memory usage, operations per second.. etc.
You can monitor vbucket resources with option "--vbucket". You can see all option using "--help" parameter and you should read from Readme for more information about usage. And a screenshot:
Etiketler:
couchbase,
nagios,
python,
yakindanegitim
6 Haziran 2013 Perşembe
Yakından Eğitim Projemde Son Durum
Üzerinde çalıştığım Yakından Eğitim projesi olan Couchbase'i Nagios üzerinden izlemek için yaptığım eklentide geçen haftadan bu yana eksiklerin büyük kısmını kapattım. Sınav haftam nedeniyle danışmanımdan izin almıştım. Zaten final dönemi sıkıştırdığından 10 gün daha proje bitirme süresi uzatıldı.
Eklentiyi ilk şuan master dalında bulunan haliyle yayınlamıştım. Ordaki hali sorguyu sadece düğüm (node) seviyesinde yapıyordu ve Couchbase üzerindeki daha az özelliği kontrol ediyordu. Bu hafta githubda yapmam gereken bulabildiğim özellikleri ekledim. Ayrıca Rest Api kullanarak sorguları küme (cluster) seviyesinde yapılmasını da sağladım. Deb ve Rpm paketleri için bir alt yapı hazırlayıp, proje Readme'sini oldukça genişlettim. Eklenti web arayüzünden kullanılabildiği çıktılar konsolda ekranada dökülebildiği için "--help" ile çalıştırıldığında parametrelerinin açıklamasının görülmesini sağladım ve bir de uygulama için man sayfası hazırladım. En son dün kodu PEP 8 ile uyumlu hale getirdim.
Aslında projenin devel dalındaki hali bile şuan alınıp kullanılabilir durumda. Hatta bu hafta master ve devel dallarındaki halini alıp deneye bir kaç arkadaş projeye yönelik geri bildirimde bulundu. Oldukça mutlu oldum bu duruma. Projeyi buradan alıp deneyebilirsiniz hata bildirimi, özellik ekleme gibi geri bildirimlerde bulunulursa da oldukça mutlu olurum :)
Eklentiyi ilk şuan master dalında bulunan haliyle yayınlamıştım. Ordaki hali sorguyu sadece düğüm (node) seviyesinde yapıyordu ve Couchbase üzerindeki daha az özelliği kontrol ediyordu. Bu hafta githubda yapmam gereken bulabildiğim özellikleri ekledim. Ayrıca Rest Api kullanarak sorguları küme (cluster) seviyesinde yapılmasını da sağladım. Deb ve Rpm paketleri için bir alt yapı hazırlayıp, proje Readme'sini oldukça genişlettim. Eklenti web arayüzünden kullanılabildiği çıktılar konsolda ekranada dökülebildiği için "--help" ile çalıştırıldığında parametrelerinin açıklamasının görülmesini sağladım ve bir de uygulama için man sayfası hazırladım. En son dün kodu PEP 8 ile uyumlu hale getirdim.
Aslında projenin devel dalındaki hali bile şuan alınıp kullanılabilir durumda. Hatta bu hafta master ve devel dallarındaki halini alıp deneye bir kaç arkadaş projeye yönelik geri bildirimde bulundu. Oldukça mutlu oldum bu duruma. Projeyi buradan alıp deneyebilirsiniz hata bildirimi, özellik ekleme gibi geri bildirimlerde bulunulursa da oldukça mutlu olurum :)
27 Mayıs 2013 Pazartesi
Rest Api ve cbstats kullanarak CouchBase'den Bilgi Çekme
Bu hafta Nagios CouchBase eklentisinde eksik kalan kısımları tamamladım. Vbucket resources, disk queues gibi diğer alanlar eksikti. Ancak eklemem gereken yerlerin bir kısmını bulamadım. Couhcbase'den bu istatistikleri alabilmek için şuan "cbstats" komutunu kullanıyorum. En başta Rest api ile istatistikleri alırken daha sonra Rest Api ile bu istatistiklerin büyük bir kısmını bu şekilde alamayacağımı düşünüp "cbstats" kullanmaya başladım. Madem cbstats kullanıyorsam tüm bilgiyi onula çekeyim diye tüm kodu cbstats ile kullanılabilecek hale getirdim.
cbstats ile bilgi çekme şu şekilde:
./cbstats ip:11220 all -b bucket_name
"all" dediğimde bucket için olan tüm bilgiyi döndürüyor. İlgili alanı string üzerinde oynayarak elde ediyorum.
cbstats kullanmaya karar verdiğim akşam cbstats çıktısını nasıl anlamlandırıp hangi alan, web arayüzündeki değere karşılık geliyor diye nasıl bulacağımı düşünürken şunu fark ettim. cbstats komutunda değerler "vb_active_ops_update", "delete_hits" şeklindeki stringlere karşılık gelen değerler şeklinde dönüyor. Web arayüzünde de bilgisini çekmek istediğim alanın üzerine fare ile gelince ilgili alanın hangi değerler üzerinde işlem yapılarak hesaplandığı yazıyordu. Bunu bir kaç durum için kontrol edince cbstatsın değerleri byte olarak döndürdüğünü ve arayüzdeki belirtilen değerlerden bu sonuçların elde edildiğine emin oldum. Zaten "cache_miss_ratio" değerini kontrol etmeyi eklentiye ekleyecekken coucbase listesinde "cache_miss_ratio" nun hesaplanma şeklinin web arayüzünde fare ile üzerine gelince hesaplanan değerlerden oluştuğunu görünce emin oldum. Aslında hangi alanın cbstats'ın hangi çıktısına geldiği belgesinde de yazılı ancak hepsi yazılmış değil.
Bu haftaki eksikleri tamamlamak için baktığımda ise eksik kalan istatistikleri "cbstats" ile hesaplatamadığımı fark ettim. Aslında bir cevap dönüyor geriye ancak bu web arayüzünde gördüğümden farklı ve olması gerektiği değere nasıl dönüştüreceğimi bulamadım ve bu her istatistik için geçerli değil. Bazılarında durum bu şekilde. Listede Rest api kullanarak tüm istatistikleri bulabileceğimin önerilmesi ile birlikte Rest apide dönen değerler için bazı istatistik değerleri web arayüzündekinin aynısı. Ancak direkt arayüzdekinin aynısı bilgi döndüğü için, dönen değer gb mı, mb mı bilemiyorum. Bu iyi bir şey değil. Çünkü ben eklentiye birim bilgiside eklesem iyi olur :) Ve Rest api kullanarak da gene cbstats da olduğu gibi dönen değeri web arayüzdeki biçime dönüştüremiyorum. Çok bir şey değişmedi aslında bu durumda. Yani eklemem gereken istatistik bilgisi için bir cevap bulabiliyorum ancak webdeki ile aynı biçimde olmuyor. Bu durum cbstatsda da böyleydi. Muhtemelen yanlış bilgi dönmüyor ancak Rest apide elde ettiğim cevaplarda bir dizi içinde aynı değer 43 kere yazıyor gibi bir durum var. Ve webdeki bilgi ile aynı değil. Bu bilgiyi webdeki gibi anlamlı şekle nasıl dönüştürebilirim diye listede sordum. Ancak henüz cevap alamadım ve CouchBase belgesinde de bu yazılı değil, başka kaynak da bulamıyorum açıkçası.
Ben en başta Rest api ile bir çok bilgi eksik kalıyor zannettim dediğimde Rest apide dönen cevapta "streaming uri" gibi kısımlar var. Buradaki uri bilgisiyle bir kez daha http request isteğinde bulunduğumda ilgili alanları elde edebiliyorum. Bu istek için olan uri ise şu şekilde:
"ip:8091/pools/default/buckets/test_bucket/stats/vb_active_num"
Aslında burada son kısımda belirtilen "vb_active_num" alanı bilgisine "cbstats" ile de ulaşabiliyorum. Bu uri ile "vb_active_num" bilgisine ulaşacağımı
ip:8091/pools/default/buckets/default/statsDirectory
urisini kullanarak elde ediyorum. En başta cbstats ile arayüzde hesaplanan değerleri elde edebileceğimi bilmeden de buraya ulaşamazdım aslında.
Son olarak web arayüzde belirtilen "summary" kısmını eksiksiz olarak eklentiye ekledikten sonra projeyi paketleme ve belge yazma kısmına geçmeme karar verdik.
cbstats ile bilgi çekme şu şekilde:
./cbstats ip:11220 all -b bucket_name
"all" dediğimde bucket için olan tüm bilgiyi döndürüyor. İlgili alanı string üzerinde oynayarak elde ediyorum.
cbstats kullanmaya karar verdiğim akşam cbstats çıktısını nasıl anlamlandırıp hangi alan, web arayüzündeki değere karşılık geliyor diye nasıl bulacağımı düşünürken şunu fark ettim. cbstats komutunda değerler "vb_active_ops_update", "delete_hits" şeklindeki stringlere karşılık gelen değerler şeklinde dönüyor. Web arayüzünde de bilgisini çekmek istediğim alanın üzerine fare ile gelince ilgili alanın hangi değerler üzerinde işlem yapılarak hesaplandığı yazıyordu. Bunu bir kaç durum için kontrol edince cbstatsın değerleri byte olarak döndürdüğünü ve arayüzdeki belirtilen değerlerden bu sonuçların elde edildiğine emin oldum. Zaten "cache_miss_ratio" değerini kontrol etmeyi eklentiye ekleyecekken coucbase listesinde "cache_miss_ratio" nun hesaplanma şeklinin web arayüzünde fare ile üzerine gelince hesaplanan değerlerden oluştuğunu görünce emin oldum. Aslında hangi alanın cbstats'ın hangi çıktısına geldiği belgesinde de yazılı ancak hepsi yazılmış değil.
Bu haftaki eksikleri tamamlamak için baktığımda ise eksik kalan istatistikleri "cbstats" ile hesaplatamadığımı fark ettim. Aslında bir cevap dönüyor geriye ancak bu web arayüzünde gördüğümden farklı ve olması gerektiği değere nasıl dönüştüreceğimi bulamadım ve bu her istatistik için geçerli değil. Bazılarında durum bu şekilde. Listede Rest api kullanarak tüm istatistikleri bulabileceğimin önerilmesi ile birlikte Rest apide dönen değerler için bazı istatistik değerleri web arayüzündekinin aynısı. Ancak direkt arayüzdekinin aynısı bilgi döndüğü için, dönen değer gb mı, mb mı bilemiyorum. Bu iyi bir şey değil. Çünkü ben eklentiye birim bilgiside eklesem iyi olur :) Ve Rest api kullanarak da gene cbstats da olduğu gibi dönen değeri web arayüzdeki biçime dönüştüremiyorum. Çok bir şey değişmedi aslında bu durumda. Yani eklemem gereken istatistik bilgisi için bir cevap bulabiliyorum ancak webdeki ile aynı biçimde olmuyor. Bu durum cbstatsda da böyleydi. Muhtemelen yanlış bilgi dönmüyor ancak Rest apide elde ettiğim cevaplarda bir dizi içinde aynı değer 43 kere yazıyor gibi bir durum var. Ve webdeki bilgi ile aynı değil. Bu bilgiyi webdeki gibi anlamlı şekle nasıl dönüştürebilirim diye listede sordum. Ancak henüz cevap alamadım ve CouchBase belgesinde de bu yazılı değil, başka kaynak da bulamıyorum açıkçası.
Ben en başta Rest api ile bir çok bilgi eksik kalıyor zannettim dediğimde Rest apide dönen cevapta "streaming uri" gibi kısımlar var. Buradaki uri bilgisiyle bir kez daha http request isteğinde bulunduğumda ilgili alanları elde edebiliyorum. Bu istek için olan uri ise şu şekilde:
"ip:8091/pools/default/buckets/test_bucket/stats/vb_active_num"
Aslında burada son kısımda belirtilen "vb_active_num" alanı bilgisine "cbstats" ile de ulaşabiliyorum. Bu uri ile "vb_active_num" bilgisine ulaşacağımı
ip:8091/pools/default/buckets/default/statsDirectory
urisini kullanarak elde ediyorum. En başta cbstats ile arayüzde hesaplanan değerleri elde edebileceğimi bilmeden de buraya ulaşamazdım aslında.
Son olarak web arayüzde belirtilen "summary" kısmını eksiksiz olarak eklentiye ekledikten sonra projeyi paketleme ve belge yazma kısmına geçmeme karar verdik.
Etiketler:
cbstats,
couchbase,
nagios,
rest api,
yakindanegitim
13 Mayıs 2013 Pazartesi
Nagios Couchbase Eklentisinin Canlı Demosu Hazır
Bu dönem Kaan ile birlikte üzerinde çalıştığım Yakından Eğitim projesi olan Nagios Couchbase eklentisinin bu hafta büyük bir kısmını tamamladık, ve demosunu hazırladık. Uygulamanın çalışır halini web arayüzünden "testuser" kullanıcı adı ve "password" parolası ile "http://54.234.80.73/nagios3/" linkinden görebilirsiniz. Kullanıcı adı ve parolamızla sisteme girdikten sonra şöyle bir arayüzle karşılacağız:
Sol köşede "Current Status" kısmındaki "Services" bölümüne tıkladıktan sonra nagios kullanarak izlediğimiz servisleri görebiliriz.
Nagios CouchBase Plugin diğer yaptığım projeler gibi bir özgür yazılım projesi ve GPL ile lisansladık. Uygulamanın kaynak koduna buradan bakabilir ve alıp kullanabilirsiniz. Gördüğünüz hataları, eksikleri, tavsiyelerinizi almaktan da oldukça memmun oluruz.
Bir kaç hafta içerisinde de CouchBase'den çekilmesi gereken diğer bilgilerle birlikte, daha fazla test etme, kod iyileştirme gibi kısımlarıda yaptıktan sonra projeyi bitirmiş olacağım.
Sol köşede "Current Status" kısmındaki "Services" bölümüne tıkladıktan sonra nagios kullanarak izlediğimiz servisleri görebiliriz.
Burada sistemin kendi üzerindeki kullanıcı sayısı, http servisi, ssh gibi çalışan süreçleri dışında benim CouchBase'den bilgi çekerek izlemimizi sağladığım özellikler de var. CouchBase, nagios ile aynı makine üzerine kurulu olduğundan localhost tanımlamasıyla nagios üzerinden izleme yaptım. Buradaki Couchbase'den aldığımız bilgilerin açıklaması ise şu şekilde:
CouchBase CAS: CAS aslında "check and set methods" kısaltması olarak kullanılıyor. Bu methodlarla var olan bilgiyi güncelleyebiliyoruz.
CouchBase Create per second: Saniye başına disk üzerinde oluşturulan yeni verilerdir.
CouchBase Delete per second: Saniye başına disk üzerinde silinen verilerdir.
CouchBase Disk read: Belirtilen bucket için disk üzerinde yapılan okuma işlemleridir.
CouchBase Disk write queue: Belirtilen bir bucket üzerinde yazılmayı bekleyen kuyruktaki veriler.
CouchBase Memory usage: Kullanılmış olan bellek miktarı.
CouchBase Operation per second: Disk üzerinde saniye başına yapılan işlem sayısı.
CouchBase Disk update per second: Saniye başına disk üzerinde güncellenen veri miktarı.
CouchBase Disk set per second: Saniye başına disk üzerinde yapılan yazma işlemleri.
Bir kaç hafta içerisinde de CouchBase'den çekilmesi gereken diğer bilgilerle birlikte, daha fazla test etme, kod iyileştirme gibi kısımlarıda yaptıktan sonra projeyi bitirmiş olacağım.
6 Mayıs 2013 Pazartesi
Nagios Bildirimlerini Eposta Yoluyla Almak
Nagios'ta izlediğimiz hostların, servislerin durumlarından mail ya da sms ile haberdar olabiliriz. Bunun için ayar dosyalarında bir kaç tanımlama yapmak gerekli. Bu tanımlamalar ise şu şekilde:
1) /etc/nagios3/conf.d/contacts_nagios2.cfg dosyasında "contact" ve "contacgroup" tanımlamalarını ekliyoruz. Bu tanımlamalarda "contact" kısmındaki "contact_name", "contactgroup" daki "members"a referans verilmeli.
1) /etc/nagios3/conf.d/contacts_nagios2.cfg dosyasında "contact" ve "contacgroup" tanımlamalarını ekliyoruz. Bu tanımlamalarda "contact" kısmındaki "contact_name", "contactgroup" daki "members"a referans verilmeli.
define contact{
contact_name root
alias Important Server Admin
host_notifications_enabled 1
service_notifications_enabled 1
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,r,c
host_notification_options d,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email mail_adresiniz
}
define contactgroup{
contactgroup_name admins
alias Important Administrators
members root
}
Daha sonra çalıştırmak istediğimiz hostun ve servisin tanımlamasını yaptığımız yerde de "contact_groups" bilgisini eklemeliyiz. Şu şekilde:
define host{
use generic-host
host_name localhost
alias localhost
address 127.0.0.1
contact_groups admins
}
define service{
use generic-service
host_name localhost
service_description Couchbase Mem Usage
check_command ...
contact_groups admins
}
Etiketler:
couchbase,
couchdb,
gezegen,
nagios,
yakindanegitim
22 Nisan 2013 Pazartesi
Nagios Couchbase Eklentileri
Yapacağım Nagios Couchbase eklentisinde veri tabanlarından çektiğimiz her bilgiyi hem Couchbase'deki kümeden (cluster), hem de belirli bir sunucu üzerinden çekmem gerekiyordu. Github'ta yapılmasını istediğimiz eklentilerden bir kaçını cluster ve sunucular için bu hafta yapıp, nagios için olan ayar dosyalarını githuba koydum. Gene optparse kullanarak parametre aldırdım. Kullanıcı adı ve parolasıyla kimlik kanıtlaması kısımını geçirdikten sonra sıra veri çekmedeydi. İlk yazdığım eklenti saniye başına yapılan işlem bilgisi çekmeydi. Bunun için girilecek parametre "--OPS" (operation per second) diye belirledim. Ancak burda şöyle bir şey gerekli, kullanıcı --OPS parametresini, parametreye bir değer atamadan giriyor. Kullanıcının parametreye bir değer ataması gerekse bu parametreye bir değer atanıp atanmadığını kontrol edebilirdim. Hiç değer girilmeyen bir parametrenin komut satırından yazılıp yazılmadığını kontrol etmek için tekrar optparse belgesini okudum ama orada buna benzer bir şey göremedim. Okuduğum bloglar ve örnek nagios eklentilerinden yola çıkarak şu şekilde yapmaya karar verdim:
Yaptığım eklentide mail atma ve bir kaç test betiği yazdıktan sonra ilk sürümü bitirmiş olmayı planlıyoruz. Mail atma ve test etme kısımlarını tamamlamak için hafta sonu bir de Couchbase SDK'sına baktım. Kendi bilgisayarımdan Couchbase'in kurulu olduğu makine için sorgular falan yapıp, kalan kısımları tamamlayacaktım. Ama Couchbase'e bağlandıktan sonraki kısım timeout hatası verdi. Ben önce uzun döngülere girdirecek yanlış bir fonksiyon yazdım ondan kaynaklı sandım. Bir süre daha fazla beklediğimde timeout hatası aldım. Couchbase'in timeout değerleriyle oynasam bile işlemler çok uzun sürecekti bu şekilde. Sonra Couchbase'in kurulu olduğu makineye bağlanıp aynı sorguları çalıştırdığımda hata vermedi. Bu yüzden diğer makine üzerinde devam etmeye karar verdik. Eklentiler bittiğinde Couchbase'de tutulan neredeyse bir çok durumun çekildiği eklentiler tamamlanmış olacak.
parser.add_option('--OPS', action='callback', callback=option_none, dest='operations_per_second')Yukarıda parametre tanımlaması yaparken 'action' kısmında bu parametre kullanılırsa bir fonksiyona gitmesi gerektiği için 'callback' ve fonksiyon ismi tanımlaması yaptım. Bu şekilde kullanıcı --OPS parametresini girdiği anda callback kısmında tanımlanan fonksiyon çalıştırılacak. Tanımladığımız fonksiyonda ise komut satırında --OPS seçeneğinden sonra girilen değerlere bakarak --OPS değer girilme durumunu kontrol ettim. O da bu şekilde:
def option_none(option, opt, value, parser): if parser.rargs and not parser.rargs[0].startswith('-'): print "Option arg error" ... .... setattr(parser.values, option.dest, True)Eğer --OPS seçeneğinden sonra değer ataması olacak bir şey girilmediyse --OPS değerini True yapıp, bu değere bakarak sonrasındaki işlemleri devam ettirdim. optparse belgesinde parser.rargs ile ilgili bir şey yazmıyordu bana lazım olan kısım burasıydı. Buna bakarken artık optparse'dan ziyade argParse'ın kullanılsa daha iyi gibi bir şeyler okudum. argParse'da parametrelerle ilgili daha gelişmiş özellikler var. Ama incelediğim bir çok nagios eklentisinde herkes hala optparse kullanıyor. Bu konuyu Kaan'a danışacaktım ama unuttum :) Daha sonra kimlik kanıtlaması yapıp dönen veriyi hangi tipe çevirip veri tabanından bilgi çekmek daha kolay oluyorsa o tip üzerinde oynayarak istediğimiz bilgiyi elde ediyoruz.
Yaptığım eklentide mail atma ve bir kaç test betiği yazdıktan sonra ilk sürümü bitirmiş olmayı planlıyoruz. Mail atma ve test etme kısımlarını tamamlamak için hafta sonu bir de Couchbase SDK'sına baktım. Kendi bilgisayarımdan Couchbase'in kurulu olduğu makine için sorgular falan yapıp, kalan kısımları tamamlayacaktım. Ama Couchbase'e bağlandıktan sonraki kısım timeout hatası verdi. Ben önce uzun döngülere girdirecek yanlış bir fonksiyon yazdım ondan kaynaklı sandım. Bir süre daha fazla beklediğimde timeout hatası aldım. Couchbase'in timeout değerleriyle oynasam bile işlemler çok uzun sürecekti bu şekilde. Sonra Couchbase'in kurulu olduğu makineye bağlanıp aynı sorguları çalıştırdığımda hata vermedi. Bu yüzden diğer makine üzerinde devam etmeye karar verdik. Eklentiler bittiğinde Couchbase'de tutulan neredeyse bir çok durumun çekildiği eklentiler tamamlanmış olacak.
Kaydol:
Kayıtlar (Atom)