Takip et

Nagios Plugin’lerini CentOS 6 Üzerinde Bash ile Oluşturma Rehberi

Nagios Plugin’lerini CentOS 6 Üzerinde Bash ile Oluşturma Rehberi Nagios, sistem yöneticilerinin altyapılarını izlemeleri için vazgeçilmez bi

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.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version