Zabbix - توسيع حدود الماكرو

عند تقديم حل لأحد العملاء ، نشأت مهمتان أردت حلهما بشكل جميل مع وظائف Zabbix العادية.

مهمة 1. تتبع إصدار البرنامج الثابت الحالي على أجهزة توجيه Mikrotik.

يتم حل المهمة بسهولة - عن طريق إضافة وكيل إلى قالب HTTP. يتلقى الوكيل الإصدار الحالي من موقع Mikrotik ، ويقارن المشغل الإصدار الحالي بالإصدار الحالي ويصدر تنبيهًا في حالة وجود تعارض.

عندما يكون لديك 10 أجهزة توجيه ، فإن مثل هذه الخوارزمية ليست مهمة ، ولكن ماذا تفعل مع 3000 جهاز توجيه؟ إرسال 3000 طلب للسيرفر؟ بالطبع ، سيعمل مثل هذا المخطط ، لكن فكرة 3000 طلب لم تناسبني ، أردت أن أجد حلًا آخر. بالإضافة إلى ذلك ، لا يزال هناك عيب في مثل هذه الخوارزمية: يمكن للجانب الآخر حساب مثل هذا العدد من الطلبات من عنوان IP واحد لهجوم DoS ، ويمكنهم ببساطة حظره.

مهمة 2. استخدام جلسة تفويض في وكلاء HTTP مختلفين.

عندما يحتاج الوكيل إلى تلقي معلومات من الصفحات "المغلقة" عبر HTTP ، يلزم وجود ملف تعريف ارتباط للترخيص. للقيام بذلك ، يوجد عادة نموذج تفويض قياسي مع زوج "تسجيل الدخول / كلمة المرور" وتعيين معرف الجلسة في ملف تعريف الارتباط.

ولكن هناك مشكلة ، فمن المستحيل الوصول إلى بيانات عنصر آخر من عنصر وكيل HTTP لاستبدال هذه القيمة في الرأس.

هناك أيضًا "نص ويب" ، وله قيود أخرى ، فهو لا يسمح لك بالحصول على محتوى للتحليل والمزيد من الحفظ. يمكنك فقط التحقق من وجود المتغيرات الضرورية على الصفحات أو تمرير المتغيرات المستلمة مسبقًا بين خطوات البرنامج النصي للويب.

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

Zabbix لديه وثائق API جيدة ومفصلة. لتبادل البيانات عبر api ، يتم استخدام تنسيق بيانات Json. يمكن العثور على التفاصيل في الوثائق الرسمية.

يظهر تسلسل الإجراءات للحصول على البيانات التي نحتاجها وتسجيلها في ماكرو في الرسم التخطيطي أدناه.

Zabbix - توسيع حدود الماكرو

الخطوة 1

يمكن أن تتكون الخطوة الأولى من إجراء واحد أو إجراءات متعددة. تم وضع كل المنطق الرئيسي في الخطوات الأولى ، والخطوات الثلاث الأخيرة هي الخطوات الرئيسية.

في المثال الخاص بي ، كانت الخطوة الأولى هي الحصول على ملفات تعريف ارتباط الترخيص على PBX للمهمة الأولى. بالنسبة للمهمة الثانية ، حصلت على رقم الإصدار الحالي من البرامج الثابتة Mikrotik.

عنوان URL للإصدارات الحالية من البرامج الثابتة Mikrotik

يتم الوصول إلى هذه العناوين بواسطة جهاز Mikrotik نفسه عند استلام أحدث إصدار من البرنامج الثابت المتاح.

الخطوة الأولى فردية تمامًا لكل حالة وقد يكون منطق عملها مختلفًا. كل هذا يتوقف على مهمتك.

عند العمل باستخدام البرمجة النصية للويب ، تتبع طريقة الاستجابة التي تحتاجها. عناوين استجابة HTTP أو الذات тело استجابة بدون رؤوس؟
إذا كانت هناك حاجة لملفات تعريف الارتباط الخاصة بالتخويل ، فقم بتعيين طريقة الاستجابة عناوين كما في حالة النجمة.

إذا كنت بحاجة إلى بيانات ، كما في حالة استجابة خادم mikrotik ، ضع هيئة استجابة بدون رؤوس.

الخطوة 2

دعنا ننتقل إلى الخطوة الثانية. الحصول على جلسة تفويض:

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin"
        "password": "zabbix"
    },
    "id": 1,
    "auth": null
}

jsonrpc هو إصدار بروتوكول JSON-RPC الذي يتم استخدامه ؛
يطبق Zabbix الإصدار 2.0 من JSON-RPC ؛

  • الطريقة - الطريقة التي تسمى ؛
  • المعلمات - المعلمات التي تم تمريرها بواسطة الطريقة ؛
  • المعرف هو معرف طلب تعسفي ؛
  • المصادقة - مفتاح مصادقة المستخدم ؛ نظرًا لأنه ليس لدينا حتى الآن ، فلنقم بتعيينه على قيمة خالية.

للعمل مع API ، أنشأت حسابًا منفصلاً بحقوق محدودة. أولاً ، لا تحتاج إلى منح حق الوصول إلى حيث لا تحتاج إلى ذلك. وثانياً ، قبل الإصدار 5.0 ، يمكن قراءة كلمة المرور التي تم تعيينها من خلال الماكرو. وفقًا لذلك ، إذا كنت تستخدم كلمة مرور مسؤول Zabbix ، فمن السهل سرقة حساب المسؤول.

سيكون هذا صحيحًا بشكل خاص عند العمل مع API من خلال البرامج النصية لجهات خارجية وتخزين بيانات الاعتماد على الجانب.

منذ الإصدار 5.0 ، هناك خيار لإخفاء كلمة المرور المحفوظة في الماكرو.

Zabbix - توسيع حدود الماكرو

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

Zabbix - توسيع حدود الماكرو

بعد أن تلقينا التفويض في واجهة برمجة التطبيقات ، ننتقل إلى الحصول على قائمة بوحدات الماكرو.

الخطوة 3

لا تسمح لك واجهة برمجة التطبيقات بتحديث ماكرو مضيف بالاسم ، يجب عليك أولاً الحصول على معرّف الماكرو. علاوة على ذلك ، للحصول على قائمة بوحدات الماكرو لمضيف معين ، تحتاج إلى معرفة معرف هذا المضيف ، وهذا طلب إضافي. استخدم الماكرو الافتراضي {معرّف المضيف} في الطلب غير مسموح به. قررت تجاوز التقييد مثل هذا:

Zabbix - توسيع حدود الماكرو

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

يمكن تصفية الاستجابة بقائمة بجميع وحدات الماكرو الموجودة على مضيف معين بواسطة نمط:

regex:{"hostmacroid":"([0-9]+)"[A-z0-9,":]+"{$MIKROTIK_VERSION}"

Zabbix - توسيع حدود الماكرو

وبالتالي ، نحصل على معرف الماكرو الذي نحتاجه ، وأين MIKROTIK_VERSION هو اسم الماكرو الذي نبحث عنه. في حالتي ، يتم البحث في الماكرو MIKROTIK_VERSIONالذي تم تعيينه للمضيف.

الطلب نفسه يبدو كالتالي:

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc":"2.0",
    "method":"usermacro.get",
    "params":{
        "output":"extend",
        "hostids":"{$HOST_ID}"
    },
    "auth":"{sid}",
    "id":1
}

متغير {سيد} تم الحصول عليها في الخطوة الثانية وسيتم استخدامها باستمرار ، حيث تحتاج إلى العمل مع واجهة API.

الخطوة الرابعة النهائية - تحديث الماكرو

نحن نعرف الآن معرّف الماكرو الذي يحتاج إلى تحديث ، أو ملف تعريف ارتباط الترخيص أو إصدار البرنامج الثابت لجهاز التوجيه. يمكنك تحديث الماكرو نفسه.

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc":"2.0",
    "method":"usermacro.update",
    "params":{
        "hostmacroid":"{hostmacroid}",
        "value":"{mikrotik_version}"
    },
    "auth":"{sid}",
    "id":1
}

{ميكروتيك_النسخة} هي القيمة التي تم الحصول عليها في الخطوة الأولى. في المثال الخاص بي ، إصدار البرنامج الثابت الحالي mikrotik
{هوستماكرويد} - تم الحصول على القيمة في الخطوة الثالثة - معرف الماكرو الذي نقوم بتحديثه.

النتائج

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

الميزة الواضحة لهذا النهج هي "قابلية" الحل بين الخوادم المختلفة.

بالنسبة لي شخصيًا ، من الغريب أن وكيل HTTP لا يمكنه الوصول إلى بيانات عنصر آخر واستبدالها في نص الطلب أو الرؤوس [ زبكسنيكست-5993].

يمكن للقالب النهائي تنزيل على جيثب.

المصدر: www.habr.com

إضافة تعليق