زبکس کو باکس سے باہر نجمہ کے ساتھ کیسے جوڑیں۔

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

اضافی سافٹ ویئر یا اسکرپٹ انسٹال کیے بغیر ان دونوں سسٹمز کو "دوست بنانے" کا خیال بہت پہلے پیدا ہوا تھا۔ ایک فوری گوگلنگ سے بہت سے ممکنہ حل نکلے، یہ سب اس حقیقت پر ابلتے ہیں کہ سرور پر اسکرپٹس (پیہا، باش، ازگر وغیرہ میں) اپ لوڈ کریں، اور آپ خوش ہوں گے۔ میں بیرونی اسکرپٹس کے بغیر اور نگرانی اور PBX کے ساتھ سرور پر اضافی سافٹ ویئر انسٹال کیے بغیر "باکس سے باہر" نگرانی کو نافذ کرنا چاہتا تھا۔

میں نے اس کے ساتھ کل 4 کام کے دن گزارے، لیکن نتیجہ اس کے قابل تھا۔ AMI انٹرفیس کے ذریعے کام کرنا، کم سطح کا پتہ لگانا، محرکات، اور سب سے اہم بات، PBX اور دیگر تمام ترتیبات کو جوڑنے میں اب تقریباً 15 منٹ لگتے ہیں۔

Zabbix 4.4 دستیاب ہے، Asterisk ورژن 100 کے تقریباً 13 ٹکڑے۔ کچھ PBXs FreePBX ویب انٹرفیس کے ساتھ آتے ہیں، کچھ ننگے کنسول کے ساتھ، ٹرکس کا ایک گروپ اور ڈائل پلان کے ذریعے انضمام۔

پی بی ایکس سے ڈیٹا وصول کرنا

پہلا اور اہم نکتہ جسے حل کرنے کی ضرورت ہے وہ ہے ساتھیوں اور SIP رجسٹریشن کے بارے میں ڈیٹا حاصل کرنا۔ اس مقصد کے لیے، پی بی ایکس میں AGI، AMI، ARI اور SSH کنسول انٹرفیس ہیں۔ واضح وجوہات کی بناء پر، میں نے اضافی ماڈیولز پر غور نہیں کیا۔

پہلے ہمیں یہ معلوم کرنا ہوگا کہ یہ اگی، امی، آری کیا ہیں...

  • AGI - ڈائل پلان میں اسکرپٹ کا استعمال۔ بنیادی طور پر کال مینجمنٹ کے لیے استعمال کیا جاتا ہے۔
  • AMI - تمام ضروری معلومات فراہم کر سکتا ہے، پورٹ 5038 کے ذریعے کام کرتا ہے، ٹیل نیٹ کی طرح۔ ہمارے مطابق!
  • ARI - جدید، فیشن ایبل، JSON۔ بہت سے امکانات ہیں، ڈیٹا فارمیٹ Zabbix کے لیے قابل فہم ہے، لیکن میرے لیے کوئی اہم چیز نہیں ہے: آپ sip رجسٹریشن کو کنٹرول نہیں کر سکتے۔ ایک اور نقصان یہ ہے کہ ساتھیوں کے لیے آن لائن/آف لائن صرف دو ریاستیں ہیں، حالانکہ مزید ریاستیں ہیں اور تشخیص کرتے وقت ان کو مدنظر رکھنا مفید ہے۔
  • SSH سب کچھ کر سکتا ہے، لیکن بعض اوقات "سیکیورٹی وجوہات" کی وجہ سے اس کی اجازت نہیں ہوتی ہے۔ خیالات مختلف ہو سکتے ہیں، میں ان میں نہیں جاؤں گا۔

تاہم، اپنی تمام خامیوں کے ساتھ، ARI نگرانی کی تمام ضروریات کا 90% احاطہ کرتا ہے۔

Zabbix اور Telnet - میری مایوسی۔

میں AMI کو اچھی طرح جانتا ہوں؛ ایک وقت میں میں نے دور دراز کے دفاتر، کال مینجمنٹ وغیرہ کے ذریعے تقسیم کے ساتھ ہونے والی بات چیت میں نقصانات کا سراغ لگانا نافذ کیا۔ ٹیل نیٹ کے ساتھ، سب کچھ بالکل واضح ہے: کنکشن کھولیں، کمانڈ بھیجیں اور جواب پڑھیں۔ میں نے یہی کیا، لیکن نتیجہ نے مجھے مایوس کیا۔

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

میں نے محسوس کیا کہ جب تک روایتی لاگ ان اور پاس ورڈ کی درخواست نہیں ہوتی، میں آگے نہیں بڑھوں گا۔ صرف تفریح ​​کے لیے، میں نے کوڈ سے اجازت سے متعلق ہر چیز کو ہٹا دیا اور ہر چیز کو دوبارہ جوڑ دیا۔ کام کرتا ہے! لیکن یہ ضروریات کو پورا نہیں کرتا۔ آگے بڑھو…

آئیے تلاش کی طرف لوٹتے ہیں۔

میں نے ARI دستاویزات کو دوبارہ پڑھا، اضافی ٹیسٹ چلائے - یہاں کوئی گھونٹ رجسٹریشن نہیں ہے۔ دعوتیں ہیں، مکالمے ہیں، بریکز ہیں، لیکن کوئی رجسٹریشن نہیں ہے۔ کسی وقت میں نے سوچا کہ کیا ہمیں واقعی گدھ کے اندراج کی ضرورت ہے؟

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

asterisk -rx "sip reload"

ویب پر AMI تک رسائی حاصل کرنا بہت اچھا ہوگا: اس سے تمام مسائل حل ہو جائیں گے، میں نے سوچا۔ میں اس سمت کھودنا شروع کرتا ہوں، اور لفظی طور پر پہلی سرچ لائن آفیشل نجمہ دستاویزات کی طرف لے جاتی ہے، جو کہتی ہے کہ میرے کاموں کے لیے ایک آپشن موجود ہے۔ ویب فعال فائل میں /etc/asterisk/manager.conf، جسے سیکشن میں YES پر سیٹ کرنے کی ضرورت ہے۔ [عام]

اس کے بعد، فارم کی باقاعدہ ویب درخواست کے ذریعے http://ats:8089/mxml?action=SIPshowregistry ہم تمام ضروری معلومات حاصل کرتے ہیں۔

FreePBX انٹرفیس استعمال کرتے وقت، آپ ویب کے ذریعے اس اختیار کو فعال نہیں کر سکتے ہیں؛ آپ کو manager.conf فائل میں تبدیلیاں کر کے کنسول کے ذریعے اسے فعال کرنے کی ضرورت ہے۔ جب ویب کے ذریعے کنفیگریشن تبدیلیاں کی جاتی ہیں تو FreePBX اسے نہیں مٹاتا ہے۔

میں نے ایک طویل عرصے سے مختلف قسم کے Asterisk انضمام کے ساتھ کام کیا ہے، لیکن میں نے اس خصوصیت کا ذکر کہیں بھی نہیں دیکھا۔ میں حیران تھا کہ کوئی بھی پی بی ایکس کے ساتھ بات چیت کے اس طریقے کو بیان نہیں کرتا ہے۔ اس موضوع پر معلومات تلاش کرنے کے لئے یہ خاص طور پر مفید تھا: عملی طور پر کچھ بھی نہیں ہے یا یہ بالکل مختلف کاموں کے لئے استعمال کیا جاتا ہے.

ویب AMI - کس قسم کا جانور؟

ایک آپشن شامل کرنا ویب فعال فائل کرنے کے لئے manager.conf ویب کے ذریعے اے ٹی ایس مینجمنٹ تک مکمل رسائی فراہم کی۔ ایک باقاعدہ AMI کے ذریعے دستیاب تمام کمانڈز اب ویب پر موجود ہیں، آپ PBX کے واقعات کو ساکٹ کے ذریعے سن سکتے ہیں۔ آپریشن کا اصول کنسول AMI سے مختلف نہیں ہے۔ اس اختیار کو فعال کرنے کے بعد، آپ مندرجہ ذیل پتوں پر PBX سے رابطہ کر سکتے ہیں:

https://ats:8089/manager - جانچنے اور دستی طور پر درخواستیں بھیجنے کے لیے ایک سادہ انٹرفیس والا ویب صفحہ۔ تمام جوابات پڑھنے کے قابل HTML میں فارمیٹ کیے گئے ہیں۔ نگرانی کے لیے بہت موزوں نہیں ہے۔
https://ats:8089/rawman - صرف ٹیکسٹ آؤٹ پٹ، کنسول AMI کی طرح فارمیٹ
https://ats:8089/mxml - صرف ٹیکسٹ آؤٹ پٹ، XML فارمیٹ میں۔ ہم پر سوٹ!

زبکس کو باکس سے باہر نجمہ کے ساتھ کیسے جوڑیں۔

پھر میں نے سوچا: "یہ حل ہے! اب سب کچھ تیار ہو جائے گا! آرام دہ اور پرسکون لیموں کی نچوڑ، لیکن خوشی منانا بہت جلد تھا۔ ہمیں درکار معلومات حاصل کرنے کے لیے ضروری کارروائی کے ساتھ GET درخواست استعمال کرنا کافی ہے۔ کارروائی، جو جواب میں تمام رجسٹریشنز اور ان کی حیثیت کی فہرست کے ساتھ xml لوٹاتا ہے۔ یہ سب بہت اچھا ہے، لیکن آپ کو کوکی سے سیشن یاد رکھنے کے لیے اجازت درکار ہے۔ جب آپ براؤزر میں ٹیسٹ کرتے ہیں، تو آپ اس عمل کے بارے میں نہیں سوچتے۔

اجازت دینے کا عمل

سب سے پہلے ہم ایڈریس کا پتہ لگاتے ہیں۔ http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix، جواب میں، سرور ہمیں اجازت کے سیشن کے ساتھ ایک کوکی بھیجتا ہے۔ HTTP درخواست کی طرح دکھتا ہے:

https://ats:8089/mxml?action=login&username=zabbix&secret=zabbix

Host: ats:8089
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

جواب:

GET: HTTP/1.1 200 OK
Server: Asterisk/13.29.2
Date: Thu, 18 Jun 2020 17:41:19 GMT
Cache-Control: no-cache, no-store
Content-type: text/xml
Set-Cookie: mansession_id="6f5de42c"; Version=1; Max-Age=600
Pragma: SuppressEvents
Content-Length: 146

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" message="Authentication accepted"/>
</response>
</ajax-response>

وہاں کام کرنے کے لیے آپ کی ضرورت ہے۔ mansession_id="6f5de42c۔"، یعنی خود اجازت کوکی۔
مواد جو آپ کو صرف جواب کی جانچ پڑتال کرنے کی ضرورت ہے "توثیق قبول کر لی گئی۔" اس کے بعد، PBX سرور پر تمام کالوں کے لیے، ہمیں درخواست میں اجازت دینے والی کوکی شامل کرنے کی ضرورت ہوگی۔

https://ats:8089/mxml?action=SIPpeers

Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"

اجازت دینے والی کوکی حاصل کرنے اور اسے دوسری درخواستوں میں استعمال کرنے کا طریقہ یہاں پڑھیں:Zabbix - میکرو حدود کو بڑھانا»

Zabbix میں ٹریکنگ عناصر بنانے کے لیے میں آٹو ڈیٹیکشن کا استعمال کروں گا۔

خودکار پتہ لگانا

رجسٹریشن کا خود بخود پتہ لگانے اور ہم مرتبہ ریاستوں کو ٹریک کرنے کے لیے، آپ کو درج ذیل پتے پر رابطہ کرنا ہوگا: https://ats:8089/mxml?action=SIPshowregistry یا https://ats:8089/mxml?action=SIPpeers

جواب میں، PBX ہمیں ایک XML جواب دیتا ہے:

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" eventlist="start" message="Registrations will follow"/>
</response>
...
<response type="object" id="unknown">
<generic event="RegistryEntry" host="login.mtt.ru" port="5060" username="111111" domain="login.mtt.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="222222" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="333333" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
...
</ajax-response>

جواب میں بہت زیادہ کچرا ہے، لہذا پری پروسیسنگ میں ہم اسے ٹیمپلیٹ کے ذریعے فلٹر کرتے ہیں ایکس پاتھ: //جواب/عام[@ میزبان]
پھر مزہ شروع ہوتا ہے۔ پتہ لگانے کے ساتھ کام کرنے اور متحرک طور پر عناصر بنانے کے لیے، جواب JSON فارمیٹ میں ہونا چاہیے۔ XML خودکار پتہ لگانے کے لیے تعاون یافتہ نہیں ہے۔

XML کو JSON میں تبدیل کرنے کے لیے، مجھے آٹو ریپلیسمنٹ کے ساتھ تھوڑا سا کھیلنا پڑا، جس کے لیے میں نے JS میں اسکرپٹ بنایا۔

زبکس کو باکس سے باہر نجمہ کے ساتھ کیسے جوڑیں۔

ایک دلچسپ نکتہ: اے ٹی ایس کے جواب میں، تمام پیرامیٹرز ایک ہی حوالوں سے گھرے ہوئے ہیں، اور ٹیمپلیٹ کو لاگو کرنے کے بعد //جواب/عام[@ میزبان] وہ ڈبل والے سے تبدیل کر رہے ہیں.

عناصر بنانے کے لیے، ہم XML جواب (اب JSON) سے متغیرات استعمال کرتے ہیں۔

زبکس کو باکس سے باہر نجمہ کے ساتھ کیسے جوڑیں۔

ایس آئی پی رجسٹری

گھونٹ رجسٹریشن کے لیے ہم تین متغیرات استعمال کرتے ہیں: کا صارف کا نام, میزبان, پورٹ. میں عنصر کے نام سے خوش تھا۔ [ای میل محفوظ]: 5060مجھے کوئی ایسی صورت حال نہیں ملی جہاں آپ کو پانچوں متغیرات استعمال کرنے کی ضرورت ہو۔

مرکزی عنصر جو تمام رجسٹریشن کے بارے میں معلومات حاصل کرتا ہے، نجمہ - AMI SIP شو رجسٹری. ایک منٹ میں ایک بار یہ GET کی درخواست کرتا ہے۔ https://ats:8089/mxml?action=SIPshowregistry، جس کے بعد جوابی XML ڈیٹا کو تجزیہ کرنے کے لیے تمام منحصر عناصر کو منتقل کیا جاتا ہے۔ ہر رجسٹریشن کے لیے میں اس پر منحصر ایک عنصر بناتا ہوں۔ یہ آسان ہے کیونکہ ہم ایک درخواست میں تازہ ترین معلومات حاصل کرتے ہیں، نہ کہ ہر درخواست کے لیے الگ سے۔ اس عمل میں ایک اہم خرابی ہے - پروسیسر پر بوجھ۔

100 منحصر عناصر کی جانچ کرتے وقت، میں نے بوجھ کو محسوس نہیں کیا، لیکن 1700 عناصر کے ساتھ، اس نے پروسیسر پر 15 سیکنڈ کا نمایاں بوجھ دیا۔ اس بات کو ذہن میں رکھیں اگر آپ کے پاس کثیر تعداد میں منحصر عناصر ہیں۔

بوجھ کو "پھیلنے" کے اختیار کے طور پر یا کسی عنصر کے لیے مختلف پولنگ فریکوئنسی سیٹ کرنے کے لیے، آپ پروسیسنگ منطق کو ہر عنصر میں الگ سے منتقل کر سکتے ہیں۔

میں موصول ہونے والی معلومات کو مرکزی عنصر میں محفوظ نہیں کرتا ہوں۔ سب سے پہلے، مجھے اس کی ضرورت نظر نہیں آتی، اور دوسری بات، اگر جواب 64K سے زیادہ ہے، تو Zabbix اسے کاٹ دیتا ہے۔

چونکہ ہم منحصر عنصر کے لیے مکمل XML جواب استعمال کرتے ہیں، ہمیں پری پروسیسنگ میں اس عنصر کی قدر حاصل کرنے کی ضرورت ہے۔ کے ذریعے ایکس پاتھ یہ اس طرح کیا جاتا ہے:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ حالت)
رجسٹریشن سٹیٹس کے لیے، میں نے ٹیکسٹ سٹیٹس کا استعمال نہیں کیا، لیکن جاوا اسکرپٹ کا استعمال کرتے ہوئے انہیں عددی شکل میں تبدیل کیا:

switch(value) {
  case 'Registered':
    return 1;
  case 'Unregistered':
    return 0;
  default:
    return -1;
}

SIP ساتھیوں

ایس آئی پی رجسٹریشن کے ساتھ مشابہت کے ساتھ، نجمہ - AMI SIP شو رجسٹری کا ایک اہم عنصر ہے، جس میں منحصر افراد کو شامل کیا جاتا ہے۔

یہ دو منحصر عناصر پیدا کرتا ہے:

  • متن کی شکل میں ہم مرتبہ کی حیثیت
  • ڈیوائس ریسپانس ٹائم - اگر اسٹیٹس ٹھیک ہے، تو ڈیوائس ریسپانس ٹائم لکھا جاتا ہے، ورنہ "-1"

خود عنصر کا راستہ تھوڑا سا آسان ہے۔ ایکس پاتھ:

string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)

دوسرے عنصر کے لیے میں نے جاوا اسکرپٹ کو الگ کرنے کے لیے استعمال کیا۔ جواب وقت ہم مرتبہ کی حیثیت سے، چونکہ وہ ایک ساتھ محفوظ ہیں:

if(value.substring(0,2) == 'OK'){
	return value.match(/(d+)/gm);
}
else {
	return -1;
}

حاصل يہ ہوا

آؤٹ آف دی باکس حل پیچیدہ اور فوری طور پر واضح نہیں ہوسکتا ہے۔ مختلف نظاموں کے درمیان لچک اور پورٹیبلٹی کو بڑھاتا ہے۔

سب کو خوش اور آسان انضمام! ترتیب دینے کے لیے ٹیمپلیٹ اور ہدایات GitHub کے.

ماخذ: www.habr.com

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