Nagios Kurulumu ve Yapılandırması
Uzun zamandır, network monitoring işleri için Nagios kullanıyorum. Nagios, oldukça kullanışlı ve bir network monitoring yazılımından beklenen özellikleri tamamıyla sağlayan oldukça gelişmiş ve esnek bir yazılım. İşte bu makalede de, Nagios’un kurulumu ve yapılandırmasına ait notlar paylaşılmaktadır
Nagios’u şu sıralar sık sık kullandığım CentOS 5.2 üzerine kurdum. Dolayısı ile döküman buna göre hazırlanmıştır. Ancak, kurulum kaynak koddan derlenerek yapılacağından aynı referansları izleyerek farklı platformlar için de kurulum yapabilirsiniz.
İndex
Giriş
1 - Nagios Nedir ?
2 - Çalışma Prensibi
3 - Sistem Gereksinimleri
Nagios Pluginleri Nedir ?
NPRE ve NSClient + + Nedir ?
Kurulum
1 - Kuruluma Hazırlık
2 - Kaynak Koddan Kurulum
Yapılandırma Dosyaları ve Açıklamalar
Örnek Senaryo
1 - NRPE ile Linux ve Unix Türevi Makinelerin Monitörlenmesi
a - CentOS 52. üzerine NRPE kurulumu
b - FreeBSD 7.0 üzerine NRPE kurulumu
c - Windows Server 2003 üzerine NSClient + + kurulumu
2 - Nagios’un Yapılandırılması
Giriş
________________________________________
Yazının başında da belirttiğim gibi bu yazıda CentOS 5.2 üzerine yapılan bir Nagios kurulumu ve yapılandırmasına ait notları bulabilirsiniz. Örnek olması açısından içerisinde bir Windows 2003, bir CentOS 5.2 ve bir FreeBSD 7.0 bulunan küçük bir networkün Nagios ile nasıl monitörleneceği anlatılacak. Bu sunucuların disk, memory ve işlemci gibi lokal kaynaklarının yanı sıra üzerilerinde çalışan http, smtp, ftp, mysql gibi servisleri de monitörlenecek.
Öncelikle, Nagios Nedir’den başlayacak ve adım adım kurulum ve yapılandırma ile ilgili bölümlere geçeceğim.
Nagios Nedir ?
________________________________________
Nagios, Linux (ve Unix tüveri) platformlar üzerinde çalışabilen ve bir endüstri standardı halini almış olan GPL lisanslı ücretsiz bir sistem ve network monitoring yazılımıdır. Bir çok özelliği içerisinde barındıran Nagios’un temel özellikleri aşağıdaki gibidir.
• Host bazında kaynak monitörleme (Disk, İşlemci, Memory)
• Servis bazında network monitörleme (SMTP, POP3, HTTP, NNTP, FTP, PING vs.)
• Plugin desteği sayesinde kendi pluginlerinizi yazabilem esnekliği.
• “Parent” hosts özelliği ile network hiyerarşisi tanımlayabilme.
• Belirli durum ve makineler için belirli kişilere uyarı mesajları gönderebilme. (E-mail, Pager, SMS vs.)
• Web Arayüzü’nden anlık durum görüntülemesi ve gelişmiş raporlar
Bu özelliklerin yanı sıra, yazıda detaylı olarak değinmeyeceğim için bahsetmediğim bir kaç önemli özellik daha bulunuyor. Özelliklerin tam listesi için www.nagios.org adresinden yararlanabilirsiniz.
Çalışma Prensibi
________________________________________
Nagios’un çalışma prensibini tam olarak anlayabilmek için aslında yazının tamamına gözatmak iyi olacaktır. Zira, çalışma prensibi içerisinde henüz değinmediğim pluginler ve nrpe gibi addonlar da bulunmaktadır. Ancak üzerinden kısaca gecmek istersek, değinilmesi gereken noktalar şu şekildedir:
Genel Prensip:
Nagios belirli periyodlarla, kaynak ya da servisleri monitor edilecek makine üzerinde bulunan pluginlerin çalıştırılmasını sağlıyor. Çalıştırılan bu pluginler de Nagios’a kontrol edilen kaynak/servis ile ilgili bir cevap dönüyorlar. Bu şekilde Nagios, ilgili kaynak/servis hakkında bilgi sahibi oluyor.
Nagios’un ilgili pluginleri hedef makinede çalıştırması için kullanılabilecek bir kaç yöntem var. Mesela eğer bir Linux/Unix makineyi monitor edecekseniz, Nagios’un pluginleri ssh üzerinden çalıştırmasını sağlayabiliyorsunuz. Ya da client makineye NRPE isimli addonu yükleyerek Nagios’tan aldığı direktiflerle pluginleri çalıştırmasını sağlayabiliyorsunuz.
Ayrıca, Windows bilgisayarları monitör etmek için aynı işi yapan NSClient + + isimli bir Windows Agent’i de mevcut. Ben monitoring işleri için NRPE ve NSClient ++ kullanıyorum. Yazının ilerleyen bölümlerde hem pluginler hem NRPE ve hem de NSClient ++ ile ilgili bilgileri bulabilirsiniz.
Sonuç olarak Nagios hedef makinedeki pluginlerden gerekli bilgi cevaplarını alıyor ve duruma göre bir aksiyon alıyor. Bir örnek vermek gerekirse, mesela üzerinde herhangi bir Linux dağıtımı koşan makineniz var ve bu makinenin işlemci kullanımını sürekli kontrol etmek ve işlemci kullanımı %80 oranına ulaştığı zaman uyarı mesajı almak istiyorsunuz. Nagios üzerinde bu kontrol işlemi için bir konfigurasyon yapıyorsunuz ve örneğin her 5 dakikada bir NRPE ile iletişime geçilerek cpu kontrolü yapan plugin’i çalıştırmasını söylüyorsunuz. Bundan sonra Nagios her 5 dakikada bir hedef makinedeki NRPE ile konuşup cpu kontrolü yapmasını söylüyor. NRPE de, cpu kontrol plugin’ini çalıştırarak aldığı bilgiyi Nagios’a iletiyor. Eğer dönen cevapta kullanım oranı %80 olarak belirtiliyorsa, yapılandırmaya göre mesela bir bilgi mesajı gönderilmesi sağlanıyor.
Bilgilendirme Şekilleri:
Bunun dışında, Nagios’un hostlar için Down ve Unreachable ve servisler için Warning ve Critical olmak üzere farklı uyarı çeşitleri bulunuyor. Tüm bu durumlar için ayrı eşik değerleri belirleyebiliyorsunuz. Örneğin “gelen cevapta işlemci kullanımı %80’se Warning; %90 ise Critical ver.” diyebiliyorsunuz. Ayrıca, “sadece Critical durumlar için mesaj gönder” şeklinde bir tanımlama da yapabiliyorsunuz. Bu şekilde Warning durumları sadece Nagios’un web arayüzünden izlenebilirken, Critical durumlar hem web arayüzünden izlenebiliyor hem de e-posta ya da sms gibi yöntemlerle sistem yöneticisine bildiriliyor.
Durum Tipi:
Çalışma prensibi konusundaki bir diğer önemli nokta ise, genel olarak monitoring yazılımlarının ortak problemi olan “mesaj bombardımanının” önüne geçilmesi için geliştirilmiş “State Type” denilen konu ile ilgili. Mesela, hemen yukarıdaki örnekten devam edersek, ilgili makinede anlık olarak kontrolünüz dahilinde bir işlem yapıyor olabilirsiniz ve bu işlem sonucu işlemci kullanımı %90 sınırını geçebilir. Bu durumda Nagios tarafından her 5 dakikada bir yapılan kontrollerden birinde NRPE’den dönen sonuç da işlemci kullanımının %90′i aştığı yönünde olabilir. Aynı zamanda networksel sorunlardan dolayı Nagios geçici olarak NRPE ile konuşamayabilir ve sağlıklı cevaplar alamayabilir ve ya belirli periyodlarla bir router’ı pingleyip hat ile ilgili kontrol de yapıyor olabilirsiniz ancak bu sorun çok kısa süreli geçici bir problem de olabilir ya da monitor edilen makinelerden birini restart etmiş olabilirsiniz. Bu durumların hepsi için Nagios birer mesaj atacak olursa e-mail ya da cep telefonunuzun posta kutusu gereksiz bir sürü mesajla dolabilir. İşte Nagios’un State Type denilen özelliği bu durumun oluşmaması için güzel bir çözüm sunmaktadır.
Nagios’un bir kaynak ya da servisin durumu ile ilgili karara varması için gerekli iki öğe bulunuyor:
• Kaynak ya da Servis’in durumu (OK, WARNING, CRITICAL, UP, DOWN vs.)
• Kaynak ya da Servis durumunun tipi
Nagios, durumu UP ya da OK olmayan kaynak ya da servisler hakkında kesin durum kararı vermek için bahsedilen bu “durum tipi”ni de göze almaktadır. Durum tipleri de kendi aralarında SOFT error ve HARD error olmak üzere ikiye ayrılıyorlar.
SOFT Error:
Nagios’a, bir kaynak ya da servis için dönen cevap eşik değerinin üzerindeyse, durumdan kesin emin olunabilmesi için belirli periyodlarda ve adette yeniden kontrol (re-check) yapmasını söyleyebiliyoruz. Yukarıdaki örnek üzerinden devam edecek olursak, 15 dakikada bir işlemci kontrolü yapılan windows makinenin işlemci kullanımı %90 olduğu zaman Nagios’un bu durumu CRITICAL olarak değerlendirmesini söylüyoruz ancak aksiyon almak üzere kesin karar verebilmesi için örneğin 3 dakikalık periyodlarla 3 kez daha kontrol yapmasını belirtiyoruz.
Bir kaynak ya da servis için plugin’den dönen cevap OK ya da UP değil(se) ve tekrar kontrol işlemleri henüz tamamlan(mamış)sa bu durum SOFT error olarak değerlendiriliyor ve bu durum için herhangi bir uyarı mesajı gönderilmiyor.
İlgili kaynak ya da servis için yapılan 2. tekrar kontrol işleminde dönen cevap OK ya da UP ise buna SOFT recovery deniliyor.
HARD Error:
Bir kaynak ya da servis için plugin’den dönen cevap OK ya da UP değil(se) ve tekrar kontrol işlemleri tamamlan(mış)sa bu durum HARD error olarak değerlendiriliyor ve ilgiliye bir uyarı mesajı gönderiliyor. Yani yukarıdaki örneğe göre, 3 dakikada bir ve 3 kez yapılacak tekrar kontrol işlemi için geçen 9 dakikalık periyod sonucunda durum halen OK ya da UP olmamışsa kalıcı bir problem olduğuna karar veriliyor ve ilgiliye mesaj atmak gibi belirlenen aksiyonlar alınıyor.
Aslında bu konu için daha fazla detay vermek mümkün; ancak şimdilik bu kadar bilgi yeterli olacaktır. Daha derinlere inmek istiyorsanız http://nagios.sourceforge.net/docs/3_0/toc.html adresine bakmanızı öneririm.
Sistem Gereksinimleri
________________________________________
Nagios’u çalıştırabilmek için yüklü olması gereken yazılımlar aşağıdaki gibidir.
• Web arayüzü için bir web server (Apache)
• StatusMap ve Trends gibi raporlama araçları için GD Kütüphanesi
Kurulum adımında, işe ilk olarak bu yazılımları yükleyerek başlayacağız.
Şimdi Nagios çalışma prenbisi bölümünde sık sık değindiğimiz pluginler ve NRPE ile ilgili açıklamalara değinelim.
Önce Pluginler.
Nagios Pluginleri Nedir ?
________________________________________
Nagios network üzerinden servis ya da kaynak monitoring yapmak için herhangi dahili bir kontrol mekanizması kullanmak yerine pluginlerden yararlanıyor. Piyasadaki muadillerinden ayrıldığı en önemli nokta da burasıdır. Pluginler, komut satırında çalıştırılabilen küçük programcıklar ya da scriptlerdir (Perl, shell vs). Temel görevleri, çalıştırıldıklarında, kontrol edecekleri kaynak ya da servis ile ilgili bilgi alıp bir çıktı (stdout) ile durumu Nagios’a bildirmektir. Dolayısı ile herhangi bir kaynak/servisi kontrol etmek üzere komut satırından çalıştırabileceğiniz hemen her şey için bir plugin yazılabilmesi mümkündür. İşte Nagios’un esnekliği buradan kaynaklanmaktadır. Nagios pluginleri konu ile ilgilenen insanlarca yazılmaktadır ve internet üzerinde hemen her konu ile ilgili bir çok Nagios plugini bulunabilmektedir. Hatta küçük bir araştırma ile siz de kendi pluginlerinizi yazabilirsiniz.
Prensip konusunda değindiğimiz gibi, Nagios sadece bu pluginleri çalıştırmakta ve pluginlerden gelen cevaplara göre işlem yapmaktadır.
Nagios’un uzaktaki bir makinede bulunan bu pluginleri çalıştırabilmesi için kullanılabilecek yöntemlere yukarıda değinmiş ve şahsen NRPE isimli addon’u kullandığımdan bahsetmiştim. Şimdi bu konuda bazı açıklamalar yapmak yerinde olacaktır.
NRPE ve NSClient + + Nedir ?
________________________________________
NRPE, monitor edilecek makineye kurulan, Linux/Unix üzerinde çalışabilen güzel bir Nagios addon’udur. NRPE bir TCP portunu dinler. Nagios ilgili port üzerinden NRPE ile konuşur ve pluginleri çalıştırmasını söyler. NRPE de ilgili plugini çalıştırıp pluginden dönen cevabı Nagios’a iletir.
Nagios sistemlere bir daemon (servis) olarak kurulur ve küçük bir yapılandırma dosyası bulunur. Yazının ilgili bölümünde değineceğim gibi NRPE’nin kurulumu oldukça kolaydır ve Nagios için güzel bir agenttir.
MS tarafında ise Windowslar için NRPE ile aynı işi yapan NSClient + + isimli agent bulunmaktadır. Mantık hemen hemen aynı olduğundan dolayı üzerinde çok durmayacağım.
Genel anlamda Nagios ile ilgili teorik bilgiler bu kadardı. Elimden geldiğince uzatmamaya gayret ettim ama işte konu konuyu açıyor ve olayı tam olarak kavrayabilmek için değinilmesi gereken noktalar bulunuyor.
Artık kuruluma geçebiliriz.
Kurulum
________________________________________
Nagios’un oldukça kolay bir kurulumu var. Bir kaç adım da kurulumu tamamlamak mümkün. Temel olarak hazırlık aşamasında önceden sistemde kurulu olması gereken paketleri yükleyeceğiz, daha nagios ve nagios-plugins’i kaynak koddan kuracağız, örnek yapılandırma dosyalarından yararlanarak temel ayarları yapacağız ve web arayüzüyle ilgili bir iki küçük ayar yapacağız.
Daha sonrasında ise, yukarıda bahsettiğim örnek network üzerinden tam yapılandırma işlemlerini gerçekleştireceğiz.
Kuruluma Hazırlık
Nagios, sistem durumunu online görüntülemek üzere bir web sunucusuna ve StatusMap, Trends gibi CGI tabanlı raporlama araçları için GD kütüphanesine ihtiyaç duruyor.
Önerildiği üzere ben web sunucusu olarak apache kullanıyorum. Yazıda da yum kullanarak apache ve gd kütüphanesini kuracağız. Ayrıca, kaynak koddan derleme işlemi yapacağımız için sistemde gcc’nin, ve C kütüphanesi glibc’nin yüklü olması gerekiyor. Bunları da aynı şekilde yum ile yükleyeceğiz.
Aşağıdaki adımları uygulayarak gerekli paketleri sisteme toptan yükleyelim ve apache’nin sistem açılışlarında başlatılması için startup’a ekleyelim.
# yum -y install httpd gcc gd gd-devel
# chkconfig --level 2345 httpd on
Kurulumlar sorunsuz olarak bittiyse şimdi nagios için bir kullanıcı ve grup oluşturacağız; ve apache’yi bu gruna dahil edeceğiz.
Kullanıcıyı açıp bir şifre verin.
#/usr/sbin/useradd -m nagios
#passwd nagios
Şimdi nagcmd isimli bir grup oluşturun ve nagios ile apache kullanıcılarını dahil edin.
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd apache
Artık download edip compile ederek sisteme yükleyebiliriz.
Kaynak Koddan Kurulum
Ben kaynak kodları tutmak için /usr/src isimli dizini kullanıyorum. Burada nagios isimli bir dizin daha oluşturun ve oluşturulan dizine geçin.
# mkdir /usr/src/nagios
# cd /usr/src/nagios
Şimdi hem nagios kaynak kodlarını hem de plugin paketini download edeceğiz. Şu anki son sürüm Nagios 3.06 ve Nagios Plugins 1.4.13. http://www.nagios.org/download/download.php adresinden bu paketleri sisteme download edebilirsiniz. Aşağıdaki örnek wget satırları ile ilgili mirrordan direk de download edebilirsiniz.
wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11
.tar.gz
Şimdi aşağıdaki gibi sıkıştırılmış nagios paketini açın ve ilgili dizine geçin.
(şu an /usr/src/nagios dizininde olduğunuzu varsayıyorum.)
# tar xzf nagios-3.0.6.tar.gz
# cd nagios-3.0.6
Configure scriptini çalıştırın.
# ./configure --with-command-group=nagcmd
Derleme işlemi sorunsuz bittiyse, derleme işlemine geçebilirsiniz.
# make all
Daha sonra aşağıdaki komutlarla oluşturulan binary dosyalarını, scriptleri ve örnek yapılandırma dosyalarını sisteme yüklüyoruz.
# make install
# make install-init
# make install-config
# make install-commandmode
Nagios, artık sisteme kuruldu ancak yapılacak bir iki işlem daha olduğundan dolayı şimdilik start etmiyoruz.
Şimdi kurulum ile birlikte gelen örnek conf dosyalarını kullanacağız ve küçük bir değişiklik yapacağız. Bu dosyalar, /usr/local/nagios/etc dizini altında bulunuyor ve Nagios bu dosyalar ile sorunsuz olarak çalışabilecek durumda geliyor. Bu nedenle sadece contact dosyasında bulunan e-mail adresini değiştirmek şimdilik yeterli olacaktır.
contacts.cfg dosyasını aşağıdaki gibi editleyerek içerisinde kırmızı ile belirtilmiş bölüme kendi e-mail adresinizi yazın.
# vi /usr/local/nagios/etc/objects/contacts.cfg
#######################################################################
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
email e-mail@adresiniz.com
}
Aslında bu kısımda kendi custom contact tanımlamalarınızı yapabilirsiniz; ancak şimdilik Nagios’un orjinal dökümanına sadık kalsak iyi olur.
Neyse minimum yapılandırma ile çalışabilecek konumda olan Nagios’u start etmeden önce aşağıdaki komut ile web arayüzü için config dosyasını yüklüyoruz.
(halen /usr/src/nagios dizininde olduğunuzu varsayıyorum.)
# make install-webconf
Ben nagios üzerindeki apache’yi sadece nagios’un web arayüzü için kullandığımdan, httpd.conf vs. ile ilgili olarak ekstra bir tanımlama yapmıyorum. Sadece arayüze erişim için bir şifre tanımlaması yapmak yeterli olacak.
Şimdi bu işi yapın. Kırmızı ile belirtilmiş kısım kullanıcı adı olarak belirlenecektir; isteğinize göre değiştirebilirsiniz.
Önemli Not: Eğer kullanıcı adında değişiklik yaparsanız, /usr/local/nagios/etc altındaki cgi.cfg dosyası içerisinde nagiosadmin olarak geçen tüm ibareleri belirlediğiniz kullanıcı adı ile değiştirmeniz gerekir. Aksi taktirde web arayüzünde aşağıdaki gibi bir hata alırsınız:
“It appears as though you do not have permission to view information for any of the services you requested…”
Neyse, password tanımlamasını yapalım.
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Son olarak değişikliklerin geçerli olması için apacheyi restart edin.
# service httpd restart
Son Nagios Pluginlerini sisteme kuracağız.
Paketleri indirdiğimiz dizine geçelim ve nagios-plugins-1.4.11.tar.gz isimli sıkıştırılmış dosyayı açalım.
# cd /usr/src/nagios
# tar xvfz nagios-plugins-1.4.11.tar.gz
# cd nagios-plugins-1.4.11
Derleyip yüklüyoruz.
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install
Herşey yolunda gittiyse nagios’u start edebilir ve yapılandırma bölümüne geçebiliriz.
Nagios’u sistem servisi olarak ekleyelim ve açılışlarda çalışacak şekilde ayarlayalım.
# chkconfig --add nagios
# chkconfig nagios on
Şimdi de start edelim; önce yapılandırmanın düzgün olup olmadığını kontrol ediyoruz.
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Şimdi de start ediyoruz.
# service nagios start
Artık nagios sistemde çalışıyor; ancak web arayüzüne bağlanıp durumu kontrol etmeden önce SeLinux’u devre dışı bırakalım. Zira öntanımlı olarak Enforcing modunda gelen SeLinux Nagios’un CGI dosyalarına erişimi engelleyeceği için web arayüzüne bağlanmak istediğinizde “Internal Server Error” hatası ile karşılaşabilirsiniz.
# setenforce 0
Eğer, SeLinux’u disable etmek istemiyorsanız aşağıdaki komutlarla da Nagios CGI dosyalarına erişim izni verebilirsiniz.
# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
# chcon -R -t httpd_sys_content_t /usr/local/nagios/share/
Kurulum adımları bu kadardı. Artık, temel yapılandırma ile çalışan bir Nagios sunucumuz var.
Web arayüzüne http://nagios-ip-adresi/nagios/ adresinden bağlanabilirsiniz.
Not: İlk kurulum sonrasi Nagios arayüzünde localhost HTTP warning veriyor olabilir. Bunun nedeni httpd.conf ‘da /var/www/html dizini için Indexes opsiyonu eklenmediğindendir. Bu durumda dosya içerisinde
Şimdi Yapılandırma bölümüne geçelim.
Yapılandırma
Yazının başından beri bahsettiğim üzere Nagios oldukça esnek bir yazılım ve bu nedenle de yapılandırma konusu epey kapsamlı. Hemen hemen yapamayacağımız şey yok. Bu nedenle konuyu daha iyi kavrayabilmek için örnekleri bir senaryo üzerinden gitmeyi uygun buluyorum.
Fakat örnek senaryo üzerinden uygulamaya geçmeden önce haşır neşir olunacak Nagios dizin ve dosyalarının neler olduğuna bakmak ve açıklamalarını vermek sanıyorum yerinde olacaktır.
İşe buradan başlayalım:
Nagios Dizin ve Dosyaları
Dizinler
/usr/local/nagios: Nagios ana dizini.
/usr/local/nagios/bin: Binary dosyaları.
/usr/local/nagios/etc: Yapılandırma dosyaları.
/usr/local/nagios/etc/objects: Nesne tanımlama dosyaları.
/usr/local/nagios/libexec: Plugin dosyaları.
/usr/local/nagios/sbin: CGI dosyaları.
/usr/local/nagios/share: Web Interface HTML dosyaları.
/usr/local/nagios/var: Cache, lock ve log dosyaları.
Dosyalar
/usr/local/nagios/etc/nagios.cfg: Ana nagios yapılandırma dosyası.
/usr/local/nagios/etc/cgi.cfg: CGI yapılandırması.
/usr/local/nagios/etc/resource.cfg: Kaynak yapılandırma dosyası.
/usr/local/nagios/etc/objects/commands.cfg: Komutların tanımlandığı dosya.
/usr/local/nagios/etc/objects/contacts.cfg: Kontakt ve kontakt gruplarının tanımlandığı dosya.
/usr/local/nagios/etc/objects/templates.cfg: Host ve servis tanımları için şablon dosyası.
Bu dosyaların detayları şöyle:
nagios.cfg
Ana yapılandırma dosyası budur. Genel ayarlar ve hostlar için tanımlamaların yapıldığı bu dosya ile sık sık haşır neşir olacağız.
cgi.cfg
Bu dosya da ise CGI ile ilgili tanımlamalar bulunmaktadır. Normal olarak pek fazla editlenmesi gereken bir dosya değildir. Web arayüzü için güvenlik işlemleri buradan yapılır.
resource.cfg
Kullanıcılar tarafından oluşturulan macroların (pluginlerin) tutulduğu yerlerin tanımlandığı dosyadır. Nagios bir plugin çalıştırmak istediği zaman, bu dosya içinde tanımlanmış olan path’i baz alır.
commands.cfg
Nagios’un check işlemi, mesaj gönderme vs gibi şeyleri yapabilmesi için çalıştırılacak komutlar bu dosya içerisinde belirlenir. Yani nagios’a bir servisi kontrol etmesi için tanımlama yaptığınız zaman o kontrol için çalıştırılacak komutu bu dosya içerisinden öğrenir. Kurulum sırasında yapılan temel konfigurasyonda bu dosya oluşturulmuş ve hemen hemen gerekli olan tüm komutlar işlenmiştir. Ancak siz Nagios’un esnekliğinden yararlanıp özelleştirme yapmak istediğiniz zaman bu dosyaya ekleme yapmak durumunda kalabilirsiniz. Örneğin uyarıları SMS yolu ile de alabilmek isterseniz, ilgili plugini yükledikten sonra Nagios’un sms gönderebilmek için kullanması gereken komutu bu dosyada belirtmeniz gerekir.
contacts.cfg
Burada uyarı mesajlarını alacak kişiler için birer contact oluşturuyorsunuz ve grup tanımlamaları yapıyorsunuz. Örneğin SMS ya da e-mail için ayrı iki contact grubu oluşturup kimi durumlarda sms kimi durumlarda sadece e-mail gönderilmesini sağlayabilirsiniz.
tepmplates.cfg
Bu dosyada da host ve servisler için önceden bir şablon oluşturabiliyorsunuz. (Default olarak oluşturulanlar da bulunmaktadır.) Örneğin 20 tane *nix 20 yane MS tabanlı sunucunuz varsa *nix’ler ve Windowslar için ayrı iki şablon oluşturup, her host ya da servis tanımlaması yaparken önceden oluşturduğunuz bu şablonları kullanabiliyorsunuz.
Konfigurasyon ile ilgili dosya ve dizinlere ait kısa açıklamalar bundan ibaretti. Sık sık işimizin düşeceği dosyalar ile ilgili detaylı açıklamalar yapılandırma sırasında verilecek.
Örnek Senaryo
________________________________________
Bu bölümde, yazının başında da bahsettiğim gibi bir adet CentOS 5.2, bir adet FreeBSD 7.0 ve bir Windows Server 2003 üzerinde tanımlama işlemleri yapacağız.Örnek senaryoda hangi makineler için hangi kaynak ve servislerin monitörleneceği aşağıdaki gibi olacak.
Lokal Kaynaklar:
CPU Load (CentOS, FreeBSD)
Bağlı Kullanıcıların Sayısı (CentOS, FreeBSD)
Disk Partisyonlarının Kullanım Durumu (CentOS, FreeBSD, windows)
Toplam Process Adedi (CentOS, FreeBSD)
Zombie Process Adedi (CentOS, FreeBSD)
Swap Kullanımı (CentOS, FreeBSD)
Memory Kullanımı (Windows)
Uptime (Windows)
Servisler:
httpd (CentOS)
smtp (FreeBSD)
pop3 (FreeBSD)
ftp (FreeBSD)
W3SVC (Windows IIS Servisi)
Bu senaryo üzerinde yapılandırma gerçekleştirirken, önce Nagios Server tarafında NRPE ile ilgili işlemler yapılacak sonrasında da monitor edilecek bilgisayarlar üzerine NRPE addon’u kurulacak. NRPE kurulumundan sonra nagios’da monitor edilecek bilgisayarlar için host/servis tanımlaması yapılacak.
Nagios server tarafındaki yapılandırma işlemleri ile ilgili izlenebilecek iki yol var. Birincisi minimal configuration denilen, monitör edilecek hostlar ve servisler için girilmesi gereken satırların tek bir dosyada tutulması, ikincisi ise her bir host için ayrı bir .cfg dosyası tanımlanması. Ben genel olarak daha derli toplu olması açısında ikinci adımı izliyorum. Dolayısı ile bu dökümanda da aynı yol izlenecek.
Daha önceden de bahsettiğim gibi Nagios kurulumu sırasında tüm temel konfigurasyon dosyaları oluşturuluyor. Bu dosyaları kullanabileceğimiz gibi kendi dosyalarımızı kendimiz de oluşturabiliriz. Ben temel yapılandırmalar için orjinal conf dosyalarını kullanacağım.
Ön bilgilerden sonra yapılandırma işlemlerine başlayabiliriz.
Nagios Sunucusu Tarafında NRPE Yapılandırması
Örnek senaryoda bahsettiğimiz monitor edilecek bilgisayarlar (host) NRPE addon’u ile check edileceği için ilk olarak Nagios’a check_nrpe isimli plugini kurmamız gerekiyor. Bu şekilde, Nagios check_nrpe pluginini kullanarak üzerinde NRPE agent kurulu bilgisayarlarımıza pluginlerin çalıştırılmasını söyleyebilecek.
Not: Burada dikkat edilmesi gereken, Nagios’un üzerine nrpe plugin‘ini kuruyoruz. Ancak monitor edilecek makinelere sistemde bir daemon olarak çalışacak ve Nagios sunucusu ile iletişime geçilecek bir portu dinleyecek olan nrpe addon‘unu kuracağız. İkisini birbirine karıştırmamakta fayda var.
Bu plugin’i de kaynak koddan kuracağız. Ama öncesinde gerekli olan openssl-devel paketini sisteme aşağıdaki gibi yükleyin. Aksi halde nrpe kurulumunda “checking for SSL headers… configure: error: Cannot find ssl headers” şeklinde bir hata alabilirsiniz.
# yum install openssl-devel
Şimdi nrpe pluginini download edip sisteme kuracağız.Paketi http://www.nagios.org/download/addons/ adresinden indirebilirsiniz. Bu dökümanı yazarken ki son sürüm NRPE 2.12′ydi ve paketi aşağıdaki download linkinden indirdim. (Ancak siz son sürümü nagios.org download sayfalarından indirin.)
# cd /usr/src/nagios/
# wget http://puzzle.dl.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
# tar xzf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure
# make all
# make install-plugin
NRPE pluginini, diğer pluginlerin de durduğu /usr/local/nagios/libexec/ yüklendi. Şimdiki adım Nagios’a check_nrpe pluginini nasıl çalıştıracağını öğreteceğimiz commands.cfg isimli dosyada yapılacak tanımlamalarda.
/usr/local/nagios/etc/objects/commands.cfg dosyasını editleyin ve en altına aşağıdaki satırları ekleyin.
#########################################################
#NRPE CHECK
########################################################
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
Böylece, Nagios’a nrpe için komutu öğretmiş oluyoruz.
NRPE plugini ile ilgili olarak -nagios sunucusu üzerinde- yapılması gerekenler bu kadardı. Şimdi monitor edilecek hostlar üzerinde NRPE addon’unun kurulum ve yapılandırmasına geçelim. Hostlardaki NRPE’ler hazır olduktan sonra Nagios’un monitor işlemlerine başlayabilmesi için yapılması gereken tanımlama işlemlerine geçeceğiz.
NRPE ile Linux ve Unix Türevi Makinelerin Monitörlenmesi
Bu bölümde, sırası ile bir CentOS 5.3, bir FreeBSD 7.0 ve bir Windows Server 2003 üzerine NRPE addonu yüklenecek ve konfigürasyonları yapılacak. Bu şekilde ilgili hostlar -NRPE kurulumu ile birlikte gelen- nagios pluginlerini çalıştırmak üzere Nagios servardan komut alabilir duruma gelecekler.
CentOS 5.2 Üzerine NRPE kurulumu
CentOS’a NRPE kurmanın en güzel yolu yum paket yöneticisini kullanmaktır. Ancak default CentOS 5 depolarında nagios-nrpe paketi bulunmadığından dolayı rpmforge’un reposunu yum database’ine ekleyeceğiz. Bu işlem için aşağıdaki adımları izleyin.
Not:
1 - Bu yazıyı hazırlarken, rpmforge’un CentOS için olan repo rpm versiyonu 0.3.6-1 idi. Aşağıdaki wget satırı ile download etmeden önce yeni bir versiyonun çıkıp çıkmadığını http://dag.wieers.com/rpm/packages/rpmforge-release/ adresinden kontrol edip son sürümü download edin.
2 - Wget satırındaki link tek bir satırdan ibarettir.
# wget http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-
0.3.6-1.el5.rf.i386.rpm
# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm -K rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -i rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Bu işlemlerden sonra nagios-nrpe isimli paketi kuruyoruz ve sistem açılışlarında başlatılması için startup’a ekliyoruz.
# yum -y install nagios-nrpe
# chkconfig --level 2345 nrpe on
Herhangi bir sorunla karşılaşmadıysanız şimdiki adım NRPE ile ilgili yapılandırmalarda.
NRPE’nin default conf dosyası /etc/nagios/ altındaki nrpe.cfg isimli dosyadır. Çok fazla bir değişiklik yapmamıza gerek yok. Bu dosyada Nagios’tan gelen plugin çalıştırma istekleri sırasında kullanılacak komutlar tanımlanmış durumdadır. Aşağıda bu bölümün bir çıktısını görebilirsiniz:
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
Dikkat ettiğiniz gibi bu komutlar ilgili pluginleri çalıştırıyorlar ve warning ya da critical durumlar için eşik değerleri burada belirleniyor. En üstteki satırı ele alırsak, Nagios’a user sayısı 5 olduğunda warning, 10 olursa critical değeri döndürmesi belirtiliyor. Siz bu eşik değerlerini isteğinize göre düzenleyebilirsiniz. Ayrıca, birden fazla diskiniz ya da disk bölümünüz varsa, check_disk komutuna benzer ama farklı bir isme sahip satırlar girebilirsiniz.
Bunun dışında, değiştirmeyeceğimiz için değinmeyeceğim bazı temel satırlar da mevcut bunları da dosya içerisinde yapılmış açıklamalardan yola çıkarak değiştirebilirsiniz.
Şimdi NRPE servisini çalıştıralım.
# service nrpe start
NRPE daemon’u TCP 5666 portunu dinlemektedir. NRPE’nin düzgün çalışıp çalışmadığına netstat ile bakabilirsiniz. Komut ve çıktısı aşağıdaki gibidir.
# netstat -an |grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
Ayrıca, Nagios sunucusunda check_nrpe pluginini manuel olacak çalıştırarak durumu kontrol edebilirsiniz. Komut ve çıktısı:
# /usr/local/nagios/libexec/check_nrpe -H Host_IP'si
NRPE v2.5.1
Benzer çıktıları aldıysanız NRPE düzgün çalışıyor demektir.
FreeBSD 7.0 Üzerine NRPE kurulumu
NRPE addon’u FreeBSD’ye port edilmiş durumdadır, bu nedenle direk olarak aşağıdaki şekilde portstan kurulum yapabilirsiniz.
Not: Sisteminizde ports collection yüklü değil ya da update edilmemiş durumdaysa önce bu işlemleri yapmanız gerekmekte. Şu sayfadan yararlanarak ports’u kurabilir ya da update edebilirsiniz: http://blog.cagriersen.net/2008/06/using-portsnap/
Aşağıdaki adımları uygulayarak kurulumu yapın.
# cd /usr/ports/net-mngt/nrp2
# make install clean
Not: make install clean dediğiniz zaman gelen ekranda SSL supportu da seçin. Nagios sunucusu üzerindeki check_nrpe plugin önm tanımlı olarak SSL üzerinden bağlantı kuracağı için, SSL desteği vermemeniz soruna neden olur.
NRPE örnek konfig dosyası, /usr/local/etc altında nrpe.cfg-sample ismi ile bulunmaktadır. Bu dosyası aşağıdaki gibi copyalayarak nrpe.cfg olarak set edin.
# cp nrpe.cfg-sample nrpe.cfg
Conf dosyasının içeriği CentOS için verilen örnekte anlatılanlarla hemen hemen aynı, sadece küçük iki değişiklik var.
Birincisi, NRPE, CentOS üzerinde xinetd altında çalışıyor, ancak FreeBSD’de standalone daemon olarak çalışmakta. Bu nedenle, nrpe.cfg dosyasının allowed_hosts kısımına kendi nagios sunucumuzun ip’sini eklememiz gerekiyor.
/usr/local/etc/nrpe.cfg dosyasını editleyin ve allowed_hosts satırını bularak aynen aşağıda olduğu gibi Nagios sunucunuzun ip adresini girin.
allowed_hosts=127.0.0.1,Nagios_Serverın_IP'si
Bir diğer fark ise, komutların ve eşik değerlerinin belirtildiği satırlardaki check_disk bölümleridir. Zira FreeBSD’nin disk partitioning yapısı her sistem dizinini bir partisyon olarak set etmek üzere kurulduğundan dolayı FreeBSD’lerdeki bu conf tanımları aşağıdaki gibi görünmektedir.
command[check_users]=/usr/local/libexec/nagios/check_users -w 5 -c 10
command[check_load]=/usr/local/libexec/nagios/check_load -w 15,10,5 -c 30,25,20
command[check_root]=/usr/local/libexec/nagios/check_disk -w 20% -c 10% -p /
command[check_var]=/usr/local/libexec/nagios/check_disk -w 20% -c 10% -p /var
command[check_tmp]=/usr/local/libexec/nagios/check_disk -w 20% -c 10% -p /tmp
command[check_usr]=/usr/local/libexec/nagios/check_disk -w 20% -c 10% -p /usr
command[check_zombie_procs]=/usr/local/libexec/nagios/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/libexec/nagios/check_procs -w 150 -c 200
Gördüğünüz gibi disklerle ilgili bölümlerde her partisyon için bir check_disk satırı bulunuyor.
Eşik değerlerini ve geri kalan tüm ayarları açıklamalardan hareketle keyfinize göre değiştirebilirsiniz. Ancak nrpe bu hazır ayarlar ve allowed_hosts satırında yaptığımız ekleme ile sorunsuz olarak çalışacaktır.
Son olarak sistem açılışlarında otomatik başlatılması için aşağıdaki komut ile rc.conf dosyasına gerekli satırı girin ve NRPE’yi çalıştırın.
# echo nrpe2_enable='"YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/nrpe2 start
NRPE sorunsuz olarak çalışıyorsa, netstat ile dinlediği portu görebilirsiniz.
# netstat -an |grep 5666
tcp4 0 0 *.5666 *.* LISTEN
Ayrıca, gene Nagios Server üzerinden check_nrpe komutunu çalıştırıp duruma bakabilirsiniz.
Örnek çıktı aşağıdaki gibi olmalıdır:
# /usr/local/nagios/libexec/check_nrpe -H Host_IP'si
NRPE v2.5.1
FreeBSD ile ilgili NRPE konusu bu kadar. Şimdi diğer aşamalara geçebiliriz.
Windows Server 2003 üzerine NSClient++ kurulumu
Yazının başında teorik olarak NSClient + +’dan bahsetmiştim, şimdi konuyu biraz daha açmak icap ediyor. Bir windows üzerine NSClient + + agenti aynı NRPE’de olduğu gibi 5666. porta yerleşiyor ve nagios, bu host ile irtibata geçerek, pluginleri içerisinde bulunan check_nt ile Windows makinelere kontrol pluginlerinin çalışmasını söylüyor.
Kurulumu da çok basit.
http://sourceforge.net/project/showfiles.php?group_id=131326&package_id=144099 adresinden NSClinet ++’yı download edip ve next next next şeklinde kuruyorsunuz. Bu şekilde agent, nagios pluginleri ile birlikte bir sistem servisi olarak kuruluyor.
Yapılandırma dosyası C:\Program Files\NSClient++ altında bulunan NSC.INI isimli dosya. Burada bir iki küçük değişiklik yapmak icap ediyor.
NSC.INI dosyasını açın ve dosyanın üstlerinde yer alan ve aşağıda görmüş olduğunuz satırları bularak başlarındaki (;) noktali virgül işaretlerini kaldırarak uncomment edin.
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
NSClientListener.dll
NRPEListener.dll
SysTray.dll
CheckEventLog.dll
CheckHelpers.dll
CheckWMI.dll
Daha sonra FreeBSD için yapmış olduğumuz gibi INI dosyası içerisindeki allowed_hosts satırını bulun ve başındaki (;) işaretini kaldırın. Ayrıca aşağıda görmüş olduğunuz gibi 127.0.0.1 ibaresini silip yerine Nagios Sunucunuzun ip adresini yazın.
allowed_hosts=Nagios_Sunucusu
Not: Dosya içerisinde bu satırdan iki tane var. Siz yukarıda kalan Settings başlıklı bölümdekini değiştireceksiniz.
Şimdi NSClient hazır, command prompt’ta aşağıdaki komutu girerek servisi çalıştırın:
C:\>net start NSClientpp
netstat ile portun dinlenip dinlenmediğine bakın. Komut ve çıktısı aşağıdaki gibi olmalıdır.
C:\>netstat -an |find /i ":5666"
TCP 0.0.0.0:5666 0.0.0.0:0 LISTENING
Görüldüğü gibi port dinleniyor. Şimdi nagios sunucusundan test edelim.
Komut ve çıktı aşağıdaki gibi olmalıdır.
# /usr/local/nagios/libexec/check_nrpe -H 212.154.28.203
I (0.3.5.1 2008-09-24) seem to be doing fine...
(Evet NRPE ile check ettik.)
Artık windows makine de monitor edilmeye hazır.
Şimdi son aşamaya geçelim.
Nagios’un Yapılandırılması
Elimizde monitor edilmeye hazır üç adet makine olduğuna göre yapmamız gereken tek şey Nagios’u bu makineleri monitor edebilmesi için yapılandırmaktan ibaret. Ancak ben yapılandırma ile ilgili konularda, oluşturulması gereken dosyaları ya da eklenmesi gereken satırları vermekle birlikte üzerinde çalışacağımız dosyalar hakkında -yeri geldikçe- detay vermeyi de sürdüreceğim. Bu şekilde konunun daha iyi kavranabileceğini düşünüyorum.
Not: Yapılandırma sırasında, monitor edilecek bilgisayarların isimleri FREEBSD, CENTOS ve WIN2003 olarak verilecektir.
İşe, öncelikle host ve servisler için kullanılacak şablonların oluşturulduğu templates.cfg dosyasından başlamak yerinde olur. Bu dosyaya çok küçük bir iki şey ekleyeceğiz. Şablonlar /usr/local/nagios/etc/objects/templates.cfg isimli dosya da tanımlanmaktadır. Dosya’yı editlediğinizde aşağıdaki gibi ana başlıklara bölünmüş tanımlamalar göreceksiniz. İlk olarak bunlara değinelim sonrasında eklemeleri yapalım.
Contact Şablonu
###############################################################################
###############################################################################
#
# CONTACT TEMPLATES
#
###############################################################################
###############################################################################
# Generic contact definition template - This is NOT a real contact, just a template!
define contact{
name generic-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
register 0
}
Bu satırlar aslında conf dosyasının içinde satır yanlarında yazıyor. (Ben kalabalık yapmamak için buraya aktarmadım ama kısaca değinmek istiyorum.)
service_notification_period : Servisler için uyarı mesajları hangi periyodda gönderilecek. (Herzaman - 24×7)
service_notification_period: Hostlar için uyarı mesajları hangi periyodda gönderilecek. (Herzaman - 24×7)
service_notification_options: Servisler için hangi durumlarda mesaj gönderilecek. (Hepsi - warning, critical vs.)
host_notification_options: Hostlar için hangi durumlarda mesaj gönderilecek. (Hepsi - Up, Down, Unreachable.)
service_notification_commands: Servisler için hangi yolla mesaj göndelecek. (commands.cfg dosyasında belirtilmiş olan komutun adı.)
host_notification_commands: Hostlar için hangi yolla mesaj göndelecek. (commands.cfg dosyasında belirtilmiş olan komutun adı.)
Host Şablonları
Aynı dosya içerisindeki bir diğer bölüm ise içeriğini aşağıda önemli ilk üç şablonu görebileceğiniz host şablonları.
#########################################################
#
# HOST TEMPLATES
#
########################################################
define host{
name generic-host
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
notification_period 24x7
register 0
}
Bu kısımda, her türlü özelliğin aktif olduğunu görebilirsiniz. Yeni isimlerle kendi host şablonlarınızı oluşturup bu şablonları kullanacağınız makineler için bazı özellikleri devre dışı bırakabilirsiniz.
Ayrıca, Nagios kurulum sırasında Linux ve Windows makineler için de aşağıdaki gibi şablonlar oluşturuyor.
# Linux host definition template - This is NOT a real host, just a template!
define host{
name linux-server
use generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period workhours
notification_interval 120
notification_options d,u,r
contact_groups admins
register 0
}
# Windows host definition template - This is NOT a real host, just a template!
define host{
name windows-server
use generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period 24x7
notification_interval 30
notification_options d,r
contact_groups admins
hostgroups windows-servers
register 0
}
Gördüğünüz gibi linux-server ve windows-server isimli iki adet host şablonu tanımlı ve nasıl bir politika izleneceği belirlenmiş durumda.
Ayrıca, use kısmında generic-host isimli, bir önceki adımda bahsettiğimiz tüm özelliklerin aktif olduğu genel şablon kullanılıyor. Bu şekilde, her özel host şablonu tanımladığınızda aynı satırları tekrar tekrar yazmak zorunda kalmıyorsunuz. Use komutu ile sık sık karşılaşacağız.
Açıklamalar şu şekilde:
use: Hangi genel host şablonu kullanılacak (tüm özelliklerin aktif edildiği generic-host)
check_period: Hangi zaman dilimlerinde kontrol işlemi yapılacak. (Herzaman)
check_interval: Kaç dakikada bir kontrol işlemi yapılacak. (5)
retry_interval: Durumu UP olmayan hostlar için yeniden check işlemi kaç dakikada bir yapılacak. (1)
max_check_attempts: Durumu UP olmayan hostlar için yeniden check işlemi kaç kez tekrarlanacak. (10)
check_command: Hostun UP olup olmadığına hangi komut ile bakılacak. (commands.cfg - check-host-alive komutu)
notification_period: Uyarı mesajları hangi zaman dilimlerinde kontrol işlemi yapılacak. (Herzaman)
notification_interval: Uyarı mesajları kaç dakikada bir tekrar gönderilecek. (120)
notification_option: Hangi durumlar için uyarı mesajı gönderilecek. (Down, Unreachable, Recovery)
contact_groups: Uyarılar hangi contact grubuna gönderilecek. (contacts.cfg dosyasında tanımlanan admins grubuna)
Bu host şablonları dışında aynı dosya içerisinde printer ve swicthler için de generic-host şablonunu kullanan birer host şablonu bulunmakta.
Servis Şablonları
templates.cfg dosyası içerisindeki bir diğer bölüm ise servislerle ilgili şablonların oluşturduğu kısımdır.
############################################################
#
# SERVICE TEMPLATES
#
############################################################
define service{
name generic-service
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 10
retry_check_interval 2
contact_groups admins
notification_options w,u,c,r
notification_interval 60
notification_period 24x7
register 0
}
Burada da aynen generic-host isimli şablonda olduğu gibi servis kontrollerinde izlenecek politikalar ve hangi özelliklerin aktif olacağı ile ilgili tanımlamalar yapılmış vaziyette. Önemli satırlara, yazının genelinde ve son olarak generic-host bölümünde de değindiğim için bu kısımda ayrıca detay vermeyeceğim.
Bu default servis tanımının yanı sıra lokal servisler için kullanılmak üzere bir adet daha şablon bulunmakta:
define service{
name local-service
use generic-service
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
register 0
}
Buraya kadar olan kısım, Nagios tarafından öntanımlı oluşturulmuş alanlardı. Bu şablonları isteğinize göre değiştirebilir ya da yenilerini ekleyebilirsiniz. Ancak hazır durumdakiler genel olarak gayet yeterlidir.
Host ve Servis Grup Tanımlamaları
Yazının başlarında, host ve servisler için grup tanımlamaları yaptığımı ve bu şekilde web arayüzünden gelişmiş raporlar çekebildiğimi söylemiştim. Şimdi genel geçer host ve servis tanımlarını templates.cfg dosyası içerisinde belirtelim.
Dosyayı editleyin ve en alta aşağıdaki satırları ekleyin.
###############################################################################
###############################################################################
#
# HOST/SERVICE GROUP DEFINITIONS
#
###############################################################################
###############################################################################
define hostgroup{
hostgroup_name windows-servers ; Host Grubunun Adi
alias Windows Servers ; Aciklama
members WIN2003 ; Gruba uye makineler.
}
define hostgroup{
hostgroup_name linux-servers ; Host Grubunun Adi
alias *Nix Servers ; Aciklama
members localhost,FREEBSD,CENTOS ; Gruba uye makineler
}
define servicegroup{
servicegroup_name CPU
alias Islemci Durumu
}
define servicegroup{
servicegroup_name Memory
alias Ram Durumu
}
define servicegroup{
servicegroup_name DISK
alias DISK Durumu
}
define servicegroup{
servicegroup_name HTTP
alias Web Server Durumu
}
define servicegroup{
servicegroup_name SMTP
alias Mail Server Durumu
}
define servicegroup{
servicegroup_name FTP
alias FTP Server Durumu
}
Bu şekilde host ve servis gruplarını tanımladık. Ancak henüz iş bitmedi, Linux ve Windows makineler için kullanılmak üzere birer grup tanımlaması, kurulum sırasında Nagios tarafından yapılıyor. Windows grubu için tanımlama objects/ dizininin altındaki windows.cfg dosyası içerisinde bulunuyor. Linux içinse localhost.cfg dosyasında bulunuyor. Ancak ben derli toplu olması için bu tip tanımlamaların hepsini templates.cfg dosyasında yapıyorum. Dolayısı ile localhost.cfg ve windows.cfg dosyalarından # HOST GROUP DEFINITIONS
bölümlerini silmeniz gerekiyor. (dosyalar /usr/local/nagios/etc/objects dizini altında duruyor.).
Yukarıda bahsettiğim host grup olayı tamamen keyfi uygulamamdır. Dolayısı ile siz istemezseniz bu host (servis değil) grupları templates.cfg dosyasından çıkarabilirsiniz. Ancak bu durumda orjinal yerlerinden silmemelisiniz.
Son olarak servis gruplarına göz atarsanız ilk etapta lazım olacak hemen her türlü kategori için bir grup oluşturulduğunu görebilirsiniz. Siz ihtiyaca göre daha fazla grup ekleyebilirsiniz.
Artık ikinci aşamaya geçebiliriz.
Hostlar İçin CFG Dosyaları
Şimdi, her bir bilgisayar için birer cfg dosyası tanımlayacağız ve dosyaların path’lerini ana conf dosyası olan nagios.cfg dosyasında bildireceğiz. Ancak bu bölümün sonuna kadar nagios servisini restart etmeyeceğiz. Çünkü dosyalardaki tüm ifadeler birbirleri ile bağımlı çalıştığından dolayı tüm conf bitmeden restart ederseniz hata alırsınız.
Önce dosyaları oluşturalım.
(Dosya isimleri olarak ilgili OS adları kullanılacak.)
# touch /usr/local/nagios/etc/objects/freebsd.cfg
# touch /usr/local/nagios/etc/objects/centos.cfg
# touch /usr/local/nagios/etc/objects/win2003.cfg
Not: İlgili dizinde öntanımlı bir windows.cfg dosyası bulunduğu için biz win2003.cfg ismini kullanıyoruz.
Dosyalara yazılması gerekenler şu şekilde:
Kırmızı ile işaretlenmiş bölümleri düzeltmeyi unutmayın.)
/usr/local/nagios/etc/objects/freebsd.cfg
#####################################################################
#
#FREEBSD HOST YAPILANDIRMA DOSYASI
#
#####################################################################
define host{
use linux-server ; Inherit default values from a template
host_name FREEBSD ; The name we're giving to this server
alias FREEBSD / FreeBSD 7.0 ; A longer name for the server
address FreeBSD'nin_IP-Adresi ; IP address of the server
}
define service{
use generic-service
host_name FREEBSD
service_description CPU Load
servicegroups CPU
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name FREEBSD
service_description Current Users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name FREEBSD
service_description / Free Space
servicegroups DISK
check_command check_nrpe!check_root
}
define service{
use generic-service
host_name FREEBSD
service_description /usr Free Space
servicegroups DISK
check_command check_nrpe!check_usr
}
define service{
use generic-service
host_name FREEBSD
service_description /var Free Space
servicegroups DISK
check_command check_nrpe!check_var
}
define service{
use generic-service
host_name FREEBSD
service_description Total Processes
check_command check_nrpe!check_total_procs
}
define service{
use generic-service
host_name FREEBSD
service_description Zombie Processes
check_command check_nrpe!check_zombie_procs
}
Görüldüğü gibi lokal kaynakların hemen hepsi monitor edilecek. Dikkat ederseniz templates.cfg dosyasında oluşturulan şablonlar freebsd.cfg dosyası içerisinde use komutu ile kullanılıyor.
Şimdi de CentOS için oluşturduğumuz cfg dosyasında gerekli tanımlamaları yapalım.
/usr/local/nagios/etc/objects/centos.cfg
#####################################################################
#
#CENTOS HOST YAPILANDIRMA DOSYASI
#
#####################################################################
define host{
use linux-server
host_name CENTOS
alias CENTOS / CentOS 5.2 64bit
address 192.168.0.221
}
define service{
use generic-service
host_name CENTOS
service_description CPU Load
servicegroups CPU
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name CENTOS
service_description Current Users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name CENTOS
service_description / Free Space
servicegroups DISK
check_command check_nrpe!check_disk
}
define service{
use generic-service
host_name CENTOS
service_description Total Processes
check_command check_nrpe!check_total_procs
}
define service{
use generic-service
host_name CENTOS
service_description Zombie Processes
check_command check_nrpe!check_zombie_procs
}
Benzer tanımlar burada da geçerli. Yine linux-server isimli şablonu ve ilgili servis gruplarını belirtiyoruz.
Bir tane de Win2003 Server için yapalım.
/usr/local/nagios/etc/objects/win2003.cfg
#####################################################################
#
#WINDOWS HOST YAPILANDIRMA DOSYASI
#####################################################################
define host{
use windows-server
host_name WIN2003
alias WIN2003 - Windows 2003
address Windows'un_IP_Adresi
}
define service{
use generic-service
host_name WIN2003
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
define service{
use generic-service
host_name WIN2003
service_description Uptime
check_command check_nt!UPTIME
}
define service{
use generic-service
host_name WIN2003
service_description CPU Load
servicegroups CPU
check_command check_nt!CPULOAD!-l 5,80,90
}
define service{
use generic-service
host_name WIN2003
service_description Memory Usage
servicegroups Memory
check_command check_nt!MEMUSE!-w 80 -c 90
}
define service{
use generic-service
host_name WIN2003
service_description C:\ Drive Space
servicegroups DISK
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
define service{
use generic-service
host_name WIN2003
service_description D:\ Drive Space
servicegroups DISK
check_command check_nt!USEDDISKSPACE!-l d -w 90 -c 95
}
Burada check_nrpe yerine check_nt plugini kullanılıyor. Ve eşikler NRPE’nin aksine direk Nagios server üzerindeki bu dosya üzerinden belirleniyor.
Üç host için de conf dosyası oluşturulduğuna göre, son adıma geçebiliriz.
Nagios.cfg - Ana Yapılandırma Dosyası
Bu dosyada yapmamız gereken tek şey, üç host için oluşturduğumuz cfg dosyalarının pathlerini bildirerek monitoring işleminin başlamasını sağlamak.
/usr/local/nagios/etc/nagios.cfg dosyasını açın ve aşağıda görüldüğü şekliyle FreeBSD ve Centos için oluşturulan cfg dosyalarının yerini # Definitions for monitoring the local (Linux) host kısmının altında belirtin. Aynı şeyi bir de Win2003 için # Definitions for monitoring a Windows machine satırı altında yapın.
İlgili bölümler şu şekilde görünmelidir:
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/freebsd.cfg
cfg_file=/usr/local/nagios/etc/objects/centos.cfg
# Definitions for monitoring a Windows machine
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg
cfg_file=/usr/local/nagios/etc/objects/win2003.cfg
Şu an temel kaynakları monitör etmek için gerekli olan tanımlamalar yapıldı.
Şimdi aşağıdaki komut ile konfigürasyonu kontrol edelim ve sorun olup olmadığına bakalım.
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Çıktı aşağıdaki gibiyse conf doğrudur demektir. Bu durumda nagios servisini restart edip (service nagios restart), değişiklikleri aktif edebilirsiniz.
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
Artık monitoring durumunu Nagios web arayüzünden görebiliyor olmalısınız. Görüntü şuna benzer olmalı:
Görüldüğü gibi Windows Server 2003′ün C diski warning eşiği olan %80 geçmiş durumda. Bu nedenle nagios contacts.cfg dosyasında tanımlanan admin e-mail adresine bir uyarı maili gönderecek.
Söz konusu mailin içeriği şu şekilde:
***** Nagios *****
Notification Type: PROBLEM
Service: C:\ Drive Space
Host: WIN2003 - Windows 2003
Address: Win2003'ün IP Adresi
State: WARNING
Date/Time: Thu Jan 15 22:44:18 EET 2009
Additional Info:
c:\ - total: 14.65 Gb - used: 12.32 Gb (84%) - free 2.33 Gb (16%)
Temel olarak konfigürasyon işlemleri bundan ibaret. Ancak örnek senaryoda http, smtp, pop3, ftp ve MS IIS gibi servislerin de monitör edileceğini söylemiştim. Şimdi bu monitoring şekilleri için tanımlamaları yapalım. Genel tanımlar oluşturulduğu için artık sadece hostlara ait cfg dosyalarına ekleme yapacağız.
HTTP Response Check
CentOS üzerinde httpd servisi çalışıyor demiştik. Şimdi httpd servisinin durumunu kontrol etmek için gerekli conf satırlarını girelim.
/usr/local/nagios/etc/centos.cfg dosyasını editleyin ve en altına şu satırları girin:
define service{
use generic-service
host_name CENTOS
service_description HTTP Response Check
servicegroups HTTP
check_command check_http!-u /index.html -t 5 -s "Hello World"
}
Bu satırlar, Centos’un üzerinde çalışan web sitesinin gelip gelmediğini kontrol ediyor. İlgili web sitesinde “Hello World” ibaresi içeren bir index.html sayfası bulunuyor. Nagios periyodik olarak check_http pluginini çalıştıracak ve index.html’i çağırarak “Hello World” ibaresinin gelip gelmediğini kontrol edecek. Eğer gelmezse web sitesi çalışmıyor demektir. Bu durumda bir uyarı mesajı gönderecek.
Smtp Check
Şimdi de FreeBSD üzerinde çalışan SMTP servisini kontrol edelim.
/usr/local/nagios/etc/freebsd.cfg dosyasını editleyin ve en altına kendinize göre düzenleyerek şu satırları girin:
define service{
use generic-service
host_name FREEBSD
service_description SMTP Response Check
servicegroups SMTP
check_command check_smtp!-t 5 -e "esmtp.localtest.com"
}
Burada da, check_smtp plugini ile FreeBSD’nin smtp servis durumu kontrol ediliyor. FreeBSD’nin üzerindeki smtp servisi, bağlantıda bulunanlara “esmtp.localtest.com” şeklinde bir karşılama banneri döndürüyor. Nagios da periyodik olarak smtp servisine bağlanacak ve karşılama bannerinin 5 saniye içerisinde gelip gelmediğini kontrol edecek.
Pop3 Check
Gene FreeBSD’de çalışan pop3 servisini kontrol etmek için /usr/local/nagios/etc/freebsd.cfg dosyasını editleyin ve en altına kendinize göre düzenleyerek şu satırları girin:
define service{
use generic-service
host_name FREEBSD
service_description POP3 Response Check
servicegroups SMTP
check_command check_pop!-t 5 -e "pop3.localtest.com"
}
SMTP kontrolünün check_pop plugini ile yapılan Pop3 versiyonu. (Gördüğünüz gibi SMTP servis grubuna dahil edilmiş durumda, ancak siz POP3 icin templates.cfg dosyasında bir grup tanımlaması yaparak bu check işlemini o gruba dahil edebilirsiniz.)
FTP Check
FTP servisi de FreeBSD üzerinde çalışıyor varsayıyoruz; /usr/local/nagios/etc/freebsd.cfg dosyasını editleyin ve en altına kendinize göre düzenleyerek şu satırları girin:
define service{
use generic-service
host_name FREEBSD
service_description FTP Response Check
servicegroups FTP
check_command check_ftp!-t 5 -e "ftp.localtest.com"
}
Benzer şekilde FTP’den dönmesi gereken karşılama mesajı check_ftp plugini ile kontrol ediliyor.
Windows IIS Servisi Check
/usr/local/nagios/etc/win2003.cfg dosyasını editleyin ve en altına kendinize göre düzenleyerek şu satırları girin:
define service{
use generic-service
host_name WIN2003
service_description W3SVC
servicegroups HTTP
check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}
Bu da windows üzerindeki W3SVC servisini kontrol ediyor.
Zannedersem bu kadar örnek, diğer uygulma çeşitlerine referans olmak için yeterli olur. Nagios Plugin’lerini inceleyerek ve kaynak linklerine göz atarak çok daha fazla alanda check işlemi yapmanız mümkün.
Biraz uzun bir yazı oldu; ancak gördüğünüz gibi Nagios’un özellikle yapılandırma ile ilgili bölümleri biraz komplike. Elimden geldiğince yalın ve açık olarak anlatmaya çalıştım. Umarım işinize yarar. Dökümanda gözümden kaçan noktalar olmuş olabilir. Böyle bir şey farketmeniz durumunda bilgi verirseniz sevinirim.
Kaynaklar:
http://www.nagios.org
http://community.nagios.org/wiki/index.php/Main_Page
Yorumlar