Nagios Plugin’lerini CentOS 6 Üzerinde Bash ile Oluşturma Rehberi
Nagios, sistem yöneticilerinin altyapılarını izlemeleri için vazgeçilmez bir araçtır. Sunucular, ağ cihazları, uygulamalar ve hizmetler gibi birçok farklı bileşenin durumunu sürekli olarak denetleyerek potansiyel sorunları proaktif bir şekilde tespit etmeye yardımcı olur. Nagios’un gücü, esnek eklenti (plugin) mimarisinden gelir. Bu makalede, CentOS 6 ortamında Bash betikleri kullanarak kendi Nagios eklentilerinizi nasıl oluşturacağınızı adım adım inceleyeceğiz.
Nagios Plugin Temelleri
Nagios, izlemek istediği bir hizmetin veya kaynağın durumunu belirlemek için harici betikleri veya yürütülebilir dosyaları çalıştırır. Bu betikler, Nagios tarafından “plugin” olarak adlandırılır. Bir plugin’in temel görevi, belirli bir kontrolü gerçekleştirmek, ardından bu kontrolün sonucunu standart çıktıya (stdout) yazdırmak ve bir dönüş kodu (exit code) ile Nagios’a bildirmektir.
Çalışma Prensibi
Nagios, yapılandırma dosyasında tanımlanan bir komutu belirli aralıklarla çalıştırır. Bu komut genellikle bir plugin’i ve ona iletilecek argümanları içerir. Plugin çalıştığında, yaptığı kontrol sonucunda dört ana durumdan birini Nagios’a bildirir:
* OK (0): Her şey yolunda. Kaynak normal çalışıyor.
* WARNING (1): Bir sorun olabilir. Kaynak hala çalışıyor ancak belirli bir eşiğe yaklaşıyor veya küçük bir anormallik var.
* CRITICAL (2): Ciddi bir sorun var. Kaynak düzgün çalışmıyor veya tamamen başarısız oldu.
* UNKNOWN (3): Plugin, kontrolü gerçekleştiremedi veya beklenmedik bir hata oluştu. Bu durum genellikle plugin’in kendisinde bir sorun olduğunu veya yeterli bilgiye sahip olmadığını gösterir.
Bu dönüş kodları, Nagios’un web arayüzünde görünen renkli durum göstergelerini ve bildirim tetikleyicilerini doğrudan etkiler.
Standart Çıktı ve Performans Verileri
Bir Nagios plugin’i, durum kodunun yanı sıra, kontrolün sonucunu açıklayan bir metin mesajını standart çıktıya yazmalıdır. Bu mesaj genellikle tek bir satır olmalı ve hizmetin veya kaynağın mevcut durumu hakkında kısa bir özet sunmalıdır.
Opsiyonel olarak, plugin performans verilerini de sağlayabilir. Performans verileri, Nagios’un izleme verilerini grafiklere dönüştürmek ve trendleri analiz etmek için kullandığı sayısal değerlerdir. Performans verileri, ana çıktı mesajından dikey çizgi (|) ile ayrılır ve belirli bir formatı takip eder:
SERVICE STATUS: Descriptive message | 'metric_name'=valueUOM;warning;critical;min;max
* SERVICE STATUS: OK, WARNING, CRITICAL, UNKNOWN
* Descriptive message: İnsan tarafından okunabilir durum özeti.
* metric_name: İzlenen metriğin adı (örn. ‘disk_usage’, ‘cpu_load’).
* value: Metriğin mevcut değeri.
* UOM (Units of Measure): Birim (örn. %, MB, s).
* warning: Uyarı eşiği.
* critical: Kritik eşik.
* min: Metriğin alabileceği minimum değer.
* max: Metriğin alabileceği maksimum değer.
Örnek Çıktı:
DISK OK: /dev/sda1 is 20% utilized | 'disk_usage'=20%;80;90;0;100
Bu yapı, Nagios’un izleme verilerini anlamlandırması ve görselleştirmesi için kritik öneme sahiptir.
Geliştirme Ortamının Hazırlanması
Nagios plugin’leri geliştirmek için özel bir IDE’ye veya karmaşık araçlara ihtiyacınız yoktur. Temel bir Linux terminali ve metin düzenleyici yeterlidir.
CentOS 6 Üzerinde Temel Araçlar
CentOS 6, Bash kabuğunu varsayılan olarak içerir. Bu nedenle, Bash betiklerini çalıştırmak için ek bir kurulum yapmanıza gerek yoktur. Metin düzenleyici olarak vi, vim veya nano gibi araçları kullanabilirsiniz. yum paket yöneticisi ve sudo komutu da sistem yönetimi görevleri için elinizin altında olacaktır.
Bu makalede, Nagios sunucusunun veya Nagios Remote Plugin Executor (NRPE) istemcisinin CentOS 6 üzerinde kurulu ve çalışır durumda olduğunu varsayıyoruz. Eğer kurulu değilse, öncelikle Nagios veya NRPE kurulumunu tamamlamanız gerekmektedir.
Plugin Dizini ve İzinler
Nagios plugin’leri genellikle /usr/local/nagios/libexec/ dizininde veya /opt/nagios/libexec/ gibi benzer bir konumda bulunur. Bu dizin, Nagios’un plugin’leri aradığı varsayılan yerdir. Kendi plugin’inizi oluşturduğunuzda, onu bu dizine kaydetmelisiniz.
Plugin dosyasının Nagios tarafından çalıştırılabilmesi için yürütme iznine sahip olması gerekir. Bunu chmod komutuyla ayarlayabilirsiniz:
sudo chmod +x /usr/local/nagios/libexec/my_custom_plugin.sh
Ayrıca, plugin’i çalıştıracak olan Nagios kullanıcısının (genellikle nagios kullanıcısı) bu dosyaya okuma ve yürütme yetkisine sahip olduğundan emin olun. Gerekirse dosyanın sahipliğini nagios kullanıcısına ve grubuna atayabilirsiniz:
sudo chown nagios:nagios /usr/local/nagios/libexec/my_custom_plugin.sh
Basit Bir Nagios Plugin’i Oluşturma
Şimdi, Nagios için ilk Bash plugin’imizi oluşturalım.
“Hello World” Plugin’i
En basit plugin, sadece bir mesaj yazıp başarılı bir durum kodu döndüren bir betiktir.
1. Plugin dosyasını oluşturun:
sudo vi /usr/local/nagios/libexec/check_hello_world.sh
2. Aşağıdaki içeriği dosyaya yapıştırın:
#!/bin/bash
#
# Nagios Plugin: check_hello_world
# A simple "Hello World" plugin for Nagios
#
echo "HELLO WORLD OK: This is my first Nagios plugin!"
exit 0
3. Dosyayı kaydedin ve kapatın.
4. Yürütme izni verin:
sudo chmod +x /usr/local/nagios/libexec/check_hello_world.sh
5. Test edin: Plugin’i komut satırından manuel olarak çalıştırarak doğru çıktıyı verdiğinden ve doğru dönüş kodunu döndürdüğünden emin olun:
/usr/local/nagios/libexec/check_hello_world.sh
echo $? # Dönüş kodunu kontrol edin, 0 olmalı
Çıktı şöyle olmalı:
HELLO WORLD OK: This is my first Nagios plugin!
0
Bu basit plugin, Nagios’un temel gereksinimlerini karşılar.
Argümanlarla Çalışma
Gerçek dünya plugin’leri genellikle dinamiktir ve belirli parametrelere (eşikler, dosya yolları vb.) ihtiyaç duyar. Bash betiklerinde argümanları $1, $2, $3 gibi değişkenlerle alabilirsiniz.
Bir örnek olarak, bir metin dosyasında belirli bir kelimenin olup olmadığını kontrol eden ve uyarı/kritik eşikleri argüman olarak alan bir plugin oluşturalım.
1. Plugin dosyasını oluşturun:
sudo vi /usr/local/nagios/libexec/check_file_keyword.sh
2. Aşağıdaki içeriği dosyaya yapıştırın:
#!/bin/bash
#
# Nagios Plugin: check_file_keyword
# Checks for the occurrence of a keyword in a file
#
# Usage: check_file_keyword.sh
#
FILE_PATH=$1
KEYWORD=$2
WARNING_THRESHOLD=$3
CRITICAL_THRESHOLD=$4
# Check if all arguments are provided
if [ -z "$FILE_PATH" ] || [ -z "$KEYWORD" ] || [ -z "$WARNING_THRESHOLD" ] || [ -z "$CRITICAL_THRESHOLD" ]; then
echo "UNKNOWN: Usage: $0 "
exit 3
fi
# Check if file exists
if [ ! -f "$FILE_PATH" ]; then
echo "UNKNOWN: File not found: $FILE_PATH"
exit 3
fi
# Count occurrences of the keyword
COUNT=$(grep -o -i "$KEYWORD" "$FILE_PATH" | wc -l)
# Determine status based on thresholds
if [ "$COUNT" -ge "$CRITICAL_THRESHOLD" ]; then
echo "CRITICAL: Keyword '$KEYWORD' found $COUNT times in $FILE_PATH | 'keyword_count'=$COUNT;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;"
exit 2
elif [ "$COUNT" -ge "$WARNING_THRESHOLD" ]; then
echo "WARNING: Keyword '$KEYWORD' found $COUNT times in $FILE_PATH | 'keyword_count'=$COUNT;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;"
exit 1
else
echo "OK: Keyword '$KEYWORD' found $COUNT times in $FILE_PATH | 'keyword_count'=$COUNT;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;"
exit 0
fi
3. Dosyayı kaydedin ve kapatın.
4. Yürütme izni verin:
sudo chmod +x /usr/local/nagios/libexec/check_file_keyword.sh
5. Test için bir deneme dosyası oluşturun:
echo "This is a test file." > /tmp/test_log.txt
echo "It contains some keywords." >> /tmp/test_log.txt
echo "ERROR: Something went wrong." >> /tmp/test_log.txt
echo "Another line." >> /tmp/test_log.txt
echo "ERROR: Critical failure." >> /tmp/test_log.txt
6. Plugin’i farklı argümanlarla test edin:
/usr/local/nagios/libexec/check_file_keyword.sh /tmp/test_log.txt "ERROR" 1 2
echo $? # Çıktı CRITICAL ve 2 olmalı
/usr/local/nagios/libexec/check_file_keyword.sh /tmp/test_log.txt "test" 1 2
echo $? # Çıktı WARNING ve 1 olmalı
/usr/local/nagios/libexec/check_file_keyword.sh /tmp/test_log.txt "nonexistent" 1 2
echo $? # Çıktı OK ve 0 olmalı
/usr/local/nagios/libexec/check_file_keyword.sh # Argüman eksikliği, UNKNOWN ve 3 olmalı
echo $?
Bu örnek, argümanların nasıl alındığını, temel hata kontrollerinin (dosya varlığı, argüman eksikliği) nasıl yapıldığını ve performans verilerinin nasıl eklendiğini göstermektedir.
Pratik Nagios Plugin Örnekleri
Şimdi, daha yaygın izleme senaryoları için birkaç pratik Bash plugin’i oluşturalım.
Disk Kullanımını Kontrol Eden Plugin
Bu plugin, belirli bir dosya sisteminin disk kullanımını kontrol edecek ve belirlenen eşiklere göre durum döndürecektir.
#!/bin/bash
# Nagios Plugin: check_disk_usage.sh
Checks disk usage for a specified mount point
# Usage: check_disk_usage.sh
MOUNT_POINT=$1
WARNING_PERCENT=$2
CRITICAL_PERCENT=$3
Help message if no arguments or --help is passed
if [ -z "$MOUNT_POINT" ] || [ -z "$WARNING_PERCENT" ] || [ -z "$CRITICAL_PERCENT" ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
echo "Usage: $0 "
echo "Example: $0 / 80 90"
exit 3
fi
Get disk usage for the specified mount point
Use 'df -P' for POSIX compliant output, easier to parse
DISK_INFO=$(df -P "$MOUNT_POINT" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "UNKNOWN: Could not get disk info for $MOUNT_POINT. Check mount point or permissions."
exit 3
fi
Extract percentage used (5th column)
Example df -P output:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 20642280 4128456 15456244 22% /
USED_PERCENT=$(echo "$DISK_INFO" | awk 'NR==2 {print $5}' | sed 's/%//')
Check if USED_PERCENT is a valid number
if ! [[ "$USED_PERCENT" =~ ^[0-9]+$ ]]; then
echo "UNKNOWN: Failed to parse disk usage percentage for $MOUNT_POINT."
exit 3
fi
Determine status
if [ "$USED_PERCENT" -ge "$CRITICAL_PERCENT" ]; then
echo "CRITICAL: $MOUNT_POINT is ${USED_PERCENT}% utilized! | 'disk_usage'=${USED_PERCENT}%;$WARNING_PERCENT;$CRITICAL_PERCENT;0;100"
exit 2
elif [ "$USED_PERCENT" -ge "$WARNING_PERCENT" ]; then
echo "WARNING: $MOUNT_POINT is ${USED_PERCENT}% utilized! | 'disk_usage'=${USED_PERCENT}%;$WARNING_PERCENT;$CRITICAL_PERCENT;0;100"
exit 1
else
echo "OK: $MOUNT_POINT is ${USED_PERCENT}% utilized. | 'disk_usage'=${USED_PERCENT}%;$WARNING_PERCENT;$CRITICAL_PERCENT;0;100"
exit 0
fi
Kaydedin: /usr/local/nagios/libexec/check_disk_usage.sh
İzin verin: sudo chmod +x /usr/local/nagios/libexec/check_disk_usage.sh
Test edin: /usr/local/nagios/libexec/check_disk_usage.sh / 80 90
Bir Servisin Durumunu Kontrol Eden Plugin
Bu plugin, CentOS 6’daki service komutunu kullanarak belirli bir sistem hizmetinin (örneğin httpd veya mysqld) çalışıp çalışmadığını kontrol edecektir.
#!/bin/bash
# Nagios Plugin: check_service_status.sh
Checks the status of a specified system service on CentOS 6
# Usage: check_service_status.sh
SERVICE_NAME=$1
Help message
if [ -z "$SERVICE_NAME" ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
echo "Usage: $0 "
echo "Example: $0 httpd"
exit 3
fi
Check service status using 'service' command (CentOS 6 specific)
The 'service' command returns 0 for running, non-zero for stopped/unknown
service "$SERVICE_NAME" status > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "OK: Service '$SERVICE_NAME' is running."
exit 0
else
# Check if the service exists at all, otherwise it's UNKNOWN
# We can check for init script existence
if [ -f "/etc/init.d/$SERVICE_NAME" ]; then
echo "CRITICAL: Service '$SERVICE_NAME' is stopped!"
exit 2
else
echo "UNKNOWN: Service '$SERVICE_NAME' does not exist or init script not found."
exit 3
fi
fi
Kaydedin: /usr/local/nagios/libexec/check_service_status.sh
İzin verin: sudo chmod +x /usr/local/nagios/libexec/check_service_status.sh
Test edin: /usr/local/nagios/libexec/check_service_status.sh httpd (Eğer httpd kuruluysa)
Bir Dosya Boyutunu Kontrol Eden Plugin
Bu plugin, belirli bir dosyanın boyutunu kontrol edecek ve belirlenen eşiklere göre durum döndürecektir. Özellikle log dosyalarının beklenenden fazla büyümesini izlemek için kullanışlıdır.
#!/bin/bash
# Nagios Plugin: check_file_size.sh
Checks the size of a specified file
# Usage: check_file_size.sh
FILE_PATH=$1
WARNING_SIZE_MB=$2
CRITICAL_SIZE_MB=$3
Help message
if [ -z "$FILE_PATH" ] || [ -z "$WARNING_SIZE_MB" ] || [ -z "$CRITICAL_SIZE_MB" ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
echo "Usage: $0 "
echo "Example: $0 /var/log/messages 100 500"
exit 3
fi
Check if file exists
if [ ! -f "$FILE_PATH" ]; then
echo "UNKNOWN: File not found: $FILE_PATH"
exit 3
fi
Get file size in bytes
FILE_SIZE_BYTES=$(stat -c %s "$FILE_PATH" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "UNKNOWN: Could not get file size for $FILE_PATH. Check permissions."
exit 3
fi
Convert to MB for comparison
FILE_SIZE_MB=$(awk "BEGIN {print $FILE_SIZE_BYTES / (1024*1024)}")
Determine status
if (( $(echo "$FILE_SIZE_MB >= $CRITICAL_SIZE_MB" | bc -l) )); then
echo "CRITICAL: File $FILE_PATH size is $(printf "%.2f" "$FILE_SIZE_MB")MB! | 'file_size'=$(printf "%.2f" "$FILE_SIZE_MB")MB;$WARNING_SIZE_MB;$CRITICAL_SIZE_MB;0;"
exit 2
elif (( $(echo "$FILE_SIZE_MB >= $WARNING_SIZE_MB" | bc -l) )); then
echo "WARNING: File $FILE_PATH size is $(printf "%.2f" "$FILE_SIZE_MB")MB. | 'file_size'=$(printf "%.2f" "$FILE_SIZE_MB")MB;$WARNING_SIZE_MB;$CRITICAL_SIZE_MB;0;"
exit 1
else
echo "OK: File $FILE_PATH size is $(printf "%.2f" "$FILE_SIZE_MB")MB. | 'file_size'=$(printf "%.2f" "$FILE_SIZE_MB")MB;$WARNING_SIZE_MB;$CRITICAL_SIZE_MB;0;"
exit 0
fi
Kaydedin: /usr/local/nagios/libexec/check_file_size.sh
İzin verin: sudo chmod +x /usr/local/nagios/libexec/check_file_size.sh
Test edin: /usr/local/nagios/libexec/check_file_size.sh /var/log/messages 100 500
Gelişmiş Plugin Teknikleri
Plugin’lerinizi daha sağlam ve kullanışlı hale getirmek için bazı gelişmiş teknikler uygulayabiliriz.
Hata Yönetimi ve UNKNOWN Durumu
Plugin’lerinizin beklenmedik durumları doğru bir şekilde ele alması önemlidir. Örneğin, yanlış argümanlar verildiğinde, bir dosya bulunamadığında veya bir komut başarısız olduğunda UNKNOWN (exit 3) durumunu döndürmek en iyi uygulamadır. Yukarıdaki örneklerde bu durumları kontrol eden if blokları bulunmaktadır. Her zaman olası hata durumlarını düşünün ve uygun bir çıkış kodu ile mesaj sağlayın.
Performans Verilerinin Detaylandırılması
Performans verileri, Nagios’un uzun vadeli trendleri izlemesi ve grafikler oluşturması için çok değerlidir. Birden fazla metriği tek bir plugin çıktısında sağlayabilirsiniz:
OK: Everything is fine | 'metric1'=value1UOM;w1;c1;min1;max1 'metric2'=value2UOM;w2;c2;min2;max2
Doğru birimlerin (UOM – Units of Measure) kullanılması ve min/max değerlerinin belirtilmesi, verilerin doğru şekilde yorumlanmasına yardımcı olur.
Örnek: check_cpu_load.sh plugin’i için:
OK: Load average: 0.10, 0.20, 0.30 | 'load1'=0.10;1.0;2.0;0; 'load5'=0.20;0.8;1.5;0; 'load15'=0.30;0.6;1.0;0;
Burada min değeri 0 olarak belirtilmiş, max değeri ise boş bırakılmıştır, bu da maksimumun sınırsız olduğu anlamına gelir.
Yardım Mesajı (Usage/Help)
Plugin’lerinize bir --help veya -h argümanı ile çağrıldığında kullanım talimatlarını gösteren bir yardım mesajı eklemek, plugin’in başkaları (veya gelecekteki siz) tarafından daha kolay anlaşılmasını sağlar.
# ... (başlangıçtaki değişken tanımlamaları) ...
Help message function
print_usage() {
echo "Usage: $0 "
echo "Example: $0 / 80 90"
echo "Checks disk usage for a specified mount point."
exit 3
}
Check for help argument or missing arguments
if [ -z "$MOUNT_POINT" ] || [ -z "$WARNING_PERCENT" ] || [ -z "$CRITICAL_PERCENT" ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
print_usage
fi
... (plugin'in geri kalanı) ...
Bu yaklaşım, plugin’in kendi kendine açıklayıcı olmasına yardımcı olur.
Nagios ile Plugin’i Entegre Etme
Plugin’inizi oluşturup test ettikten sonra, Nagios’un onu kullanabilmesi için yapılandırmanız gerekir.
commands.cfg Dosyası
Nagios, çalıştıracağı komutları commands.cfg dosyasında (veya Nagios yapılandırma dizininizdeki başka bir .cfg dosyasında) tanımlar. Bu dosya, Nagios’a plugin’inizin adını ve nasıl çağrılacağını söyler.
1. commands.cfg dosyasını düzenleyin:
sudo vi /etc/nagios/objects/commands.cfg
2. Yeni bir komut tanımlayın:
Örneğin, check_disk_usage.sh plugin’imiz için:
define command {
command_name check_disk_custom
command_line $USER1$/check_disk_usage.sh $ARG1$ $ARG2$ $ARG3$
}
* command_name: Nagios içinde bu komutu referans alacağınız isim.
* command_line: Nagios’un çalıştıracağı gerçek komut.
* $USER1$: Genellikle /usr/local/nagios/libexec/ dizinini işaret eden bir makrodur. resource.cfg dosyasında tanımlıdır.
* $ARG1$, $ARG2$, $ARG3$: Bu makrolar, hizmet tanımınızda plugin’e ileteceğiniz argümanları temsil eder.
services.cfg veya İlgili Host Konfigürasyonu
Bir komutu tanımladıktan sonra, bu komutu belirli bir hizmetle ilişkilendirmeniz gerekir. Bu genellikle services.cfg dosyasında veya belirli bir ana bilgisayarın yapılandırma dosyasında yapılır.
1. Hizmet tanımını ekleyin:
sudo vi /etc/nagios/objects/services.cfg
2. Aşağıdaki hizmet tanımını ekleyin:
define service {
use generic-service
host_name localhost
service_description Disk Usage /
check_command check_disk_custom!/!80!90
notifications_enabled 1
}
* host_name: Bu hizmetin izleneceği ana bilgisayarın adı.
* service_description: Nagios web arayüzünde görünecek hizmetin açıklaması.
* check_command: Kullanılacak komut adı (commands.cfg dosyasında tanımladığınız) ve argümanları. Argümanlar ünlem işareti (!) ile ayrılır. Burada / (mount point), 80 (warning %) ve 90 (critical %) argüman olarak iletilir.
3. Nagios yapılandırmasını doğrulayın ve yeniden başlatın:
Yapılandırma dosyalarında bir hata olup olmadığını kontrol etmek için:
sudo /usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg
Her şey yolundaysa, Nagios hizmetini yeniden başlatın:
sudo service nagios restart
Artık Nagios web arayüzünde yeni hizmetinizi görmelisiniz.
NRPE ile Uzak Sunucu Kontrolü
Eğer plugin’iniz Nagios sunucusunun kendisinde değil, uzak bir sunucuda çalışacaksa, Nagios Remote Plugin Executor (NRPE) kullanmanız gerekir. NRPE, uzak sunucuda çalışır, Nagios sunucusundan gelen istekleri dinler, plugin’i çalıştırır ve çıktıyı Nagios sunucusuna geri gönderir.
1. Uzak Sunucuda nrpe.cfg Dosyası:
Uzak CentOS 6 sunucusunda nrpe.cfg dosyasını (genellikle /etc/nagios/nrpe.cfg veya /usr/local/nagios/etc/nrpe.cfg) düzenleyin.
2. NRPE Komutunu Tanımlayın:
nrpe.cfg içinde, plugin’inizi çağıracak bir komut tanımlayın:
command[check_disk_root]=/usr/local/nagios/libexec/check_disk_usage.sh / $ARG1$ $ARG2$
* Burada $ARG1$ ve $ARG2$ NRPE tarafından Nagios sunucusundan gelen argümanları alacaktır.
* ÖNEMLİ: NRPE’nin güvenlik varsayılanları gereği, komutlara argüman geçişi varsayılan olarak devre dışıdır. Bunu etkinleştirmek için nrpe.cfg dosyasında dont_blame_nrpe=1 satırını uncomment etmeniz gerekebilir. Ancak bu bir güvenlik riski oluşturabilir, dikkatli olun.
3. NRPE Hizmetini Yeniden Başlatın:
sudo service nrpe restart
4. Nagios Sunucusunda Komutu Tanımlayın:
Nagios sunucunuzdaki commands.cfg dosyasında NRPE aracılığıyla uzak plugin’i çağırmak için bir komut tanımlayın:
define command {
command_name check_nrpe_disk_remote
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_disk_root -a $ARG1$ $ARG2$
}
* check_nrpe: Nagios’un NRPE istemcisi ile iletişim kurmak için kullandığı plugin.
* -H $HOSTADDRESS$: Uzak sunucunun IP adresi veya ana bilgisayar adı.
* -c check_disk_root: Uzak NRPE istemcisinde tanımlanan komut adı.
* -a $ARG1$ $ARG2$: Nagios’tan NRPE’ye gönderilecek argümanlar.
5. Nagios Sunucusunda Hizmeti Tanımlayın:
Uzak ana bilgisayarın hizmet yapılandırmasında bu komutu kullanın:
define service {
use generic-service
host_name remote_server_name
service_description Remote Disk Usage /
check_command check_nrpe_disk_remote!80!90
notifications_enabled 1
}
Unutmayın, remote_server_name için Nagios’unuzda bir define host bloğu tanımlanmış olmalıdır.
Sorun Giderme ve En İyi Uygulamalar
Plugin geliştirirken veya dağıtırken karşılaşabileceğiniz bazı yaygın sorunlar ve bunlara yönelik çözümler ile en iyi uygulamalar.
Hata Ayıklama (Debugging)
* Manuel Çalıştırma: Plugin’i her zaman Nagios’a entegre etmeden önce komut satırından manuel olarak çalıştırın. Doğru çıktıyı ve dönüş kodunu verdiğinden emin olun.
* set -x: Bash betiğinizin başına set -x ekleyerek betiğin her satırını çalıştırırken izleyebilirsiniz. Bu, değişken değerlerini ve komut çıktısını görmenize yardımcı olur.
* Nagios Logları: Nagios log dosyası (/var/log/nagios/nagios.log), plugin’lerin çalıştırılmasıyla ilgili hataları veya Nagios’un plugin çıktısını işlerken karşılaştığı sorunları içerebilir.
* NRPE Logları: Eğer NRPE kullanıyorsanız, uzak sunucudaki syslog’u veya NRPE’nin kendi loglarını kontrol edin.
Güvenlik
* Minimum Yetki: Plugin’ler genellikle nagios kullanıcısı altında çalışır. Bu kullanıcının sadece ihtiyacı olan dosyalara ve komutlara erişimi olduğundan emin olun. Root yetkisi gerektiren işlemlerden kaçının.
* Giriş Doğrulama: Plugin’inize iletilen argümanları her zaman doğrulayın. Örneğin, sayı bekliyorsanız, gelen değerin gerçekten bir sayı olduğundan emin olun. Kabuk enjeksiyonu gibi saldırıları önlemek için kullanıcı girdilerini dikkatlice işleyin.
* dont_blame_nrpe=1: NRPE’de bu seçeneği etkinleştirmek, uzak plugin’lere rastgele argümanların geçirilmesine izin verir ve potansiyel bir güvenlik açığıdır. Gerekliyse kullanın, ancak sadece güvenilir argümanları geçirin ve plugin’in kendi içinde argümanları doğrulayın.
Performans
* Hızlı Çalışma: Nagios plugin’leri genellikle sık aralıklarla çalıştırılır. Plugin’lerinizin hızlı çalışması ve minimum kaynak tüketmesi önemlidir. Uzun süren veya çok fazla CPU/bellek kullanan plugin’ler Nagios sunucusunu yavaşlatabilir veya izleme gecikmelerine neden olabilir.
* Önbellekleme: Eğer bir plugin’in veri toplama süreci pahalıysa, sonuçları kısa bir süre için önbelleğe almayı düşünebilirsiniz. Ancak bu, verilerin güncelliğini etkileyebilir, dikkatli kullanılmalıdır.
Sürdürülebilirlik
* Yorumlar: Kodunuzu bolca yorumlayın. Plugin’in ne yaptığını, argümanlarını ve önemli mantık parçalarını açıklayın.
* Okunabilir Kod: Anlaşılır değişken adları kullanın ve kodu mantıksal bloklara ayırın.
* Versiyon Kontrolü: Plugin’lerinizi bir versiyon kontrol sistemi (örn. Git) altında yönetin. Bu, değişiklikleri izlemenize, geri almanıza ve ekip içinde işbirliği yapmanıza olanak tanır.
Sonuç
Nagios plugin’leri oluşturmak, izleme ihtiyaçlarınıza özel çözümler geliştirmenize olanak tanıyan güçlü bir yetenektir. Bash betikleri, Linux ortamlarında bu plugin’leri hızlı ve etkili bir şekilde yazmak için mükemmel bir araçtır. Bu makalede ele alınan temel prensipleri, örnekleri ve en iyi uygulamaları takip ederek, CentOS 6 üzerinde kendi Nagios izleme çözümlerinizi güvenle oluşturabilirsiniz.
Unutmayın, iyi yazılmış bir plugin sadece işlevsel olmakla kalmaz, aynı zamanda kolayca anlaşılabilir, sürdürülebilir ve güvenli olmalıdır. Nagios’un esnekliği sayesinde, altyapınızdaki hemen hemen her şeyi izlemek için kendi plugin’lerinizi geliştirebilir, böylece potansiyel sorunları daha ortaya çıkmadan önce tespit edebilirsiniz.