څنګه کولای شو چی Zabbix د Asterisk سره وصل کړو

په تیره مقاله کې "زبکس - د میکرو حدود پراخول" ما تاسو ته وویل چې څنګه د اجازې سیشن ترلاسه کړئ او دا په محلي کوربه میکرو کې بدل کړئ. پدې مقاله کې به زه تاسو ته ووایم چې څنګه زبیبکس د اسټریسک سره د بهرني سکریپټونو او سافټویر پرته وصل کړئ.

د دې دوه سیسټمونو "ملګري" کولو نظر ډیر وخت دمخه زیږیدلی و، پرته له دې چې اضافي سافټویر یا سکریپټونه نصب کړي. یو ګړندی ګوګلینګ ډیری احتمالي حلونه رامینځته کړي ، دا ټول پدې حقیقت کې راښکته شوي چې سکریپټونه (په پیها ، باش ، پایتون او نور کې) سرور ته اپلوډ کړئ ، او تاسو به خوښ شئ. ما غوښتل نظارت پلي کړم "د بکس څخه بهر" - پرته له بهرني سکریپټونو او په سرور کې د نظارت او PBX سره اضافي سافټویر نصب کول.

ما د دې سره ټول 4 کاري ورځې تیرې کړې، مګر پایله یې د ارزښت وړ وه. د AMI انٹرفیس له لارې کار کول، د ټیټې کچې کشف، محرکات، او تر ټولو مهم، د PBX او نورو ټولو ترتیباتو سره نښلول اوس شاوخوا 15 دقیقې وخت نیسي.

Zabbix 4.4 شتون لري، د Asterisk 100 نسخه شاوخوا 13 ټوټې. ځینې ​​​​PBXs د FreePBX ویب انٹرفیس سره راځي، ځینې یې د کنسول سره، د چلونو یوه ډله او د ډیلپلان له لارې ادغام.

د PBX څخه ډاټا ترلاسه کول

لومړی او اصلي ټکی چې حل کولو ته اړتیا لري د ملګرو او SIP راجسټریشنونو په اړه د معلوماتو ترلاسه کول دي. د دې هدف لپاره، PBX AGI، AMI، ARI او SSH کنسول انٹرفیسونه لري. د واضح دلیلونو لپاره، ما اضافي ماډلونه په پام کې نه نیولي.

لومړی باید دا معلومه کړو چې دا اجی، امی، آری څه شی دی؟

  • AGI - په ډایلپلان کې د سکریپټونو کارول. په عمده توګه د تلیفون مدیریت لپاره کارول کیږي.
  • AMI - کولی شي ټول اړین معلومات چمتو کړي، د 5038 پورټ له لارې کار کوي، د ټیلنټ په څیر. موږ ته مناسب!
  • ARI - عصري، فیشن، JSON. ډیری امکانات شتون لري، د ډیټا بڼه د زبیبکس لپاره د پوهیدو وړ ده، مګر زما لپاره هیڅ اصلي شی شتون نلري: تاسو نشئ کولی د سیپ راجستریشن کنټرول کړئ. بله نیمګړتیا دا ده چې د ملګرو لپاره یوازې دوه ریاستونه آنلاین / آفلاین شتون لري، که څه هم ډیر ریاستونه شتون لري او دا ګټوره ده چې د تشخیص په وخت کې دوی په پام کې ونیول شي.
  • SSH کولی شي هرڅه ترسره کړي، مګر ځینې وختونه د "امنیتي دلایلو" له امله اجازه نه ورکول کیږي. نظرونه ممکن توپیر ولري، زه به دوی ته لاړ نه شم.

په هرصورت، د خپلو ټولو نیمګړتیاوو سره، ARI د څارنې د ټولو اړتیاوو 90٪ پوښي.

زیبکس او ټیلنټ - زما مایوسي

زه AMI ښه پیژنم؛ په یو وخت کې ما د لیرې پرتو دفترونو، د تلیفون مدیریت، او داسې نورو لخوا د ویش سره په خبرو اترو کې د زیانونو تعقیب پلي کړ. د ټیلنټ سره، هرڅه هم خورا روښانه دي: پیوستون خلاص کړئ، امرونه واستوئ او ځواب ولولئ. دا هغه څه دي چې ما وکړل، مګر پایله یې ما مایوسه کړه.

په زیبکس کې ټلیټ د لینکس کنسول په څیر ندي ، دا یو څه ساده او د معیاري واک لپاره مناسب دی لکه د ننوتلو / پاسورډ. که د اختیار کولو منطق توپیر ولري، او د ننوتلو / پاسورډ جوړه لپاره هیڅ غوښتنه شتون نلري، یوه تېروتنه رامنځته کیږي. د اجازې اړتیا له پامه غورځولو بې ځایه هڅو وروسته، دا ګټوره وه چې د ټیلنټ ماډل سرچینې کوډ وګورئ.

زه پوهیدم چې تر هغه چې د دودیز ننوتلو او پټنوم غوښتنه شتون ونلري، زه به پرمخ لاړ نه شم. یوازې د ساتیرۍ لپاره ، ما د کوډ څخه د اختیار پورې اړوند هرڅه لرې کړل او هرڅه یې بیا سره راټول کړل. کار کوي! مګر دا اړتیاوې نه پوره کوي. وړاندې ځه…

راځئ چې لټون ته راستون شو

ما د ARI اسناد بیا بیا ولوستل، اضافي ازموینې یې ترسره کړې - دلته د sip ثبتونه شتون نلري. جشنونه شتون لري، خبرې اترې شتون لري، برچونه شتون لري، مګر هیڅ راجستر شتون نلري. په یو وخت کې ما حتی فکر وکړ، ایا موږ واقعیا د ګیدړ ثبت ته اړتیا لرو؟

د مسخره تصادف سره ، پدې وخت کې د کارونکي څخه بله غوښتنه راځي ، د وتلو تلیفونونو ستونزې سره. ستونزه دا وه چې د سیپ راجسټریشن کنګل شوی و او په ساده ډول د ماډل ریبوټ کولو سره حل شوی و.

asterisk -rx "sip reload"

دا به ښه وي چې په ویب کې AMI ته لاسرسی ومومئ: دا به ټولې ستونزې حل کړي ، ما فکر کاوه. زه پدې لور کیندل پیل کوم ، او په حقیقت کې د لټون لومړۍ کرښه د رسمي ستوري اسنادو ته لار هواروي ، کوم چې وايي زما د دندو لپاره یو اختیار شتون لري. ویب فعال شوی په دوتنه کې /etc/asterisk/manager.conf، کوم چې باید په برخه کې YES ته تنظیم شي [عمومي]

له دې وروسته، د فورمې د منظم ویب غوښتنلیک له لارې http://ats:8089/mxml?action=SIPshowregistry موږ ټول اړین معلومات ترلاسه کوو.

کله چې د FreePBX انٹرفیس کاروئ ، تاسو نشئ کولی دا اختیار د ویب له لارې فعال کړئ؛ تاسو اړتیا لرئ د manager.conf فایل کې د بدلونونو په کولو سره دا د کنسول له لارې فعال کړئ. FreePBX دا نه پاکوي کله چې د ویب له لارې د تشکیلاتو بدلونونه رامینځته کیږي.

ما د اوږدې مودې لپاره د مختلف ډوله اسټریسک ادغامونو سره کار کړی ، مګر ما هیڅکله دا خصوصیت په کوم ځای کې نه دی لیدلی. زه حیران وم چې هیڅوک د PBX سره د اړیکو دا طریقه نه بیانوي. دا حتی په ځانګړې توګه د دې موضوع په اړه د معلوماتو موندلو لپاره ګټور و: په عملي توګه هیڅ شی شتون نلري یا دا د بشپړ مختلف کارونو لپاره کارول کیده.

ویب AMI - کوم ډول حیوان؟

یو اختیار اضافه کول ویب فعال شوی دوسیه کول manager.conf د ویب له لارې د ATS مدیریت ته بشپړ لاسرسی چمتو کړی. ټول حکمونه چې د منظم AMI له لارې شتون لري اوس په ویب کې دي، تاسو کولی شئ د PBX څخه پیښې د ساکټ له لارې واورئ. د عملیاتو اصول د AMI کنسول څخه توپیر نلري. د دې اختیار د فعالولو وروسته، تاسو کولی شئ په لاندې پته د PBX سره اړیکه ونیسئ:

https://ats:8089/manager - د ازموینې او په لاسي ډول غوښتنې لیږلو لپاره د ساده انٹرفیس سره یوه ویب پاڼه. ټول ځوابونه د لوستلو وړ HTML کې فارمیټ شوي. د څارنې لپاره خورا مناسب نه دی.
https://ats:8089/rawman - یوازې د متن محصول، د کنسول AMI سره ورته بڼه
https://ats:8089/mxml - یوازې د متن محصول، په XML بڼه. موږ ته مناسب!

څنګه کولای شو چی Zabbix د Asterisk سره وصل کړو

بیا ما فکر وکړ: "دا د حل لاره ده! اوس به هرڅه چمتو وي! په اسانۍ سره د لیمو سکوزي، "مګر دا د خوښۍ لپاره ډیر وخت و. د هغه معلوماتو ترلاسه کولو لپاره چې موږ ورته اړتیا لرو، دا کافي ده چې د اړتیا وړ عمل سره د 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"

د اختیار کولو کوکی ترلاسه کولو څرنګوالی ولولئ او دلته یې په نورو غوښتنو کې وکاروئ:زیبکس - د میکرو حدود پراخول»

په زبکس کې د تعقیب عناصرو رامینځته کولو لپاره زه به د اتوماتیک کشف وکاروم.

اتوماتیک کشف

د دې لپاره چې په اتوماتيک ډول راجسټریشن کشف کړئ او د ملګرو هیوادونو تعقیب کړئ ، تاسو اړتیا لرئ لاندې پتې سره اړیکه ونیسئ: 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 کې سکریپټ جوړ کړ

څنګه کولای شو چی Zabbix د Asterisk سره وصل کړو

یو په زړه پوری ټکی: د ATS ځواب کې، ټول پیرامیټونه د واحد نرخونو لخوا محاصره شوي، او د ټیمپلیټ پلي کولو وروسته //ځواب/عمومي[@ کوربه] دوی د دوه ګونی لخوا بدل شوي.

د عناصرو د جوړولو لپاره، موږ د XML ځواب (اوس JSON) څخه متغیرونه کاروو.

څنګه کولای شو چی Zabbix د Asterisk سره وصل کړو

د SIP راجستر

د sip ثبتولو لپاره موږ درې متغیرونه کاروو: کارن نوم, کوربه, بندر. زه د عنصر په نوم خوشحاله وم [ایمیل خوندي شوی]: 5060، ما هیڅ داسې شرایط ندي موندلي چیرې چې تاسو اړتیا لرئ ټول پنځه متغیرونه وکاروئ.

اصلي عنصر چې د ټولو ثبتونو په اړه معلومات ترلاسه کوي، Asterisk - AMI SIPshowregistry. په دقیقه کې یو ځل دا د 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}"]/@ ایالت)
د راجستریشن حالتونو لپاره، ما د متن حالتونه نه دي کارولي، مګر د جاواسکریپټ په کارولو سره یې په عددي بڼه بدل کړل:

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

Add a comment