• 0
eech55

Network Management System - Nagios

سؤال

Nagios.png

home-tb.pngservice-detail-tb.pnghostgroup-overview-tb.pngstatusmap-circular-tb.pngstatusmap-balloon-tb.pngnagios-pnp-tb.png

حسن، لدينا راوترات وسوتشات وخادمات بمختلف الأنواع. وكلما سقط شيء معين لا نشعر به إلا عندما نسمع صراخ المستخدم.

فعوضا من الإنتظار لسماع صراخ وشكاوي المستخدمين، يقوم هذا البرنامج بالمراقبة الدورية وإرسال بريد الكتروني أو sms في حال سقوط أحد الأجهزة.

هذا الدرس يتحدث عن Network Management System، اسم البرنامج بالتحديد Nagios. هذا البرنامج مفتوح الشفرة، مرن، ومن السهل جدا صنع plugins له لزيادة امكانياته بكل سهولة.

Nagios يقوم بمراقبة حالات أجهزة الشبكات والخادمات بواسطة (تقريبا) 60 آلية مختلفة حسب حزمة البرنامج الرسمية. من بينها SNMP HTTP POP IMAP SMTP Oracle SSH Telnet..الخ. ممكن الإضافة من خلال مصادر أخرى أو أن تكتب له plugin بنفسك.

هذا الدرس سيتطرق للتثبيت والإعداد بإذن الله.

Install.gifطريقة التثبيت:

كل توزيعه او نظام تشغيل لديه برامج خاصة لإدارة الملفات (تنزيل وتثبيت تلقائي). لكن هنا سأتطرق للتثبيت اليدوي لأنه يعمل مع الجميع.

البرنامج ينقسم إلى قسمين:

  • (نواة) core: المحرك الذي يقوم بتشغيل برامج أخرى بشكل دوري من أجل مراقبة صحة الأجهزة.
  • (مقابس) plugins: ببساطة هي برامج تقوم بمراقبة الصحة. هي لا تعمل من تلقاء نفسها، إنما يتم تشغيلها بواسطة الـcore. الـcore لوحده لا يقوم بأي شيء، لذا الـplugins مطلوبة.

حمل النواة من هنا، والمقابس من هنا. ثم فك ضغطهم.

قبل بدء التثبيت، نحتاج إلى إضافة اسم مستخدم ومجموعة، مع نظام FreeBSD يكون الأمر هكذا:

pw groupadd nagios
pw useradd nagios -g nagios -s /nonexistant

اذهب إلى مجلد النواة، واكتب التالي:

./configure --prefix=/usr/local/nagios --with-gd-lib=/usr/local/lib --with-gd-inc=/usr/local/include
make all
make fullinstall

اذهب إلى مجلد المقابس، واكتب التالي عقب انتهاء

./configure --prefix=/usr/local/nagios
make
make install

يجب أن يكون لديك خادم مواقع يدعم php. أنصح Apache httpd مع mod_php. كل ماعليك هو نسخ محتوى الملف التالي تحت مجلد موقعك:

cp -r /usr/local/nagios/share/* /path/to/www/

وثم انسخ محتوى المجلد التالي تحت مجلد cgi-bin

mkdir /path/to/www/cgi-bin
cp /usr/local/nagios/sbin/* /path/to/www/cgi-bin

بنظرة خاطفة، قم بـ ls cgi-bin لتتأكد أن ملفات الـ.cgi موجودة بداخله، وبالأخص statusmap.cgi، إذا لم تجده، فهذا يعني أنك لم تقم بالتثبيت مع دعم libgd.

notes.gifملاحظات:

  • حتى يتمكن البرنامج من رسم خريطة الشبكة مع الحالة الصحية لكل جهاز، يجب أن يكون لديك libgd. ووقت التثبيت، يجب عليك تحديد مكانه من خلال --with-gd-inc و --with-gd-lib.
  • عندما تقوم بتثبيت المقابس، اختر نفس المسار الذي قمت بتثبيت nagios فيه.
  • عند إضافة مستخدم جديد، اختر shell غير موجود /nonexistant لأن هذا service account ولا نريد أن يستخدمه أحد في عملية login على الجهاز.
  • ملفات الإعدادات تكون تحت مجلد /usr/local/nagios/etc. سنتسلى بهم في القسم التالي من الدرس.
  • جميع المسارات هذه قابلة للتغيير وهذا الدرس مبني على فرضية أنك قمت بـتثبيتهم كما جاء في الـ--prefix. المسارات قد تختلف مع أنظمة أخرى، خلك مصحصح.

تم تعديل بواسطه eech55
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

6 إجابة على هذا السؤال .

  • 0

طريقة الإعداد:

جميع الملفات ممكن تغير من مسمياتها إلا ملف nagios.cfg. هذا الملف اسمه خاص يتم قراءته بالـ/usr/local/nagios/bin/nagios عندما يعمل.

الملف nagios.cfg يحتوي على مسارات بقية ملفات الإعدادات بالإضافة إلى اختيارات أخرى عامة للبرنامج. ممكن تترك بقية الإعدادات كما هي بحالتها الإفتراضية.

جميع الـchecks تتم بواسطة برامج خارجية، لا يهم إذا كانت مكتوبة بالـC ولا Perl ولا sh أو bash. المهم فقط أنها وقت التنفيذ تجيب بهذه القيم (return value):

  1. Ok يعني إذا كان return 1 معناه كل شيء على مايرام فيما يتعلق بالـcheck الأخير.
  2. warning هذا يعني بلوغه نسبة من الفشل، مثلا تخيل عملية ping سقط جزء منها (لكن ليس كلها)
  3. critical في حالة سقوط جميع الـping وفشل عمليات المعاودة، حينها سيكون حرجا.
  4. unknown في حالة عدم تمكن SNMP من الحصول على القيم المصاحبة للOID المختارة.

جميع عمليات الـcheck مصنفة تحت service. جميع الأجهزة مصنفة تحت host. يعني الخادمات والراوترات كلهم host. وعمليات الـcheck التي تتم على الخدمات المتوفرة تكون تحت تصنيف service.

عندما نقوم بإستدعاء أي أمر (يعني plugin) يجب أولا إضافته إلى الـcommands.cfg. هذا الملف يربط بين اسم الأمر (طريقة استدعائه بواسطة ملفات الإعدادات)، وبين ملفات الـplugins والأوامر المخزنة في نظام الملفات والتي يمكن تشغيلها بواسطة الـshell مثلا. الهدف من هذا هو تجنب أعادة كتابة الإعدادات في حالة التغيير من plugin إلى آخر بديل.

بالإعدادات الإفتراضية لا داعي لتغييرا لملف فهي جيدة. لكن قد تحتاج قرائتها لمعرفة الـsyntax. كذلك استخدم الأمر ./plugin_name --help حتى تحصل على الإختيارات المتوفرة بواسطة ملف الـplugin نفسه.

ملف الـcontacts.cgf: يحتوي على اسماء الاشخاص وطرق الإتصال بهم في حال حدوث مشكلة. اتركها كماهي، فقط غير البريد الإلكتروني واكتب بريدك أنت.

ملف الـtemplates.cfg: يحتوي على الإعدادات المكررة. تعامل معها على مبدأ التوارث. فكلما تضيف راوتر جديد، لا تحتاج لإعادة القصة، فقط تحتاج لأن تخبره أن يقوم بتوارث الصفات الشائعة من الـtemplate و تضع فقط الصفات الشاذة.

ملف timeperiods.cfg: يحتوي على مسميات سهل التعامل معها مرتبطة بفترات زمنية. فعوضا من تحديد جميع ساعات العمل في كل مرة، تحددها مرة واحدة هنا، وتطلق عليها اسم، مثلا "workhours" وتستخدمه في ملفات الإعدادات الأخرى بهذا الإسم فقط.

ملفاتك أنت: نفرض أننا نريد إضافة router لمراقبته. نقوم بفتح ملف جديد، ونكتب فيه التالي مثلا:

# HOST DEFINITIONS
define host{
use generic-router ; اسم التوارث كما جاء في ملف القوالب
host_name planet-4000 ; هذا بمذابة الآي دي، يجب أن يكون موحدا
alias PLANET 4000-ADE; وصف سهل الفهم حتى يظهر بشكل جميل لقرائته
address 10.2.2.1 ; رقم الآي بي الذي عليه ستتم عمليات المعاينة
hostgroups routers ; مجموعة، ليست ضرورية جدا، فقط حتى تتمكن من عرضهم بالويب مع بعض
parents core-router; حتى يتمكن من رسم كيبل أو خط بين هذا الراوتر والراوتر الآخر
icon_image router.png; أيقونة الجهاز في واجهة الويب -- أنصح بوضع هذه القيم في ملفات القوالب
icon_image_alt Router; وصف بديل في حالة عدم عرض الصورة
statusmap_image router.gd2; صورة البرنامج كما سيتم رسمها في التوبولوجي بواسطة libgd
}

# HOST GROUP DEFINITIONS
define hostgroup{
hostgroup_name routers
alias Network Routers
}

# SERVICE DEFINITIONS هنا تتم عمليات المعاينة، لاحظ أننا لم نذكر رقم الآي بي لأنه مذكور بالأعلى
define service{
use generic-service; للتوارث من القوالب
host_name planet-4000; نفس الإسم بالأعلى
service_description PING ; وصف عام
check_command check_ping!200.0,20%!600.0,60%; يبدأ بإسم الأمر، ثم الأوامر، والفاصل بينهم علامة تعجب
normal_check_interval 5 ; يقوم بالفحص كل خمسة دقائق
retry_check_interval 1 ; في حال فشل فحص، سيعاود المحاولة بعد دقيقة
}

ماذا يعني هذا الأمر:

check_command		   check_ping!200.0,20%!600.0,60%

:

  • اسم الأمر حسب تعريفه في ملف commands.cfg هو check_ping
  • الـargument الأولى هي 200.0,20%
  • الـargument الثانية هي 600.0,60%

لاحظ الفصل بينهم بعلامة التعجب (!).

لو ألقينا نظرة إلى ملف commands.cfg سنرى:

define command{
command_name check_ping
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}

$HOSTADDRESS$ يحتوي على رقم الآي بي والذي في حالتنا 10.2.2.1

$USER1$ ماهو إلى macro سيتم استبداله بـ /usr/local/nagios/libexec حسبما جاء في resources.cfg. حيث أن resources.cfg هي للماكروز ولتخزين المعلومات التي يجب أن لا تكون مكتوبة في ملفات أخرى من باب الأمان ككلمات السر. لاحظ أن ARG1 و ARG2 ماهم إلا قيم يتم تمريرهم إلى مفاتيح -w و -c

لو نذهب إلى ذلك المسار، ونكتب التالي، سنجد الـsyntax للأمر واضحا:

[email protected] /usr/local/nagios/libexec/ # ./check_ping -h
...
Use ping to check connection statistics for a remote host.

Usage:check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>%
[-p packets] [-t timeout] [-4|-6]

Options:
-h, --help
Print detailed help screen
-V, --version
Print version information
-4, --use-ipv4
Use IPv4 connection
-6, --use-ipv6
Use IPv6 connection
-H, --hostname=HOST
host to ping
-w, --warning=THRESHOLD
warning threshold pair
-c, --critical=THRESHOLD
critical threshold pair
-p, --packets=INTEGER
number of ICMP ECHO packets to send (Default: 5)
-L, --link
show HTML in the plugin output (obsoleted by urlize)
-t, --timeout=INTEGER
Seconds before connection times out (default: 10)

THRESHOLD is <rta>,<pl>% where <rta> is the round trip average travel
time (ms) which triggers a WARNING or CRITICAL state, and <pl> is the
percentage of packet loss to trigger an alarm state.

This plugin uses the ping command to probe the specified host for packet loss
(percentage) and round trip average (milliseconds). It can produce HTML output
linking to a traceroute CGI contributed by Ian Cass. The CGI can be found in
the contrib area of the downloads section at http://www.nagios.org/
...

بناءا على الـsyntax بالأعلى، فالأمر:

check_command		   check_ping!200.0,20%!600.0,60%

معناه: حتى تصدر warning، يعني return 2، يجب أن يكون الـround trip يعادل200ms ومافوق. أو نسبة السقوط 20%.

وحتى تصدر critical، يعني return 3، يجب ان يكون الـround trip يعادل 600ms ومافوق. أو نسبة سقوط 60%.

الـsyntax يعتمد على الـplugin. الـplugin هو برنامج مثل أي برنامج خارجي. ممكن تكتبه بأي لغة تريد، مرن _جدا_. لا يهم أي لغة تختار. كل ما على البرنامج أو الإسكربت قيامه إعادة قيم ذات معنى كالـ 1 2 3 4 وطباعة سطر على stdout يحتوي على وصف يتم طباعته في واجهة المستخدم هناك.

نفس الفكرة تنطبق على check_snmp أو check_http أو check_smtp...الخ. أوي أي plugin تقوم بكتابته أنت.

طريقة التشغيل:

تأكد ان ملفات الإعدادات خالية من الأخطاء المطبعية، وذلك من خلال الأمر(حسب المسارات في مثالنا):

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

وللتشغيل، يستحسن استخدام الـinit script الذي يأتي معه، يكون في نفس المجلد الذي قمت بفك ضغطه، واسمه daemon-init. كل ماعليك هو

./daemon-init start

في عملية الـinstall السابقة سيقوم البرنامج بوضع الـdaemon-init في مسار الـinit scripts التابعة لنظامك. في نظام freebsd إذا لم تجده، قم بقصه ولصقه في المسار /usr/local/etc/rc.d

تم تعديل بواسطه eech55
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طريقة برمجة مقبس - plugin:

كما ذكرنا سابقا، أنه يوجد عدد 60 مقبس بالحزمة الإفتراضية لتطبيق معاينات على الخدمات. لكن ماذا لو أردنا إنشاء معاينة جديدة غير متوفرة؟ الأمر سهل جدا.

كل ماعليك هو إنشاء برنامج جديد، يقوم بإجراء المعاينة التي تريدها (مثلا http check يمر بواسطة proxy في المنتصف، لأن الـcheck_http لا يدعم المرور بواسطة البروكسي حاليا).

فكل الذي ستفعله، هو إنشاء اسكربت، أو برنامج (المهم يكون executable بالـshell).وهذا البرنامج الذي تصممه يقوم بالتالي:

  • اجراء المعاينة.
  • اعتمادا على نتيجة المعاينة يقوم بإعادة قيمة 0 أو 1 أو 2 أو 3 كـreturn أو exit code
  • يقوم أيضا بطباعة سطر على الـSTDOUT

وفقط. هكذا لدينا مقبس جاهز للإستخدام! هذا جمال البساطة في عالم اليونكس!

0 يعني OK بينما 1 يعني WARNING بينما 2 يعني CRITICAL بينما 3 يعني UNKNOWN. والنص المطبوع على الـSTDOUT سيكون وصف للـstatus.

طريقة استخدامه مع Nagios:

يجب علينا أولا إضافته إلى nagios كـcommand وذلك بواسطة إضافته في ملف commands.cfg. نفس الـsyntax الذي تكلمنا عنه سابقا. هنا يمكنك تسميته كما تشاء.

وبعدما تضيفه في commands.cfg سيحق لك استخدامه في ملفات الإعدادات لمراقبة الـhosts بواسطة الـservices. والإسم الذي تستخدمه هو كما سميته في ملف commands.cfg.

ثم تقوم بإعادة تشغيل Nagios من جديد. طبعا عندما تقوم بريستارت لن تضيع الحالات التي تم الوصول إليها مسبقا. يعني الـStates لن تضيع.

إذا كان هناك من يريد معلومات وأمثلة أدق في الإسكريبتينج سأشرح تفاصيل أكثر.

تم تعديل بواسطه eech55
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا اخي على الموضوع المتميز بارك الله فيك و الطرح الراااائع . لكن هده الطريقة صالحة فقك في ابنتو

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيراً

تم تعديل بواسطه عادل محمد سيد
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الف مليون شكر سوف اقوم بتجريبه فى او فرصه شكرا جزيلا اخى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .