زبڪس کي ڪيئن ڳنڍجي Asterisk سان دٻي مان ٻاهر

پوئين مضمون ۾ "زيبڪس - ميڪرو حدون وڌائڻ" مون توهان کي ٻڌايو ته ڪيئن حاصل ڪجي هڪ اٿارٽيشن سيشن ۽ ان کي متبادل مقامي ميزبان ميڪرو ۾. هن آرٽيڪل ۾ آئون توهان کي ٻڌايان ٿو ته زبڪس کي ڪيئن ڳنڍجي Asterisk سان ٻاهرين اسڪرپٽ ۽ سافٽ ويئر کان سواء.

انهن ٻن سسٽم جي "دوست ٺاهڻ" جو خيال هڪ ڊگهو وقت اڳ پيدا ٿيو، بغير اضافي سافٽ ويئر يا اسڪرپٽ نصب ڪرڻ کان سواء. هڪ جلدي گوگلنگ ڪيترن ئي ممڪن حلن کي پيدا ڪيو، اهو سڀ ڪجهه هن حقيقت ڏانهن وڌايو ويو آهي ته اسڪرپٽ اپلوڊ ڪريو (Pyha، Bash، Python، وغيره) سرور تي، ۽ توهان خوش ٿيندا. مان مانيٽرنگ تي عمل ڪرڻ چاهيان ٿو “باڪس کان ٻاهر” - بغير ٻاهرين اسڪرپٽس ۽ نگراني ۽ PBX سان سرور تي اضافي سافٽ ويئر انسٽال ڪرڻ.

مون هن سان گڏ 4 ڪم ڪندڙ ڏينهن گذاريا، پر نتيجو ان جي قابل هو. AMI انٽرفيس ذريعي ڪم ڪرڻ، گھٽ-سطح جي سڃاڻپ، ٽرگرز، ۽ سڀ کان اهم، PBX ۽ ٻين سڀني سيٽنگن کي ڳنڍڻ ۾ هاڻي لڳ ڀڳ 15 منٽ لڳن ٿا.

Zabbix 4.4 موجود آهي، Asterisk ورجن 100 جا اٽڪل 13 ٽڪر. ڪجهه PBXs FreePBX ويب انٽرفيس سان گڏ ايندا آهن، ڪجهه هڪ ننگي ڪنسول سان، هڪ ٽوڪن جو هڪ گروپ ۽ ڊائلپلان ذريعي انضمام.

PBX کان ڊيٽا حاصل ڪري رهيو آهي

پهريون ۽ مکيه نقطو جنهن کي حل ڪرڻ جي ضرورت آهي ساٿين ۽ SIP رجسٽريشن بابت ڊيٽا حاصل ڪرڻ آهي. هن مقصد لاء، PBX وٽ AGI، AMI، ARI ۽ SSH ڪنسول انٽرفيس آهن. واضح سببن لاء، مون اضافي ماڊلز تي غور نه ڪيو.

پهرين اسان کي اهو سمجهڻو پوندو ته اهي اگي، امي، آري ڇا آهن...

  • AGI - ڊائلپلان ۾ اسڪرپٽ استعمال ڪندي. بنيادي طور تي ڪال مينيجمينٽ لاء استعمال ڪيو ويو.
  • AMI - تمام ضروري معلومات مهيا ڪري سگھي ٿو، پورٽ 5038 ذريعي ڪم ڪري ٿو، Telnet وانگر. اسان کي مناسب آهي!
  • ARI - جديد، فيشن، JSON. اتي ڪيترائي امڪان آھن، ڊيٽا فارميٽ Zabbix لاء سمجھڻ وارو آھي، پر مون لاء اتي ڪا خاص شيء نه آھي: توھان sip رجسٽريشن کي ڪنٽرول نٿا ڪري سگھو. هڪ ٻيو نقصان اهو آهي ته ساٿين لاءِ صرف ٻه رياستون آن لائن/آف لائن آهن، جيتوڻيڪ اتي وڌيڪ رياستون آهن ۽ تشخيص ڪرڻ وقت انهن کي حساب ۾ رکڻ مفيد آهي.
  • SSH سڀ ڪجهه ڪري سگهي ٿو، پر ڪڏهن ڪڏهن "سيڪيورٽي سببن" جي ڪري اجازت نه آهي. خيال مختلف ٿي سگهن ٿا، مان انهن ۾ نه ويندس.

بهرحال، ان جي سڀني نقصن سان، ARI سڀني نگراني جي ضرورتن جو 90٪ ڍڪي ٿو.

Zabbix ۽ Telnet - منهنجي مايوسي

مان AMI کي چڱيءَ طرح ڄاڻان ٿو؛ هڪ ڀيري مون ريموٽ آفيسن، ڪال مئنيجمينٽ، وغيره ذريعي ڊويزن سان ڳالهين ۾ نقصانن جي ٽريڪنگ تي عمل ڪيو. Telnet سان، هر شيء بلڪل واضح آهي: ڪنيڪشن کوليو، حڪم موڪليو ۽ جواب پڙهو. اهو مون ڪيو، پر نتيجو مون کي مايوس ڪيو.

Zabbix ۾ Telnet لينڪس ڪنسول ۾ ساڳيو ناهي، اهو ٿورڙو آسان آهي ۽ معياري اختيار جي لاء ٺهيل آهي جهڙوڪ لاگ ان/پاسورڊ. جيڪڏهن اجازت ڏيڻ جي منطق مختلف آهي، ۽ لاگ ان/پاسورڊ جي جوڙي لاءِ ڪا به درخواست ناهي، هڪ غلطي ٿئي ٿي. اختيار ڪرڻ جي گهرج کي نظرانداز ڪرڻ جي ناڪام ڪوششن کان پوءِ، ٽينيٽ ماڊل جي سورس ڪوڊ کي ڏسڻ لاءِ مفيد هو.

مون محسوس ڪيو ته جيستائين روايتي لاگ ان ۽ پاسورڊ جي درخواست نه ٿيندي، مان اڳتي نه وڌندس. بس مذاق لاءِ، مون اختيار سان لاڳاپيل هر شيءِ کي ڪوڊ مان هٽائي ڇڏيو ۽ هر شيءِ کي ٻيهر گڏ ڪيو. ڪم! پر اهو ضرورتن کي پورو نٿو ڪري. اڳتي وڃو…

اچو ته ڳولا ڏانهن واپس وڃو

مون ARI دستاويزن کي ٻيهر پڙهيو، اضافي ٽيسٽون ڪيون - هتي ڪي به سيپ رجسٽريشن نه آهن. دعوتون آهن، ڪچهريون به آهن، ڪچهريون به آهن، پر رجسٽريشن به ناهي. ڪجهه نقطي تي مون اهو به سوچيو، ڇا اسان کي واقعي گدھ جي رجسٽريشن جي ضرورت آهي؟

هڪ عجيب اتفاق سان، هن وقت هڪ ٻي درخواست صارف کان اچي ٿي، ٻاهر نڪرڻ واري ڪالن سان مسئلو آهي. مسئلو اهو هو ته سيپ رجسٽريشن منجهيل هئي ۽ صرف ماڊل کي ريبوٽ ڪندي حل ڪيو ويو.

asterisk -rx "sip reload"

اهو ويب تي AMI تائين رسائي لاءِ وڏو هوندو: اهو سڀ مسئلا حل ڪندو ، مون سوچيو. مان هن طرف کوٽڻ شروع ڪريان ٿو، ۽ لفظي طور تي پهرين ڳولا واري لائين سرڪاري Asterisk دستاويزن ڏانهن وٺي ٿي، جنهن ۾ چيو ويو آهي ته منهنجي ڪمن لاء هڪ اختيار آهي. ويب چالو فائل ۾ /etc/asterisk/manager.conf، جنهن کي سيٽ ڪرڻ جي ضرورت آهي YES، سيڪشن ۾ [عام]

ان کان پوء، فارم جي باقاعده ويب درخواست ذريعي http://ats:8089/mxml?action=SIPshowregistry اسان سڀ ضروري معلومات حاصل ڪندا آهيون.

جڏهن FreePBX انٽرفيس استعمال ڪري رهيا آهيو، توهان هن اختيار کي ويب ذريعي فعال نٿا ڪري سگهو؛ توهان کي مينيجر.conf فائل ۾ تبديليون ڪندي ڪنسول ذريعي ان کي فعال ڪرڻو پوندو. FreePBX ان کي ختم نه ڪندو آهي جڏهن ترتيب واري تبديليون ويب ذريعي ڪيون وينديون آهن.

مون ڪيترن ئي قسمن جي Asterisk انضمام سان ڪم ڪيو آهي، پر مون هن خصوصيت کي ڪٿي به نه ڏٺو آهي. مون کي حيرت ٿي ته ڪو به هن طريقي جي وضاحت نه ڪندو آهي PBX سان لهه وچڙ ۾. اهو پڻ خاص طور تي مفيد هو ته هن موضوع تي معلومات ڳولڻ لاء: عملي طور تي ڪجھ به ناهي يا اهو مڪمل طور تي مختلف ڪمن لاء استعمال ڪيو ويو آهي.

ويب AMI - ڪهڙي قسم جو جانور؟

اختيار شامل ڪرڻ ويب چالو فائل ڪرڻ manager.conf ويب ذريعي ATS انتظاميا تائين مڪمل رسائي فراهم ڪئي. باقاعده AMI ذريعي دستياب سڀئي حڪم هاڻي ويب تي آهن، توهان PBX کان واقعن کي ساکٽ ذريعي ٻڌي سگهو ٿا. آپريشن جو اصول ڪنسول AMI کان مختلف ناهي. ھن اختيار کي چالو ڪرڻ کان پوء، توھان ھيٺ ڏنل پتي تي PBX سان رابطو ڪري سگھو ٿا:

https://ats:8089/manager - هڪ ويب پيج هڪ سادي انٽرفيس سان ٽيسٽ ڪرڻ ۽ دستي طور تي درخواستون موڪلڻ لاءِ. سڀئي جواب پڙهڻ جي قابل HTML ۾ فارميٽ ڪيا ويا آهن. نگراني لاء بلڪل مناسب ناهي.
https://ats:8089/rawman - صرف ٽيڪسٽ آئوٽ، فارميٽ ڪنسول AMI سان ملندڙ جلندڙ
https://ats:8089/mxml - ٽيڪسٽ آئوٽ صرف، XML فارميٽ ۾. اسان کي مناسب آهي!

زبڪس کي ڪيئن ڳنڍجي Asterisk سان دٻي مان ٻاهر

پوءِ مون سوچيو: ”هي ئي حل آهي! هاڻي هر شي تيار ٿي ويندي! Easy-peezy lemon squeezey، ”پر خوش ٿيڻ جي اوائلي هئي. اسان کي گهربل معلومات حاصل ڪرڻ لاء، ضروري عمل سان گڏ 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 ۾ ٽريڪنگ عناصر ٺاهڻ لاءِ مان استعمال ڪندس آٽو ڊڪشنري.

خودڪار ڳولڻ

خودڪار طريقي سان رجسٽريشن کي ڳولڻ ۽ پير صاحب رياستن کي ٽريڪ ڪرڻ لاء، توهان کي هيٺين پتي سان رابطو ڪرڻ جي ضرورت آهي: 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 ۾ اسڪرپٽ ٺاهيو

زبڪس کي ڪيئن ڳنڍجي Asterisk سان دٻي مان ٻاهر

هڪ دلچسپ نقطو: اي ٽي ايس جي جواب ۾، سڀئي پيٽرولر اڪيلو حوالن سان گھريل آهن، ۽ ٽيمپليٽ کي لاڳو ڪرڻ کان پوء //جواب/عام[@ ميزبان] اهي ٻه ڀيرا تبديل ڪيا ويا آهن.

عناصر ٺاهڻ لاءِ، اسان استعمال ڪريون ٿا متغيرن مان XML جواب (هاڻي JSON).

زبڪس کي ڪيئن ڳنڍجي Asterisk سان دٻي مان ٻاهر

SIP رجسٽري

sip رجسٽريشن لاءِ اسان ٽي متغير استعمال ڪريون ٿا: کاتي جو نالو, ميزبان, پورٽ. مان عنصر جي نالي سان خوش ٿيو [ايميل محفوظ ٿيل]: 5060، مون کي ڪا به حالت نه ملي آهي جتي توهان سڀني پنجن متغيرن کي استعمال ڪرڻ جي ضرورت آهي.

مکيه عنصر جيڪو سڀني رجسٽريشن بابت معلومات حاصل ڪري ٿو، Asterisk - AMI SIP شو رجسٽري. هڪ منٽ ۾ هڪ ڀيرو اهو GET جي درخواست ڪري ٿو https://ats:8089/mxml?action=SIPshowregistry، جنهن کان پوءِ جواب XML ڊيٽا پاس ڪيو ويو آهي سڀني منحصر عناصر کي پارس ڪرڻ لاءِ. هر رجسٽريشن لاءِ مان هڪ عنصر ٺاهيان ٿو ان تي منحصر آهي. اهو آسان آهي ڇو ته اسان هڪ درخواست ۾ تازه ترين معلومات حاصل ڪندا آهيون، ۽ هر درخواست لاء الڳ الڳ ناهي. ھن عمل ۾ ھڪڙو اھم نقصان آھي - پروسيسر تي لوڊ.

جڏهن 100 انحصار عناصر تائين جاچ ڪئي، مون لوڊ نه ڏٺو، پر 1700 عناصر سان، هن پروسيسر تي هڪ قابل ذڪر 15 سيڪنڊ لوڊ ڏنو. هن کي ذهن ۾ رکو جيڪڏهن توهان وٽ وڏي تعداد ۾ منحصر عناصر آهن.

هڪ اختيار جي طور تي لوڊ کي "پکڙيل" ڪرڻ يا هڪ عنصر لاءِ مختلف پولنگ فريڪوئنسيون سيٽ ڪرڻ لاءِ، توهان پروسيسنگ منطق کي هر عنصر ڏانهن الڳ الڳ منتقل ڪري سگهو ٿا.

مان حاصل ڪيل معلومات کي مکيه عنصر ۾ ذخيرو نٿو ڪريان. پهرين، مون کي ان جي ضرورت نظر نه ايندي آهي، ۽ ٻيو، جيڪڏهن جواب 64K کان وڌيڪ آهي، پوء زيبڪس ان کي ڪٽي ٿو.

جيئن ته اسان انحصار ڪندڙ عنصر لاء مڪمل XML جواب استعمال ڪندا آهيون، اسان کي هن عنصر جي قيمت حاصل ڪرڻ جي ضرورت آهي پري پروسيسنگ ۾. ذريعي ايڪس پي اهو ٿي چڪو آهي:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ رياست)
رجسٽريشن جي حالتن لاء، مون ٽيڪسٽ اسٽيٽس استعمال نه ڪيو، پر JavaScript استعمال ڪندي انهن کي عددي شڪل ۾ تبديل ڪيو:

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

SIP پيرس

SIP رجسٽريشن سان قياس ڪندي، Asterisk - AMI SIPshowregistry جو هڪ بنيادي عنصر آهي، جنهن تي منحصر شامل ڪيا ويا آهن.

هي ٻه منحصر عنصر ٺاهي ٿو:

  • ٽيڪسٽ فارم ۾ پير صاحب جي حيثيت
  • ڊوائيس جي جواب جو وقت - جيڪڏهن صورتحال ٺيڪ آهي، پوء ڊوائيس جو جواب وقت لکيو ويو آهي، ٻي صورت ۾ "-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

تبصرو شامل ڪريو