יום שלישי, 23 באוגוסט 2011

Multi Nagios Tactical Overview System

תוסף מומלץ שהטמעתי אצלי הוא Multi Nagios Tactical Overview System
תוסף זה יכול להחליף את ה Tactical Overview של הנגיוס, או במקרה שלי, להציג Tactical Overview של מספר שרתי נגיוס בדף אחד.

ההתקנה עצמה פשוטה, לפתוח את הקובץ ולהגדיר directory תחת apache בקובץ  etc/httpd/conf.d/mntos.conf/

Alias /mntos "/usr/local/mntos/www"

<Directory "/usr/local/mntos/www">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all

</Directory>
לאחר מכן להגדיר את הנתיבים לשרתי הנגיוס ב usr/local/mntos/networks.ini/
[TLV]
id=1
location="Israel"
network="sub.domain.com"
nagios="https://guest:password@nagios.sub.domain.com/nagios/cgi-bin/tac.cgi"
public="https://nagios.sub.domain.com/nagios/"
contacts=1
icon="img/Israel_Flag_01.jpg"

[NYC]
id=2
location="North America"
network="domain.com"
nagios="https://guest:password@nagios.domain.com/nagios/cgi-bin/tac.cgi"
public="https://nagios.domain.com/nagios/"
contacts=1
icon="img/i-love-new-york.gif"

להוסיף משימה ל cron
* * * * * /usr/bin/php /usr/local/mntos/mntos.php /dev/null 2>&1

התוצר הסופי נראה כך



יום שבת, 6 באוגוסט 2011

איך להגדיר גישה לנגיוס ע"י חשבונות משתמשים של Active Directory ?


למעשה ההגדרה היא לא בנגיוס עצמו אלא הגדרות ה directory ב apache,
ראשית נתקין ונפעיל apache modules בשם ldap_module אם איננו מוגדר.
נערוך את קובץ etc/httpd/conf.d/nagios.conf/ ונוסיף את הגדרת האוטנטיקציה:

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

<Directory "/usr/local/nagios/sbin">
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all

AuthLDAPBindDN "CN=user,OU=Services,DC=domain,DC=com"
AuthLDAPBindPassword "******"
AuthLDAPURL "ldap://server/OU=All Users,DC=domain,DC=com?sAMAccountName?sub?(objectClass=*)"

AuthType Basic
AuthName "USE YOUR AD ACCOUNT"
AuthBasicProvider ldap
AuthUserFile /dev/null
require ldap-group CN=NagiosUsers,OU=All Groups,DC=domain,DC=com

</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

כפי שאתם רואים אני מגדיר אימות רק על תיקיית cgi-bin ומגביל את הגישה לחברים בקבוצה מסויימת בלבד.

כדי לאפשר ל apache לחפש חשבונות גם ב chilled domain שינתי את ההגדרה אימות חשבונות מול GC

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

<Directory "/usr/local/nagios/sbin">
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all

AuthLDAPBindDN user@domain.com
AuthLDAPBindPassword "**********"
AuthLDAPURL ldap://domain.com:3268/?userPrincipalName?sub

AuthType Basic
AuthName "USE YOUR DOMAIN ACCOUNT, user@domain.com"
AuthBasicProvider ldap
AuthUserFile /dev/null
Require valid-user
</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all

</Directory>

בנוסף אני מאפשר גישה לנגיוס לכל חשבנות מאומת ללא קשר לחברות בקבוצה כזו או אחרת, באימות מול GC נדרש להזין שם משתמש בפורמט user@domain.com או user@sub.domian.com

את ההרשאות עצמן אני מנהל מקובץ usr/local/nagios/etc/cgi.cfg/

authorized_for_read_only=guest
authorized_for_system_information=*
authorized_for_all_services=*
authorized_for_all_hosts=*
authorized_for_configuration_information=guy@domain.com,admin@domain.com,manager@domain.com
authorized_for_system_commands=guy@domain.com,admin@domain.com,manager@domain.com
authorized_for_all_service_commands=guy@domain.com,admin@domain.com,manager@domain.com
authorized_for_all_host_commands=guy@domain.com,admin@domain.com,manager@domain.com

כפי שאתרם רואים, אני מאפשר גישה לכל המשתמשים בדומין, ביצוע פעולות (enable/disable/acknowlade) מאושרות רק עבור משתמשים ספציפיים.

יום ראשון, 3 ביולי 2011

אתגר מאחורי NAT

נתון: רשת אלחוטית במשרד שמנותקת פיזית מהרשת בה נמצא שרת הנגיוס.
משימה: יש לדגום את הנתב ואת המתגים שמאחוריו
אתגר: כתובת IP חוקית בודדת מוגדרת על הנתב, כל המתגים מאחורי NAT

הפתרון שלי היה ליצור ניתוב מכתובת ה IP החוקית לכל אחד מהמתגים ברשת, כל ניתוב עבור בפורט אחר:

ההגדרה בנתב (סיסקו):
ip nat inside source static udp 10.0.0.4 161 interface Dialer1 43571
ip nat inside source static udp 10.0.0.2 161 interface Dialer1 43572
ip nat inside source static udp 10.0.0.3 161 interface Dialer1 43573

יצרתי host עבור הנתב כמובן שכתובתו היא כתובת ה IP החוקית, זהו host רגיל לחלויטין בו אני דוגם שרותים כמו רוחב פס, CPU וזיכרון.

יצרתי command חדש שדוגם ב snmp את ה parent של ה host עליו הוא רץ, את הפורט ה command מקבל ממשתנה המוגדר על ה host.
define command {
       command_name  check-cisco-alive
       command_line  $USER1$/check_snmp -H $_HOSTPARENTADDRESS$ -C $USER8$ -o .1.3.6.1.2.1.1.3.0 -p $_HOSTSNMPPORT$
}

יצרתי host עבור כל אחד מהמתגים, כשהנתב מוגדר כ parent 
define host {
        host_name                       SWITCH-DSL-A1
        alias                                 SWITCH-DSL-A1
        display_name                  SWITCH-DSL-A1
        address                            10.0.0.4
        parents                             ROUTER-ADSL
        check_command             check-cisco-alive
        use                                   generic-host-c10-n00
        _SNMPPORT                  43571
        register                             1
        }

יום שבת, 18 ביוני 2011

הגדרת גישה ב ssh לשרתי לינוקס עבור דגימה agentless

בכדי לדגום שרתי לינוקס ללא התקנה של agent עליהם ניתן להשתמש בפלאגאין check_by_ssh שלמעשה משמש להרצת סקריפטים על השרת המרוחק, בשונה משימוש ב agent, לדוגמא NRPE שימוש ב check_by_ssh לא מצריך התקנה על השרת המרוחק או הפעלת service נוסף.

כל שנצטרך הוא להגדיר חשבון משתמש עבור הגישה ב SSH, אני יוצר על השרתים המרוחקים חשבון בשם nagios ומעתיק אליו מפתח הצפנה שמשמש לזיהוי במקום סיסמא.

את יצירת המפתח יש לבצע פעם אחת בלבד, אפשר על שרת הנגיוס עצמו אבל לא חיבים:

cd /home/nagios
mkdir .ssh
ssh-keygen -t dsa -b 1024 -f .ssh/id_dsa

בשלב זה תתבקשו להקליד passphrase, אל תקלידו - פשוט לחצו enter
לאחר יצירת המפתחות נעתיק אותם לתיקית libexec
cp .ssh/id_dsa.pub /usr/local/nagios/libexec/ssh.pub
cp .ssh/id_dsa /usr/local/nagios/libexec/ssh.pem
ונשנה הרשאות על הקבצים
chown nagios:nagios /usr/local/nagios/libexec/ssh.*
chmod 600 /usr/local/nagios/libexec/ssh.*

עכשיו, כדי להכין שרת מרוחק לדגימה יש לבצע את השלבים הבאים:
ניצור חשבון ותיקיית בית
useradd -s /bin/bash -d /home/nagios nagios
mkdir -p /home/nagios/.ssh

ניצור תיקיה עבור סקריפטים
mkdir -p /usr/local/nagios/libexec
chown -R nagios /usr/local/nagios

לאחר מכן, משרת הנגיוס נעתיק את מפתח ההצפנה לשרת המרוחק:

scp /usr/local/nagios/libexec/ssh.pub root@192.168.X.Y:/home/nagios/.ssh/authorized_keys

בשרת המרוחק נשנה הרשאות על מפתח ההצפנה:
chown -R nagios /home/nagios
chmod 750 /home/nagios/.ssh
chmod 640 /home/nagios/.ssh/*

 כעת ניתן להעתיק סקריפטים לשרת המרוחק ע"י (ניתן כמובן עם להתקין nagios-plugins ולהריץ אותם דרך  ssh כפי שמתואר בפוסט ניטור לינוקס ללא nrpe)
scp -i /usr/local/nagios/libexec/ssh.pem /usr/local/nagios/libexec/check_cpu.sh nagios@192.168.X.Y:/usr/local/nagios/libexec/check_cpu.sh

יש להתחבר פעם ראשונה ידנית ולכן יש להריץ את הפקודה הבאה (פעמיים) תחת חשבון nagioa בשרת הנגיוס:

su nagios
/usr/local/nagios/libexec/check_by_ssh -H 192.168.X.Y -C "uname -a" -l nagios -i /usr/local/nagios/libexec/ssh.pem

אם נתקלים בהודעת שגיאה בנוסח דומה ל Address 192.168.X.Y maps to xxx.domain.com, but this does not  map back יש לוודא כי לשרת המרוחק רשומת PTR תקינה בשרת ה DNS.

יום שישי, 17 ביוני 2011

ניטור לינוקס ללא nrpe

אם אנחנו רוצים לנטר שרת לינוקס אך ללא התקנת NRPE וההגדרות הכרוכות בכך ישנה אפשרות להריץ את הפלאגאינס ע"י גישה ב ssh במקום check_nrpe.
למעשה זו שיטת חצי agent, לא התקנו סוכן אך היינו צריכים להתקין את nagios-plugins.

כדי שנוכל לגשת לשרת המנוטר ב ssh ללא הזנת סיסמא נצטרך להגדיר בשרת המנוטר שימוש במפתח הצפנה במקום סיסמא, לפחות עבור חשבון nagios, לבסוף יש להעתיקת את קובץ pem. לשרת הנגיוס כפי שמתואר בפוסט הגדרת גישה ב ssh לשרתי לינוקס עבור דגימה agentless.

שימוש בפלאגאין (יש להריץ פעם אחת ידנית ע"י חשבון nagios כדי לקבל את ה certificate)
/usr/local/nagios/libexec/check_by_ssh -H 192.168.X.Y -C "/usr/local/nagios/libexec/check_load -w 10 -c 20" -l nagios -i /usr/local/nagios/keys/192.168.X.Y.pem

הפקודה עצמה
$USER1$/check_by_ssh -H $HOSTADDRESS$ -C "$USER1$/$ARG1$ -w $ARG2$ -c $ARG3$" -l nagios -i  $USER9$/$HOSTNAME$.pem

משתנה ראשון זהו הפלאגאין שנריץ בשרת המרוחק, משתנה שני ושלישי הם ערכי ה warning ו critical, את מפתחות ההצפנה יש לשמור בקובץ ששמו כשם השרת כפי שמוגדר בנגיוס תחת תיקיה שמוגדרת כ USER9 בקובץ resources.cfg

מכוון שהמשתנה הראשון הוא הפלאגין ניתן להשתמש בפקודה זו לבדיקת דיסקים, זיכרון, Load ועוד

define service {
        host_name                      SERVER
        service_description        SDA2
        display_name                 SDA2
        use                                   critical-only-service-c10-n1440
        check_command            check_by_ssh!check_disk!10%!5%!/dev/sda2
        register                            1
        }

define service {
        host_name                       SERVER
        service_description         Current Load
        display_name                  Current Load
        use                                    generic-service-c10-n00
        check_command             check_by_ssh!check_load!8.0,5.0,3.5!10.0,6.0,4.0
        register                            1
        }

יום שלישי, 7 ביוני 2011

התקנת nrpe על שרת לינוקס

בהמשך לפוסט להיות או לא להיות (Agent) אם החלטתם להתקין סוכנים על שרתים, בפוסט הזה אתאר את שלבי התקנת nrpe על שרת לינוקס.

מכוון שנתקין ונגדיר את nrpe לעבודה באמצעות inet עלינו לוודא כי החבילה מותקנת, בנוסף נבדוק מספר חבילות נוספות הנחוצות להתקה ולפעולה תקינה של ה agent והפלאגאינס, ב centos/redhat נריץ

yum install gcc openssl-devel inetd net-snmp
נתחיל הת ההתקנה עצמה ביצירת משתמש, קבוצה ותיקיות
adduser nagios
groupadd nagios
mkdir -p /usr/local/nagios
chown nagios.nagios /usr/local/nagios
נוריד, נפרוס ונקמפל nrpe
cd /tmp
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar zxvf nrpe-2.12.tar.gz -C /usr/src/
cd /usr/src/nrpe-2.12
./configure --enable-command-args
make all
וכנ"ל עבור nagios plugins
cd /tmp
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz
tar zxvf nagios-plugins-1.4.13.tar.gz -C /usr/src/
cd /usr/src/nagios-plugins-1.4.13
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
עכשיו נעתיק את הבינאריים של nrpe מתיקיות המקור לתיקיית הפלאגאינים

cp /usr/src/nrpe-2.12/src/check_nrpe /usr/local/nagios/libexec/check_nrpe
cp /usr/src/nrpe-2.12/src/nrpe /usr/local/nagios/libexec/nrpe

נגדיר ל inetd את הפורט והסרוויס עבור nrpe ע"י הוספת שורה לקובץ etc/xinetd.d/nrpe/
nrpe        5666/tcp            # NRPE nagios agent
ניצור קובץ הגדרות עבור inetd אותו נשמור כ etc/xinetd.d/nrpe/

  # default: on
        # description: NRPE
        service nrpe
        {
                flags            = REUSE
                socket_type = stream
                wait             = no
                user             = nagios
                server          = /usr/local/nagios/libexec/nrpe
                server_args  = -c /usr/local/nagios/etc/nrpe.cfg --inetd
                log_on_failure  += USERID
                disable            = no
                only_from       = 192.168.X.Y
        }

ניצור קובץ הגדרות עבור nrpe אותו נשמור כ usr/local/nagios/etc/nrpe.cfg/
log_facility=daemon
pid_file=/var/run/nrpe.pid
server_port=5666
#server_address=127.0.0.1
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=192.168.X.Y
dont_blame_nrpe=1
# command_prefix=/usr/bin/sudo
debug=0
command_timeout=60
connection_timeout=300
#allow_weak_random_seed=1
#include=<somefile.cfg>
#include_dir=<somedirectory>

command[check_users]=/usr/local/nagios/libexec/check_users -w $ARG1$ -c $ARG2$
command[check_load]=/usr/local/nagios/libexec/check_load -w $ARG1$ -c $ARG2$
command[check_disk]=/usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
command[check_procs]=/usr/local/nagios/libexec/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$

זהו, נאתחל את inetd ע"י etc/init.d/xinetd restart/

נבדוק האזנה לפורט ע"י netstat -an | grep 5666
ותקינות של ה agent ע"י usr/local/nagios/libexec/check_nrpe -H localhost/

עכשיו רק נשאר ליצור command ולהתחיל להשתמש בו.
המשתנה הראשון יהיה שם הפקודה כפי שמופיעה ב nrpe.cfg a, לדוגמא check_disk
המשתנים לאתר ה a- יועברו כפי שהם לפקודה בשרת המרוחק, במקרה של check_disk הראשון הוא ערך warning אחריו critical והמשתנה השלישי (ARG4) נתיב הדיסק בשרת, דוגמא dev/sda1/
define command {
       command_name   check_nrpe
       command_line       $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a  $ARG2$ $ARG3$ $ARG4$

}
הסרוויס לדוגמא
define service {
        host_name                  SERVER
        service_description    SDA1
        display_name             SDA1
        use                              some-template
        check_command        check_nrpe!check_disk!10%!5%!/dev/sda1
        register                       1
        }

יום רביעי, 18 במאי 2011

ניטור שרתי HP

לדגום סטאטוס של חומרה תמיד חשוב לבצע ולכן עבור שרתי HP אני משתמש במספר פלאגאינים:

הראשון Compaq Smart Array בודק את מצב ה Raid
/usr/local/nagios/libexec/check_cpqdisks -H 192.168.X.Y -C community -v 1
Status: OK Disk OK: 8 Disk FAIL: 0
הפקודה די פשוטה
define command {
       command_name     check_hparray
       command_line        $USER1$/check_cpqdisks -H $HOSTADDRESS$ -C $USER8$ -v 1
}
פלאגאין שני, check_ilo2_health שבודק את מצב החומרה דרך גישה לממשק ה iLO, עובד רק על גרסה 2 כלומר שרתים G5, G4

/usr/local/nagios/libexec/check_ilo2_health.pl -u user -p password -H 192.168.X.Y
ILO2_HEALTH CRITICAL - Fans Degraded, Fan 6: Failed, Temperatures: CPU 1 (Ok): 27, CPU 2 (Ok): 26, CPU 3 (Ok): 24, CPU 4 (Ok): 23, CPU (Ok): 7, I/O Board (Ok): 22, I/O Board (Ok): 22, I/O Board (Ok): 29, I/O Board (Ok): 25

כמובן שה IP זו הכתובת של ה iLO וכנ"ל המשתמש והסיסמא ולכן הפקודה נראת כך
define command {
       command_name     check_hp_status_by_ilo2
       command_line        $USER1$/check_ilo2_health.pl -u $USER17$ -p $USER18$ -H $_HOSTILOIP$
}
$HOSTILOIP_$ זהו משתנה שאני מכניס לכל שרת בעל iLO
define host {
        host_name                 SERVER
        alias                           SERVER
        address                      192.168.X.Y
        check_command       check-host-alive
        use                             generic-host-c5-n60,logo-windows
        _ILOIP                      192.168.X.Z
        register                      1
        }
פלאגאין שלישי check_snmp_hp-hardware.sh שמשתמש ב SNMP

/usr/local/nagios/libexec/check_snmp_hp-hardware.sh community 192.168.X.Y
Hardware Problem Detected: Best Guess -  "Network Adapters Redundancy Reduced (Slot 0, Port 2)" - Please visit  https://192.168.20.18:2381 for more information.
הפקודה
define command {
       command_name       check_hp_status_by_snmp
       command_line          $USER1$/check_snmp_hp-hardware.sh $USER8$ $HOSTADDRESS$
}
את שלושת הפלאגינים ואחרים ניתן למצוא פה

זה נראה כך


וכך