cesi (Centralized Supervisor Interface)


    Bir önceki yazımda Supervisordan bahsetmiştim. Supervisor arayüzden de komut satırından da kullanılabilen bir API si olan Unix benzeri işletim sistemleri üzerinde çalışan bir süreç yönetim sistemidir. Bazı eksikleri şöyleydi:

  -- Supervisorun varolan arayüzü sadece kurulu olduğu makine üzerindeki süreçleri yönetebiliyordu. Ama API uzaktaki makinelerle iletişim kurmaya izin veriyordu.
  -- Arayüzde herhangi bir yetkilendirme seviyesi yoktu. Arayüzü görebilen herkes süreçlerle ilgili istediğini yapabiliyordu.
  -- Herhangi bir şekilde süreçler filtrelenerek yönetilemiyordu. Ya tek tek ya da hepsiyle birden iş yapılabiliyordu.

    Bu yaz stajımı Gamegos'ta Kaan'ın mentörlüğünde yaptım. Yaptığımız iş Supervisor'a yukarıda bahsettiğim eksiklikleri gideren yeni bir arayüz yazmaktı. Yeni arayüzü Python Flask ve Jquery kullanarak yazdık. Şimdilik paketlemedim. Nasıl kurulacağını projenin README kısmında açıkladım. Bu blogta arayüzün yeteneklerini ve kullanımını anlatacağım.
  Projeyi buradan bulabilirsiniz.

  DASHBOARD
--------------------------

    Program çalıştığında karşımıza gelen ilk sayfadır. Toplamda kaç node olduğunu kaçının bağlı kaçının sorunlu olduğunu, toplam kaç süreç olduğunu kaçının çalışıp kaçının durmuş olduğunu ve kullanıcının arayüzde yaptığı işlemlerin logunun son 12 satırını görüntüleyen paneller var.













    NODE
----------------
   
    Node özelliği bu arayüzün merkezi olmasını sağlayan özelliktir. Yani her bir node bizim iletişim kurduğumuz farklı bir supervisora denk geliyor. Kaç tane süpervisor ile iletişim kuracaksak hepsinin host port kullanıcı adı parola bilgilerini /etc/cesi.conf içine şu şekilde yazmalıyız (node isimleri eşsiz olmalıdır) :

  [node:gulsah]
 username = gulsah
 password = ***
 host = gulsah.xyz.com
 port = 9001
    
     Node seçeneğine tıkladığımızda açılan liste yapılandırma  dosyasındaki nodeların listesidir. Node eğer bağlıysa node  isminin  başında bir checkbox olacaktır. Bağlantıda bir  problem  olmuşsa node isminin başında bir çarpı olacaktır.  Buradan istediğimiz nodeları seçerek süreçlerini  yönetebiliriz.


   ENVİRONMENT
----------------------------

    Nodelardan oluşan topluluklardır. Bir filtreleme seçeneğidir. Environment'ı x node ismi y olan süreçler hakkında şunları yap dememize imkan tanır. İstediğimiz kadar environment tanımlayabiliriz. Environment isimleri eşsiz olmalıdır. /etc/cesi.conf  dosyasında şöyle tanımlanır:

  [environment:market]
  members = gulsah, kaan

  Arayüzde environment seçeneğine tıkladığımızda o environmenta üye olan ve bağlantısında problem olmayan nodeların listesini görürüz. Bu nodelardan hangisini seçersek onların süreçlerini yönetebiliriz.











  GROUP
---------------


   Grup zaten Supervisor'un sağladığı bir özellikti. Bu yüzden /etc/cesi.conf içine bununla ilgili birşey yazmaya gerek yok. Supervisor'un yapılandırma dosyasında tanımlanır. Süreçler bir gruba eklenebilir. Eğer sürecin grubu yoksa varsayılan olarak grup adı sürecin adı olur. Bu da arayüzde bir filtreleme seçeneğidir. Grubu x environmeti y olan süreçler için şunları yap deme imkanı sağlar.

    Arayüzde grup seçeneğine tıkladımızda içinde o grubu bulunduran  environmetların listesini görürüz. Buradan hangi environmentleri seçersek grubu seçtiğimiz grup, environmenti seçtiğimiz environment olan süreçleri görüntüleyip yönetebiliriz.

  *Aynı süreç birden fazla gruba ait olmamalıdır.










  SHOW ALL
---------------------

Show all seçeneği ne kadar node ve onların ne kadar süreci varsa hepsini birden görüntülemeyi ve yönetmeyi sağlar.




















    Ayrıca herhangi bir şekilde görüntülediğimiz tabloların üzerinde alt seçimler de yapabiliriz. O anda görüntülediğimiz süreçlerden hangisinin başındaki checkbox işaretliyse tabloların üstündeki turuncu butonları kullanarak sadece o süreçleri durdurup başlatabiliriz.


    Program çalıştırılmadan önce yapılandırma dosyasında veritabanı ve kullanıcı loglarının tutulduğu dosyaların yolunu /etc/cesi.conf dosyasında şu şekilde belirtmeliyiz:

    [cesi]
    database = /x/y/userinfo.db
    activity_log = /x/y/cesi_activity.log


   KULLANICI SEVİYELERİ
--------------------------------------------

   Admin:
   -- Kullanıcı ekleme silme işi sadece admin tipindeki kullanıcılar tarafından yapılır.
   -- Tüm süreçlerle ilgili herşeyi yapabilirler.

  Standart User:
   -- Tüm süreçler hakkında herşeyi yapabilir.

  Only Log
  -- Süreçlerin hepsini görüntüleyebilir
  -- Süreçlerin sadece loglarını okuyabilir.

  Read Only
  -- Sadece süreçleri görüntüleyebilir. Herhangi bir şeye müdahale edemez.




    Program ilk kurulduğunda varsayılan kullanıcı admindir. Kullanıcı adı ve parolası "admin" dir. Change password seçeneğini kullanarak admin ilk olarak parolasını değiştirmelidir. Gerek varsa istediği yetkilerde yeni kullanıcılar ekleyebilir. Eklediği yeni kullanıcılarda oturum açtıklarında aynı şekilde parolalarını değiştirebilirler.


Kullanıcı ekleme paneli:      
















Kullanıcı silme paneli:



Desteği için Kaan Özdinçer'e teşekkürler. 







29 Ağustos 2014

Posted In: Açık kaynak, bootstrap, centralized, cesi, flask, Gezegen, Özgür yazılım, ozguryazilim, process control, python, supervisor, supervisord

Supervisor

  Supervisor kurulu olduğu bilgisayarın üzerindeki süreçleri kontrol edebilen Unix benzeri işletim sistemleri üzerinde çalışabilen bir sistemdir. Aslında süreçlerin kontrolünü rc.d dizini altına betikler yazarak da yapmak mümkün ama supervisor bu işi bi standarta göre yaptığından bakım yapmak da yazmak da yönetmek de daha kolay olacaktır. Ayrıca süpervisor ile zombi süreç oluşumunu engelleyebiliyoruz. Süreçleri gruplayarak toplu işler yaptırabiliyoruz. Tek seferde birden çok sürece parametre gönderebiliyoruz. Duran süreçleri otomatik başlatabiliyoruz. Hepsinden sırayla bahsedeceğim.

  Arayüzünün görünümü ise şöyle:


















   Komut satırını kullanarakta bilgi almak mümkün. Komut satırına supervisorctl yazarak etkileşimli bir kabuk açıldığını göreceğiz. "help" yazdığımızda yapabileceklerimizi rahatlıkla görebiliriz.

   Kurulumu:
  "easy-install supervisor", "pip install supervisor" kullanmak ya da direk kaynak kodundan kurmakta mümkün ama depodan kurabiliyor olmak kullanım alanını genişletecektir. Bu yüzden bunu tercih ediyoruz.

$ sudo apt-get install supervisor

  Şuan varsayılan olarak /etc/supervisor/supervisord.conf yolunda şablon olarak bir yapılandırma dosyası oluşmuş olmalı. İşler karmaşıklaştığında yönetimin daha kolay olması için buradaki bazı bölümleri yavaş yavaş /etc/supervisor/conf.d/ dizini altına taşıyacağız. İlk olarak http yaplandırması kısmını şöyle yazıyoruz:

  # vim /etc/supervisor/conf.d/http.conf

Açılan dosyaya şu yapılandırma bilgierini ekeyelim:

  [inet_http_server]         ; inet (TCP) server disabled by default
  port=*:9001        ; (ip_address:port specifier, *:port for all iface)
  username=user              ; (default is no username (open server))
  password=123               ; (default is no password (open server))

2. satırda * yerine özel bir ip adresi ya da localhost yazabiliriz. * yazmamız supervisor'a tüm arayüzlerden ulaşabilmemizi sağlar. Bu dosyayı kaydedip çıkalım.

  İçinde şuan kayıtlı hiçbir süreç olmadığından çalıştığında bir süreç göremeyeceğiz. Çalıştırmak için şu komutu verelim:

  # service supervisor start

  Şimdi adres çubuğuna localhost:9001 yazdığımızda yukarıdaki resmin süreçler olmadan ki halini görüyor olmamız lazım

  Şimdi hiçbirşey yapmayan örnek bir kod yazalım supervisor'a ekleyelim ve durumunu inceleyelim:

  # vim /usr/local/bin/long.sh

  Açılan dosyaya şu kodu yazalım:

  #!/bin/bash
  while true
  do
      # Echo current date to stdout
      echo `date`
      # Echo 'error!' to stderr
      echo 'error!' >&2
      sleep 1
  done

  Kaydedip çıkalım ve şimid bu dosyaya çalıştırılabilme izni verelim:

  # chmod +x /usr/local/bin/long.sh

   Şimdi yazdığımız bu küçük programı supervisor 'un yapılandırmasın ekleyelim.

  # vim /etc/supervisor/conf.d/long_script.conf 

  Açılan dosyaya şunalrı yazalım:

   [program:long_script]                       ; programa verecğimiz isim
   command=/usr/local/bin/long.sh       ; eklemek istediğimiz kodun yolu
   autostart=true                                    ; supervisor çalıştığında otomatik başlatılıp başlatılmayacağı
   autorestart=true                                 ; otomatik yeniden başlatılıp başlatılmayacağı
   stderr_logfile=/var/log/long.err.log   ; standart hata çıktısının yazılacağı dosyanın yolu
   stdout_logfile=/var/log/long.out.log  ; standart çıktısının yazılacağı dosyanın yolu

 Bu dosyayı kaydedip çıkalım. Bu yaptığımız değişiklikleri okuyabilmesi için supervisor'u yeniden başlatalım:

  # service supervisor restart

  Şimdi adres çubuğuna yeniden localhost:9001 yazdığımızda bir tane satır görüyor olmamız gerekiyor.

  Programla ilgili şu bilgileri göreceğiz:
  Durumu:
      --running
      --starting
      --backoff
      --stopping
      --stopped
      --exited
      --fatal

  Süreç numarası:

      --pid 1800

  Sürecin çalıştığı süre:

     --uptime 3:24:07

  Adı:

    --long_script

  Ve bu süreç üzerinde yapabileceğimiz olaylar:   Yeniden başlat, başlat, durdur, logları temizle, logları görüntüle gibi

   Bir sonraki yazımda XML-RPC API sinin kullanımından API yi kullanarak süreçlere nasıl müdahale edebildiğimizden  bahsedeceğim.

4 Temmuz 2014

Posted In: Açık kaynak, Gezegen, linux, Özgür yazılım, ozguryazilim, process control, supervisor, supervisord

Twitter Auto Publish Powered By : XYZScripts.com