Zabbix - میکرو حدود کو بڑھانا

ایک کلائنٹ کے لیے حل بناتے وقت، 2 کام پیدا ہوئے جنہیں میں خوبصورتی سے اور باقاعدہ Zabbix فعالیت کے ساتھ حل کرنا چاہتا تھا۔

مقصد 1۔ Mikrotik راؤٹرز پر موجودہ فرم ویئر ورژن کو ٹریک کرنا۔

کام آسانی سے حل ہو جاتا ہے - HTTP ٹیمپلیٹ میں ایک ایجنٹ شامل کر کے۔ ایجنٹ کو موجودہ ورژن Mikrotik ویب سائٹ سے موصول ہوتا ہے، اور ٹرگر موجودہ ورژن کا موجودہ ورژن سے موازنہ کرتا ہے اور کسی تضاد کی صورت میں الرٹ جاری کرتا ہے۔

جب آپ کے پاس 10 راؤٹرز ہوں تو ایسا الگورتھم اہم نہیں ہوتا، لیکن 3000 راؤٹرز کا کیا کریں؟ سرور کو 3000 درخواستیں بھیجیں؟ بلاشبہ ایسی سکیم کام کرے گی، لیکن 3000 درخواستوں کا خیال میرے مطابق نہیں تھا، میں دوسرا حل تلاش کرنا چاہتا تھا۔ اس کے علاوہ، اس طرح کے الگورتھم میں اب بھی ایک خرابی تھی: دوسری طرف DoS حملے کے لیے ایک IP سے اتنی زیادہ درخواستیں گن سکتا ہے، وہ اس پر پابندی لگا سکتے ہیں۔

مقصد 2۔ مختلف HTTP ایجنٹوں میں اجازت کے سیشن کا استعمال۔

جب کسی ایجنٹ کو HTTP کے ذریعے "بند" صفحات سے معلومات حاصل کرنے کی ضرورت ہوتی ہے، تو اجازت دینے والی کوکی کی ضرورت ہوتی ہے۔ ایسا کرنے کے لیے، عام طور پر "لاگ ان/ پاس ورڈ" جوڑا اور کوکی میں سیشن آئی ڈی سیٹ کرنے کے ساتھ ایک معیاری اجازت فارم ہوتا ہے۔

لیکن ایک مسئلہ ہے، ہیڈر میں اس قدر کو تبدیل کرنے کے لیے ایک HTTP ایجنٹ آئٹم سے کسی دوسرے آئٹم کے ڈیٹا تک رسائی ناممکن ہے۔

ایک "ویب اسکرپٹ" بھی ہے، اس کی ایک اور حد ہے، یہ آپ کو تجزیہ اور مزید بچت کے لیے مواد حاصل کرنے کی اجازت نہیں دیتی۔ آپ صرف صفحات پر ضروری متغیرات کی موجودگی کی جانچ کر سکتے ہیں یا ویب اسکرپٹ کے مراحل کے درمیان پہلے حاصل کردہ متغیرات کو پاس کر سکتے ہیں۔

ان کاموں کے بارے میں تھوڑا سا سوچنے کے بعد، میں نے ایسے میکرو استعمال کرنے کا فیصلہ کیا جو مانیٹرنگ سسٹم کے کسی بھی حصے میں بالکل نظر آتے ہیں: ٹیمپلیٹس، ہوسٹس، ٹرگرز یا آئٹمز میں۔ اور آپ ویب انٹرفیس API کے ذریعے میکروز کو اپ ڈیٹ کر سکتے ہیں۔

Zabbix کے پاس اچھی اور تفصیلی API دستاویزات ہیں۔ اے پی آئی کے ذریعے ڈیٹا کے تبادلے کے لیے، Json ڈیٹا فارمیٹ استعمال کیا جاتا ہے۔ میں تفصیلات دیکھی جا سکتی ہیں۔ سرکاری دستاویزات.

ہمیں مطلوبہ ڈیٹا حاصل کرنے اور میکرو میں ریکارڈ کرنے کے لیے کارروائیوں کی ترتیب نیچے دیے گئے خاکے میں دکھائی گئی ہے۔

Zabbix - میکرو حدود کو بڑھانا

1 مرحلہ

پہلا قدم ایک عمل یا بہت سے اعمال پر مشتمل ہو سکتا ہے۔ تمام بنیادی منطق پہلے مراحل میں رکھی گئی ہے، اور آخری 3 مراحل اہم ہیں۔

میری مثال میں، پہلا قدم یہ تھا کہ پہلے کام کے لیے PBX پر اجازت کی کوکیز حاصل کی جائیں۔ دوسرے کام کے لیے، مجھے موجودہ Mikrotik فرم ویئر ورژن کا نمبر ملا۔

Mikrotik فرم ویئر کے موجودہ ورژن کا URL

جب تازہ ترین دستیاب فرم ویئر ورژن موصول ہوتا ہے تو ان پتوں تک خود Mikrotik آلات کے ذریعے رسائی حاصل کی جاتی ہے۔

پہلا مرحلہ ہر معاملے کے لیے مکمل طور پر انفرادی ہے اور اس کے کام کی منطق مختلف ہو سکتی ہے۔ یہ سب آپ کے کام پر منحصر ہے۔

ویب اسکرپٹنگ کے ساتھ کام کرتے وقت، اس بات پر نظر رکھیں کہ آپ کو کس جوابی طریقہ کی ضرورت ہے۔ عنوانات HTTP جواب یا خود جسم ہیڈرز کے بغیر جواب؟
اگر اجازت دینے والی کوکیز کی ضرورت ہو تو جواب کا طریقہ ترتیب دیں۔ عنوانات جیسا کہ نجمہ کے معاملے میں ہے۔

اگر آپ کو ڈیٹا کی ضرورت ہے، جیسا کہ میکروٹک سرور کے جواب کی صورت میں، ڈالیں۔ جسم ہیڈر کے بغیر جواب۔

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 JSON-RPC ورژن 2.0 کو نافذ کرتا ہے؛

  • طریقہ - وہ طریقہ جسے کہا جاتا ہے؛
  • params - پیرامیٹرز جو طریقہ سے گزرے ہیں؛
  • id ایک صوابدیدی درخواست شناخت کنندہ ہے۔
  • auth - صارف کی تصدیق کی کلید؛ چونکہ ہمارے پاس یہ ابھی تک نہیں ہے، آئیے اسے null پر سیٹ کرتے ہیں۔

API کے ساتھ کام کرنے کے لیے، میں نے محدود حقوق کے ساتھ ایک الگ اکاؤنٹ بنایا ہے۔ سب سے پہلے، آپ کو وہاں تک رسائی دینے کی ضرورت نہیں ہے جہاں آپ کو ضرورت نہیں ہے۔ اور دوسرا، ورژن 5.0 سے پہلے، میکرو کے ذریعے سیٹ پاس ورڈ پڑھا جا سکتا تھا۔ اس کے مطابق، اگر آپ Zabbix ایڈمنسٹریٹر پاس ورڈ استعمال کرتے ہیں، تو ایڈمن اکاؤنٹ چوری کرنا آسان ہے۔

یہ خاص طور پر اس وقت درست ہو گا جب API کے ساتھ تھرڈ پارٹی اسکرپٹس کے ذریعے کام کر رہے ہوں اور اسناد کو سائیڈ پر اسٹور کریں۔

ورژن 5.0 کے بعد سے میکرو میں محفوظ کردہ پاس ورڈ کو چھپانے کا آپشن موجود ہے۔

Zabbix - میکرو حدود کو بڑھانا

API کے ذریعے ڈیٹا کو اپ ڈیٹ کرنے کے لیے علیحدہ اکاؤنٹ بناتے وقت، اس بات کو یقینی بنائیں کہ آپ کو مطلوبہ ڈیٹا ویب انٹرفیس کے ذریعے دستیاب ہے یا نہیں اور کیا اسے اپ ڈیٹ کرنا ممکن ہے۔ میں نے چیک نہیں کیا، اور پھر ایک لمبے عرصے تک میں یہ نہیں سمجھ سکا کہ مجھے جس میکرو کی ضرورت تھی وہ API میں کیوں نظر نہیں آرہا تھا۔

Zabbix - میکرو حدود کو بڑھانا

API میں اجازت ملنے کے بعد، ہم میکرو کی فہرست حاصل کرنے کے لیے آگے بڑھتے ہیں۔

3 مرحلہ

API آپ کو میزبان میکرو کو نام سے اپ ڈیٹ کرنے کی اجازت نہیں دیتا، آپ کو پہلے میکرو ID حاصل کرنا ہوگی۔ مزید برآں، کسی مخصوص میزبان کے لیے میکرو کی فہرست حاصل کرنے کے لیے، آپ کو اس میزبان کی شناخت جاننے کی ضرورت ہے، اور یہ ایک اضافی درخواست ہے۔ ڈیفالٹ میکرو استعمال کریں۔ {میزبان ID} درخواست میں اجازت نہیں ہے. میں نے اس طرح کی پابندی کو نظرانداز کرنے کا فیصلہ کیا:

Zabbix - میکرو حدود کو بڑھانا

میں نے اس میزبان کی ID کے ساتھ ایک مقامی میکرو بنایا ہے۔ ویب انٹرفیس سے میزبان ID کا پتہ لگانا بہت آسان ہے۔

دیئے گئے میزبان پر تمام میکروز کی فہرست کے ساتھ جواب کو ایک پیٹرن کے ذریعے فلٹر کیا جا سکتا ہے:

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

Zabbix - میکرو حدود کو بڑھانا

اس طرح، ہمیں میکرو کی ID مل جاتی ہے جس کی ہمیں ضرورت ہے۔ 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
}

متغیر {sid} دوسرے مرحلے میں حاصل کیا اور مسلسل استعمال کیا جائے گا، جہاں آپ کو API انٹرفیس کے ساتھ کام کرنے کی ضرورت ہے۔

آخری 4 قدم - میکرو کو اپ ڈیٹ کرنا

اب ہم میکرو آئی ڈی کو جانتے ہیں جسے اپ ڈیٹ کرنے کی ضرورت ہے، اجازت دینے والی کوکی یا راؤٹر کا فرم ویئر ورژن۔ آپ خود میکرو کو اپ ڈیٹ کر سکتے ہیں۔

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_version} پہلے مرحلے میں حاصل کی گئی قدر ہے۔ میری مثال میں، موجودہ mikrotik فرم ویئر کا ورژن
{hostmacroid} - قدر تیسرے مرحلے میں حاصل کی گئی تھی - میکرو کی آئی ڈی جسے ہم اپ ڈیٹ کر رہے ہیں۔

نتائج

معیاری فعالیت کے ساتھ مسئلے کو حل کرنے کا طریقہ زیادہ پیچیدہ اور طویل ہے۔ خاص طور پر اگر آپ پروگرامنگ جانتے ہیں اور جلدی سے اسکرپٹ میں ضروری منطق شامل کر سکتے ہیں۔

اس نقطہ نظر کا واضح فائدہ مختلف سرورز کے درمیان حل کی "پورٹ ایبلٹی" ہے۔

میرے لیے ذاتی طور پر، یہ عجیب بات ہے کہ HTTP ایجنٹ کسی دوسرے آئٹم کے ڈیٹا تک رسائی حاصل نہیں کر سکتا اور اسے درخواست کے باڈی یا ہیڈر میں تبدیل نہیں کر سکتا۔ ZBXNEXT-5993].

تیار ٹیمپلیٹ کر سکتے ہیں GitHub پر ڈاؤن لوڈ کریں۔.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں