كان لدينا 14000 قطعة ، zabbix ، api ، python وممانعة في إضافة الأشياء باليد. تحت الأضواء - حول كيفية تنفيذ مديري الشبكات للمراقبة من خلال الإضافة التلقائية لعقد الشبكة ، وقليلًا عن الألم الذي كان علي الذهاب إليه.
تركز هذه المقالة أكثر على مهندسي الشبكات ذوي الخبرة الضئيلة في بيثون. للمساعدة في أتمتة المراقبة وتحسين نوعية الحياة والعمل ، في غياب الحاجة إلى تحديث أسطول الكائنات يدويًا.

قصة قصيرة طويلة ، قمنا ببناء المراقبة
مرحبا اسمي Alexander Prokhorov ، ومع فريق مهندسي الشبكات في قسمنا ، نعمل على شبكة في # ITX5. يقوم قسمنا بتطوير البنية التحتية للشبكة ومراقبة الشبكة والأتمتة. نعم وكل ما يتعلق بنقل البيانات.

أود أن أقسم نظام المراقبة إلى 5 مهام فرعية:
- تحميل البيانات الرئيسية
- الحصول على معلومات حول حالة الكائنات
- المشغلات والتنبيهات
- الإبلاغ
- التصور
في هذه المقالة ، نود أن نشارك كيف قمنا بتكامل المراقبة مع البيانات الرئيسية في شركتنا.
لدينا 14000 عقار للبيع بالتجزئة ، وكانت المهمة الأولى التي حلناها هي تحديد الأشياء التي يتعذر الوصول إليها ، وعددها وتوزيعها الجغرافي.
تم الرصد على
Zabbix . باختصار لماذا - محظوظ وإرث. الباقي:
قصة طويلة.بدأ كل شيء مع تثبيت المراقبة على جهاز كمبيوتر تحت الطاولة ...
عندما جئت للعمل في الشركة في عام 2013 ، لم يكن لدينا مراقبة شبكة ، على الرغم من أن الشبكة كانت كبيرة في ذلك الوقت ، حوالي 4000 كائن. لقد تعلمنا أن عمليات الضخمة (وليس كذلك) تقع في أغلب الأحيان من استلام التطبيقات أو المستخدمين أو الأقسام الأخرى التي تشبه الانهيار الجليدي.

تم تثبيت الإصدار الأول Zabbix 1.8 ، كمنتج زخم (عصري ، عصري ، شبابي) ، خفيف الوزن وبأسعار معقولة لتثبيت المصدر المفتوح مع مجتمع كبير. كنا محظوظين فقط مع الاختيار.
لم تكن هناك موارد للتثبيت ، ولم يطلب أحد. كان من غير الواضح ما إذا كان هذا سيعمل على الإطلاق ؛ لم يكن لدى أي شخص أي خبرة في التنفيذ. لكننا كنا بحاجة ، وقمنا بتثبيته على الكمبيوتر "تحت الطاولة". مستوى التكرار - UPS.
والسؤال الرئيسي بعد التثبيت هو كيفية سكب جميع الكائنات (4 كيلو!) في المراقبة ، وفي الوقت نفسه ، يمكنك إدارة التطبيقات التي تم تعليقها بالفعل في علاج. يدعم Zabbix بالفعل استيراد / تصدير XML مع البيانات على الأجهزة المضيفة. عدد الكائنات كبير ، ولم يكن هناك أي معنى في إنشاء مجموعة منفصلة للكائن (ولم تظهر) ، وتقرر تحميل جهاز توجيه الكائن كعقدة شبكة. لم يتم التحكم في أكثر من معدات الشبكة (تدار بالفعل).
تم إجراء تحليل لملفنا باستخدام مضيفات الشبكة (IPAM في excel) ، وتمت إعادة تنسيقه إلى xml ، والذي يوافق Zabbix على هضمه. ليست المرة الأولى ، ولكن تم تحميل جميع الأجهزة المضيفة ، تم التحديث مرة كل ثلاثة أشهر ، مما أدى إلى إزالة الكائنات المغلقة وإضافة أشياء جديدة. مع مرور الوقت ، اتضح أن Zabbix أصبحت المصدر الرئيسي والوحيد للمعلومات بالنسبة لنا والخط الساخن بشأن توفر المرافق ، والأهم من ذلك ، على السقوط الجماعي. سمح ذلك للخط الساخن بالتعرف على الحوادث الجماعية حتى في الليل ، وإيقاظ المهندسين بالنداءات (بالمناسبة ، عندما لم يكن أحد يعرف ذلك ، كان من الأسهل العيش). ليس انقطاع الكهرباء ليلا دائمًا في المكتب يسمح لشركة UPS بالحفاظ على مراقبة شبكتنا بشكل مناسب. في مرحلة ما ، بدأنا
في عمل نسخ احتياطية. بسبب كانت الرقابة غير مستقرة ومتقطعة ، قررت الشركات تنظيم مجموعة مخصصة لهذه المهمة فقط. في وقت قريب جدًا ، بدأت في تطبيق Zabbix مركزي ، والذي لا يتحقق من الشبكة فقط.
واصل Zabbix القديم لدينا العيش تحت الطاولة. بعد إضافة عدد معين من العناصر ، بدأت قاعدة البيانات في التباطؤ قليلاً ، ونمت شبكة الإنترنت وقائمة الانتظار وتأخير الاقتراع ، لذا سرعان ما كان علي أن أحصل على جهازي كمبيوتر آخر كبديل ووضعهما جميعًا متقاطعين ، بحيث انتهى الحجز الحقيقي (والمكان الموجود أسفل الجدول) . تم دعم الحياة فيه من أجل إضافة نوع من المعلمات المخصصة بسرعة لرصده ومراقبته. بالنسبة للبقية ، انتقلنا إلى واحدة مركزية.
كانت المراقبة المركزية مسؤولة عن جميع معدات تكنولوجيا المعلومات - أجهزة التوجيه ، الخوادم ، سجلات النقد ، المطاريف. بعد فترة من الوقت ، امتلأ بعدد كبير من العناصر. للوصول إلى معلومات إمكانية الوصول التي لا تقدر بثمن ، كان عليك الانتظار قليلاً ، وربما حتى تناول القهوة. بالإضافة إلى ذلك ، كان لدينا متطلبات أكثر وأكثر لمراقبة شبكة أكثر تحديدا ومخصصة. بعد أن حصلت في ذلك الوقت على بعض الخبرة في العمل مع النظام ، قررنا تنفيذ التطبيق القديم من البداية ، ولكن عن حق - تحت اسم zabbix.noc.x5.ru كان موجودًا في مركز البيانات مع تنفيذ الوظائف الضرورية من قبل أنفسنا. حول هذه المقدمة والهيئة الرئيسية للمقال.
إصدار Zabbix هو 3.0
LTS . تحديث فقط داخل إصدارات LTS.
التكوين - 4 أجهزة افتراضية: خادم + قاعدة بيانات ، وكيل ، وكيل ، ويب
بالموارد ، حاولنا اتباع التوصيات على
zabbix.com لتنفيذ كبير وكبير جداً.
المشكلة الأولى التي واجهتنا كانت الإضافة التلقائية لعقد الشبكة للرصد. اختفى الاكتشاف العادي على الفور. لدينا مجموعة من الشبكات على جميع المساحات المفتوحة من supernet 10/8. سيتعين استقصاء الكثير من العناوين وسيستغرق الاكتشاف التلقائي الكثير من موارد النظام ، لكنه لن يحل مشكلة إضافة معلومات غير تقنية حول كائن ما.

كيف تضيف أشياء
كان الحل هو استخدام البرامج النصية الخارجية لإضافة كائنات. تم العثور على البيانات الرئيسية عن الأشياء التجارية في SAP المستخدمة في الشركة. لم يخرج الوصول المتزامن إلى
خدمة الويب لتحميل البيانات مباشرة من SAP ، استغرق طلب جميع الكائنات بعض الوقت. تم إجراء مكالمة غير متزامنة. تمامًا عند منتصف الليل ، تتم إضافة التصدير الكامل من SAP إلى بروتوكول نقل الملفات في شكل
XML ، وخلال اليوم تقع
XML مع اختلاف من أحدث الإصدارات.
استخدم
Zabbix واجهة برمجة تطبيقات Zabbix لتحميل البيانات ، وتفاعل معها من
Python .
في المرحلة الأولى ، تم تحديد مجموعة البيانات التي نحتاجها لإنشاء الكائن. نحن نستخدم جميع العلامات التي تم الحصول عليها للتصنيف الصحيح للكائن في النظام أو لمزيد من الراحة. تشمل هذه العلامات:
- عنوان IP - الحقل الأكثر أهمية لإنشاء واجهة مراقبة
- معرف SAP - لدينا معرف كائن فريد
- الحالة - مفتوحة / مغلقة
- الاسم - اسم الكائن أو رقمه ، وغالبًا ما يستخدمه المستخدمون عند الاتصال
- الموقع - العنوان الفعلي
- الهاتف - اتصال الهاتف
- المجموعات - يتم تشكيل هذه المجموعة من المجموعات بناءً على نوع الكائن وموقعه

وحدة Sap-sync.py
XML من SAP<?xml version="1.0" encoding="ISO-8859-1"?> <werks> <WERKS>1234</WERKS> <NAME1>4321-</NAME1> <PLANT_IP>192.168.1.50</PLANT_IP> <REGION>31</REGION> <PSTLZ>308580</PSTLZ> <CITY1>.</CITY1> <CITY2> .</CITY2> <STREET> .</STREET> <HOUSE_NUM1>1</HOUSE_NUM1> <TEL_NUMBER>(999)777-77-77</TEL_NUMBER> <BRANCH>CH</BRANCH> <REGION>CH_MSK</REGION> <REGION_NAME> </REGION_NAME> <FORMAT>CH_MSK_D</FORMAT> <STATUS> </STATUS> </werks>
الغرض الرئيسي من هذه الوحدة هو تحليل
XML وترجمة
JSON لواجهة برمجة تطبيقات Zabbix. من المريح جدًا في هذه الحالة استخدام قواميس بايثون لا حاجة
لتنسيقها بالإضافة إلى ذلك - باستخدام وحدة
zabbix.api ،
يمكنك ببساطة إطعام قاموس له بالهيكل الصحيح.
JSON مع هيكل يشبه هذا:
{ 'host': 'Hostname' 'groups': [...] 'interfaces': [{},{},{}] 'inventory': {} 'templates': [{},{},{}] 'inventory_mode': '1' 'proxy_hostid': 'INT' 'status': '0' } [] - {} -
في مجالنا الذي يحتوي على عنوان IP في SAP ، يتم تخزين عنوان الخادم ، وليس جهاز التوجيه ، ولكن باستخدام وحدة
ipaddress ، فإننا نعتبر أول عنوان للشبكة الفرعية ، والذي هو في حالتنا دائمًا جهاز توجيه.
str(ipaddress.ip_interface('%s/%s'%(di['PLANT_IP'].strip(),24)).network[1])
يتم تسجيل تاريخ آخر تحديث ناجح في
الجرد ، وفي المواقف المثيرة للجدل ، فإنه يساعد على فهم مدى ملاءمة المعلومات في النظام.
بعد ذلك ، من المريح للغاية الاطلاع على إحصائيات حول تاريخ التحديث في بيانات المخزون:

يضاف الحقل الأكثر أهمية -
الحالة ،
"مفتوح" - ويبدأ مراقبته ، أي حالة أخرى - يؤدي إلى إلغاء تنشيط المضيف. نحن لا نحذف الكائنات من أجل الحفاظ على البيانات والإحصاءات التاريخية.
بعد الاختبارات ، اضطررت إلى إضافة وظيفة ping للتحقق من إمكانية وصول المضيف قبل الإضافة الأولية ، بسبب ذلك في الممارسة العملية ، بدأت الحالات
"المفتوحة" في الظهور ، وهي ليست مفتوحة بعد ، ولكن تقريبًا.
def ping(ip): if os.system('ping -c 2 -W 1 %s > /dev/null'%ip) == 0: return True else: return False
في السابق ، كان لدى Zabbix API وظيفة
host.exist ، ولكن في الإصدارات الجديدة تم دمجها مع
host.get . إذا كانت العقدة موجودة ، فسيرجع الطلب
hostid في قاعدة بيانات zabbix. إذا لم يتم العثور عليها ،
فقم بإرجاع 0. للتحقق ، اضطررت الآن إلى إضافة
exisostost ، ولكن في الحقيقة هو
host.get .
أخيرًا ، نجمع معلومات حول العمل المنجز ، ونضيفه إلى السجلات والتقارير وننقل الملف المعالج إلى المستودع في OLD.
بشكل عام ، قاعدة المراقبة جاهزة ، قم بتشغيل البرنامج النصي في cron للتشغيل التلقائي وننسى ذلك.

كيفية ملء المخزون
لم نعد نحن ، نحن شبكيون.المرحلة الثانية هي ملء الكائنات بالبيانات التي يحتاجها المهندسون للعمل. من الضروري أن ترى جميع البيانات لحل الحادث في نظام واحد ، حتى لا تعمل عبر أنظمة مختلفة ، وجمع المعلومات في أجزاء من مصادر مختلفة. ونظرًا لأن البيانات الفنية الرئيسية قيد المراقبة ، فإننا نرسم الباقي أيضًا على المراقبة.
من أجل جمع ونقل المعلومات اللازمة ، كتب Zabbix
inventory.py ، والذي يشارك بشكل كبير في جمع بيانات
SNMP من المعدات ، وبدرجة أقل تحليل ملف Excel.
يطرح السؤال - لماذا لا تستخدم العنصر المضمن وأدخل نتيجته في
المخزون باستخدام أدوات Zabbix نفسها؟ هناك ثلاث إجابات:
- التعشيش غير كافية من الإجراءات ، كما غالبًا ما يكون من الضروري سحب القيمة عبر SNMP واستخدام النتيجة في الاستعلام التالي.
- يعمل مرة واحدة في اليوم جمع البيانات على جميع العقد مع برنامج نصي خارجي لا تحميل نشاط المراقبة الرئيسي وليس هناك قائمة انتظار ل item'am
- هناك بيانات لا يمكن جمعها عبر SNMP
يتم تخزين البيانات على موفري الخدمة ، والتي لا يستطيع مهندسو الخط الأول والثاني الاستغناء عنها ، في ملف excel على محرك أقراص شبكة مشترك ويتم تحديثها من قبل المديرين الذين يجرون عقود الاتصالات. تسبب التكامل مع الملف في شكوك كبيرة - التفوق اللغوي ، والمملوء يدويًا ، والذي يمكن أن يغير الهيكل والاسم والموقع ، وما إلى ذلك ، على الأرجح سوف يلقي الأخطاء باستمرار. ولكن بسبب عدم وجود مصدر آخر ذي صلة لمثل هذه البيانات ، كان علي أن أستخدمها. من أجل حماية أنفسنا بطريقة ما من التحرير المستمر للنص ، اتفقنا مع المديرين على الهيكل والملء الصحيح ، وشرحوا كيف سيتم تنفيذ التفريغ التلقائي وأنه من المهم مراقبة الهيكل الحالي. في الممارسة العملية ، بالطبع ، حدثت أخطاء ، لكننا سرعان ما تعقبناها ، ولعناها ، لكن صححناها.
BGP-AS-BASE.cfg3216:Beeline
9002:Retn
2854:Orange
~omit~
8359:MTS
يمثل
ملف BGP-AS-BASE.cfg مراسلات رقم
AS واسم الموفر. من الضروري تحديد الموفر الذي
تم تثبيت
BGP به (فجأة يوجد خطأ في الملف مع العقود). لم يتم استخدام القاعدة الخارجية ، كما هناك العديد من الأرقام
AS الخاصة.
من حيث
SNMP :
- نحن نطلب من الشبكات الفرعية للموجه بواسطة OID 1.3.6.1.2.1.4.20.1.1 وأقنعة الشبكة الفرعية بواسطة OID 1.3.6.1.2.1.4.20.1.3 في طلب واحد. نعالجها ونترجمها إلى xxxx / xx ونكتبها في خلية host_networks .
- نحن نطلب بيانات عن عناوين IP لأقران BGP ، وكذلك ASN الخاصة بهم ، نجد اسم الموفر حسب الرقم في قاعدة البيانات التي أنشأناها. نكتبها في حقول host_router و host_netmask . من المهم تحديد 38 حرفًا على الفور هذه الحقول لا تدعم أكثر. لا تتطابق دائمًا أسماء الحقول الخاصة بنا في قاعدة البيانات مع البيانات التي تخزّنها استخدم الحقول الموجودة في قاعدة بيانات Zabbix ، حتى لا تعبث مع إنشاء حقول جديدة في الجدول. تم تصحيح أسماء الحقول الصحيحة في WEB ، ولم يكن هناك أي لبس.
- نحن تحميل البيانات على البائع ، والطراز والمعدات البرمجيات. Parsim ، الكتابة إلى المتغيرات. يرجع التصميم المرتبط بكتابة نموذج الجهاز إلى حقيقة أن بعض Cisco لها اسم مكتوب في OID مختلف (غالبًا للهيكل) ، لذا كان علي إجراء فحص إضافي للبيانات.
يتم تضمين الكتلة بأكملها المرتبطة بـ SNMP في
المحاولة - باستثناء ، إذا لم يكن هناك SNMP على الجهاز ، فلن يسقط البرنامج النصي ، وعلى الأقل نحصل على البيانات من Excel بواسطة الموفرين. لفهم أي جزء من البرنامج النصي تم تنفيذه وما هو غير ذلك ، نكتب نجاح كتلة SNMP في الحقل
date_hw_expiry ، بالإضافة إلى كتابة تاريخ آخر مرة يمكننا فيها إزالة جميع البيانات الموجودة على SNMP ، وتاريخ آخر مرة يمكننا فيها العثور على البيانات في ملف Excel.

كل هذا يعود في شكل
JSON استعداد ل Zabbix.
يتم بدء تحديث جميع بيانات المخزون مرة واحدة يوميًا ، حيث يتم تفريغ جميع المضيفين وبدء بدء
stock.py لكل كائن.
يتم استخدام
المعالجة المتعددة (يتم أخذ مثال من المساحات الواسعة للإنترنت). للبحث ، نستخدم
معرف SAP ، الذي لدينا في اسم المضيف. الإخراج الناتج هو
التحديث المكتوب 'أوم في Zabbix.
ملخص
لتنفيذ كل التكامل والتحديث التلقائي وتحديث الآليات المدمجة ، تعد واجهة برمجة تطبيقات Zabbix أكثر من كافية. الوظائف الرئيسية المستخدمة هي
host.get ،
host.create و
host.update ، والتي تتيح لك معًا التحكم الكامل في إنشاء وتحديث قاعدة بيانات كائنات المراقبة. يمكن تقديم بيانات المدخلات الخاصة بهذه الوظائف من أي أنظمة ومصادر متوفرة.
الوحدات الرئيسية بيثون التي ساعدتنا على التعامل مع هذه المهمة:
pysnmp ،
xlrd ،
zabbix.api ،
xml ،
ipaddress ،
json .
xlrd - تحليل التفوق.
XML - تحليل XML.
pysnmp - سحب بيانات SNMP من المعدات.
تفاعل SNMP أسهل من SSH ، على الأقل لأنه في الممارسة العملية يستجيب جزء من الأجهزة بسرعة أكبر إلى SNMP من SSH ، فإن تحليل استجابات SNMP ليس ضروريًا من الناحية العملية ، على الرغم من أن CLIs للبائعين المختلفين تختلف غالبًا عن بعضها البعض ، والاستنتاجات هي نفسها الفرق قد تختلف حتى في نماذج مختلفة من نفس البائع.
تطبيق
OID الرئيسي:
iso.3.6.1.2.1.4.20.1.1 - عناوين جميع واجهات جهاز التوجيه
iso.3.6.1.2.1.4.20.1.3 - أقنعة الشبكة الفرعية لجميع واجهات جهاز التوجيه
iso.3.6.1.2.1.15.3.1.7 - جميع أقران BGP من جهاز التوجيه
iso.3.6.1.2.1.15.3.1.9 - AS لجميع أقران BGP للموجه
iso.3.6.1.2.1.47.1.1.1.1.13.1 - نموذج
iso.3.6.1.2.1.47.1.1.1.1.10.1 - نسخة قصيرة من البرنامج
iso.3.6.1.2.1.47.1.1.1.1.1.12.1 - البائع
iso.3.6.1.2.1.1.1.0 - إصدار برنامج مفصل
iso.3.6.1.2.1.47.1.1.1.1.7.1 - الطراز ، نوع الهيكل
كان لابد من إضافة
لوحة القيادة قليلاً لتقسيم المشكلات على شبكات التوزيع وعدم التدخل في كومة الذاكرة المؤقتة. أضف أيضًا العديد من الحقول ، على سبيل المثال ip ، واسم الموفر وعنوانه ، بحيث يكون في حالة وقوع حادث كبير نسخ اللصق من المستعرض في الرسالة إلى جميع الكائنات التي توجد بها مشكلة ، فورًا مع جميع البيانات اللازمة للموفر.

تمت كتابة
"Workview" بشكل منفصل ، حيث يمكننا العثور على جميع المعلومات التي تم جمعها ، بالإضافة إلى الرسوم البيانية التي تم جمعها لهذا الكائن.
