Indlela yokuxhuma i-Zabbix nenkanyezi ngaphandle kwebhokisi

Esihlokweni esedlule "I-Zabbix - ukwandisa imingcele emikhulu" Ngikutshelile ukuthi ungayithola kanjani iseshini yokugunyazwa futhi uyifake esikhundleni se-macro host yasendaweni. Kulesi sihloko ngizokutshela ukuthi ungaxhuma kanjani i-Zabbix ne-Asterisk ngaphandle kwemibhalo yangaphandle nesofthiwe.

Umqondo "wokwenza abangani" walezi zinhlelo ezimbili wazalwa kudala, ngaphandle kokufaka isofthiwe eyengeziwe noma imibhalo. I-googling esheshayo iveze izixazululo eziningi ezingenzeka, konke kubilisiwe eqinisweni lokuthi layisha imibhalo (nge-Pyha, Bash, Python, njll.) kuseva, futhi uzojabula. Bengifuna ukusebenzisa ukuqapha "ngaphandle kwebhokisi" - ngaphandle kwemibhalo yangaphandle kanye nokufaka isofthiwe eyengeziwe kuseva ngokuqapha kanye ne-PBX.

Ngichithe isamba sezinsuku zokusebenza ezi-4 ngalokhu, kodwa umphumela wawungifanele. Ukusebenza ngesixhumi esibonakalayo se-AMI, ukutholwa kwezinga eliphansi, izicupho, futhi okubaluleke kakhulu, ukuxhuma i-PBX nazo zonke ezinye izilungiselelo manje kuthatha cishe imizuzu eyi-15.

I-Zabbix 4.4 iyatholakala, cishe izingcezu eziyi-100 ze-Asterisk version 13. Amanye ama-PBX eza ne-FreePBX web interface, amanye anekhonsoli engenalutho, inqwaba yamaqhinga nokuhlanganiswa nge-diaplan.

Ukuthola idatha evela ku-PBX

Iphuzu lokuqala neliyinhloko elidinga ukuxazululwa ukuthola idatha mayelana nontanga nokubhaliswa kwe-SIP. Ngale njongo, i-PBX ine-AGI, AMI, ARI kanye ne-SSH console interface. Ngezizathu ezisobala, angizange ngicabangele amamojula engeziwe.

Okokuqala sidinga ukuthola ukuthi lawa ma-agi, ami, ari...

  • I-AGI - usebenzisa imibhalo ku-diaplan. Isetshenziselwa kakhulu ukuphathwa kwekholi.
  • I-AMI - inganikeza lonke ulwazi oludingekayo, isebenza nge-port 5038, efana ne-Telnet. Kuyasifanela!
  • I-ARI - yesimanje, imfashini, i-JSON. Kunamathuba amaningi, ifomethi yedatha iyaqondakala ku-Zabbix, kodwa kimi ayikho into eyinhloko: awukwazi ukulawula ukubhaliswa kwe-sip. Okunye okubi ukuthi kontanga kunezifunda ezimbili kuphela ku-inthanethi/okungaxhunyiwe ku-inthanethi, nakuba kunezifundazwe eziningi futhi kuyasiza ukuzicabangela lapho uxilonga.
  • I-SSH ingenza yonke into, kodwa ngezinye izikhathi ayivunyelwe ngenxa "yezizathu zokuphepha". Ukucatshangelwa kungase kwehluke, ngeke ngingene kukho.

Nokho, ngawo wonke amaphutha ayo, i-ARI ihlanganisa amaphesenti angama-90 azo zonke izidingo zokuqapha.

I-Zabbix ne-Telnet - ukudumazeka kwami

Ngiyazi kahle i-AMI; ngesinye isikhathi ngasebenzisa ukulandela ngomkhondo kokulahlekelwa ezingxoxweni nesigaba ngamahhovisi akude, ukuphathwa kwezingcingo, njll. Nge-Telnet, yonke into icacile kakhulu: vula uxhumano, thumela imiyalo futhi ufunde impendulo. Yilokho engakwenza, kodwa umphumela wangidumaza.

I-Telnet ku-Zabbix ayifani nekhonsoli ye-Linux, ilula kancane futhi yakhelwe ukugunyazwa okujwayelekile okufana nokungena/iphasiwedi. Uma i-logic yokugunyaza ihlukile, futhi singekho isicelo sokubhanqwa kokungena/iphasiwedi, kwenzeka iphutha. Ngemva kwemizamo eyize yokweqa imfuneko yokugunyazwa, kube usizo ukubheka ikhodi yomthombo yemojula ye-Telnet.

Ngabona ukuthi kuze kube yilapho kunesicelo sokungena ngemvume nephasiwedi yendabuko, ngeke ngiqhubekele phambili. Ukuze nje ngizijabulise, ngisuse yonke into ehlobene nokugunyazwa kukhodi futhi ngahlanganisa yonke into. Iyasebenza! Kodwa ayihlangabezani nezidingo. Qhubeka…

Masibuyele ekusesheni

Ngifunde kabusha imibhalo ye-ARI futhi, ngenza izivivinyo ezengeziwe - akukho ukubhaliswa kwe-sip lapha. Kukhona amadili, kukhona izingxoxo, kukhona amabhulukwe, kodwa akukho ukubhaliswa. Ngesinye isikhathi ngaze ngacabanga, ingabe siyakudinga ngempela ukubhaliswa kwamanqe?

Ngokuqondana okuhlekisayo, kulo mzuzu kufika esinye isicelo esivela kumsebenzisi, esinenkinga ngamakholi aphumayo. Inkinga yayiwukuthi ukubhaliswa kwe-sip kwakuqanda futhi kwaxazululwa ngokumane kuqalwe kabusha imojuli.

asterisk -rx "sip reload"

Kungaba kuhle ukufinyelela i-AMI ngewebhu: lokho kungaxazulula zonke izinkinga, ngacabanga. Ngiqala ukumba ngale ndlela, futhi empeleni umugqa wokuqala wokusesha uholela emibhalweni esemthethweni ye-asterisk, ethi kukhona inketho yemisebenzi yami. kunikwe amandla kufayela /etc/asterisk/manager.conf, okudingeka ukuthi isethwe ukuze ithi YEBO, esigabeni [okujwayelekile]

Ngemuva kwalokhu, ngesicelo sewebhu esijwayelekile sefomu http://ats:8089/mxml?action=SIPshowregistry sithola lonke ulwazi oludingekayo.

Uma usebenzisa i-interface ye-FreePBX, awukwazi ukunika amandla le nketho ngewebhu; udinga ukuyinika amandla ngokusebenzisa ikhonsoli ngokwenza izinguquko kufayela le-manager.conf. I-FreePBX ayiyisuli uma izinguquko zokumisa zenziwa ngewebhu.

Ngisebenze nezinhlobo ezahlukahlukene zokuhlanganiswa kwenkanyezi isikhathi eside, kodwa angikaze ngibone lesi sici sishiwo noma kuphi. Ngamangala ukuthi akekho ochaza le ndlela yokuxhumana ne-PBX. Kwaba usizo nakakhulu ukufuna ulwazi ngalesi sihloko: akukho lutho noma lwalusetshenziselwa imisebenzi ehluke ngokuphelele.

WEB AMI - hlobo luni lwesilo?

Yengeza inketho kunikwe amandla ukufayela umphathi.conf inikeze ukufinyelela okugcwele kubaphathi be-ATS ngewebhu. Yonke imiyalo etholakala nge-AMI evamile manje isikuwebhu, ungakwazi ukulalela imicimbi evela ku-PBX usebenzisa isokhethi. Umgomo wokusebenza awuhlukile ku-console AMI. Ngemva kokuvula le nketho, ungaxhumana ne-PBX kulawa makheli alandelayo:

https://ats:8089/manager - Ikhasi lewebhu elinesixhumi esibonakalayo esilula sokuhlola nokuthumela izicelo mathupha. Zonke izimpendulo zifomethwe zaba yi-HTML efundekayo. Ayifaneleki kakhulu ukuqapha.
https://ats:8089/rawman β€” okukhipha umbhalo kuphela, ifomethi efana ne-console AMI
https://ats:8089/mxml - okukhipha umbhalo kuphela, ngefomethi ye-XML. Kuyasifanela!

Indlela yokuxhuma i-Zabbix nenkanyezi ngaphandle kwebhokisi

Ngabe sengicabanga: β€œLeli ikhambi! Manje konke kuzobe sekulungile! Ulamula kalamula olula kalula,” kodwa kwakusesekuseni kakhulu ukuthi singajabula. Ukuze sithole ulwazi esiludingayo, kwanele ukusebenzisa isicelo se-GET ngesenzo esidingekayo isenzo, okuyimpendulo ebuyisela i-xml nohlu lwakho konke ukubhaliswa nesimo sakhona. Konke lokhu kuhle, kodwa udinga ukugunyazwa ukuze ukhumbule iseshini kusuka kukhukhi. Uma uhlola kusiphequluli, awucabangi ngale nqubo.

Inqubo yokugunyaza

Okokuqala sikhuluma ngekheli http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, ngokuphendula, iseva isithumelela ikhukhi neseshini yokugunyazwa. Nansi indlela isicelo se-HTTP esibukeka ngayo:

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

Impendulo:

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>

Ukuze usebenze lapho udinga i-id_yendlu="6f5de42c", okungukuthi ikhukhi lokugunyazwa ngokwalo.
Okuqukethwe udinga nje ukuhlola impendulo "Ukuqinisekisa kwamukelwe" Okulandelayo, kuzo zonke izingcingo eziya kuseva ye-PBX, sizodinga ukwengeza ikhukhi eligunyazayo esicelweni.

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

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

Funda ukuthi ulithola kanjani ikhukhi eligunyazwayo futhi ulisebenzise kwezinye izicelo lapha: β€œI-Zabbix - ukwandisa imingcele enkuluΒ»

Ukuze ngidale izici zokulandelela ku-Zabbix ngizosebenzisa ukutholwa okuzenzakalelayo.

Ukutholwa okuzenzakalelayo

Ukuze uthole ngokuzenzakalelayo ukubhaliswa futhi ulandelele izifunda zontanga, udinga ukuxhumana nekheli elilandelayo: https://ats:8089/mxml?action=SIPshowregistry noma https://ats:8089/mxml?action=SIPpeers

Ukuphendula, i-PBX isibuyisela impendulo ye-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>

Kunodoti omningi empendulweni, ngakho-ke ekuyicubunguleni ngaphambili siyayihlunga ngesifanekiso I-XPath: //response/generic[@host]
Bese kuqala ubumnandi. Ukuze usebenze ngokuthola nokudala ama-elementi ashukumisayo, impendulo kufanele ibe ngefomethi ye-JSON. I-XML ayisekelwe ekutholweni okuzenzakalelayo.

Ukuguqula i-XML ibe yi-JSON, bekufanele ngidlale kancane ngokushintshanisa okuzenzakalelayo, engenze khona umbhalo nge-JS.

Indlela yokuxhuma i-Zabbix nenkanyezi ngaphandle kwebhokisi

Iphuzu elithakazelisayo: ekuphenduleni kwe-ATS, yonke imingcele izungezwe izingcaphuno ezilodwa, futhi ngemva kokusebenzisa ithempulethi. //response/generic[@host] bathathelwa indawo ngababili.

Ukwakha izakhi, sisebenzisa okuguquguqukayo okuvela empendulweni ye-XML (manje eyi-JSON).

Indlela yokuxhuma i-Zabbix nenkanyezi ngaphandle kwebhokisi

I-SIP Registry

Ukubhaliswa kwe-sip sisebenzisa okuguquguqukayo okuthathu: igama lomsebenzisi, Bamba, Imbobo. Ngajabula ngegama lesici [i-imeyili ivikelwe]: 5060, angitholanga noma yiziphi izimo lapho udinga ukusebenzisa zonke eziguquguqukayo ezinhlanu.

Isici esiyinhloko esithola ulwazi mayelana nakho konke ukubhaliswa, Inkanyezi - AMI SIPshowregistry. Kanye ngomzuzu yenza isicelo se-GET ku https://ats:8089/mxml?action=SIPshowregistry, ngemva kwalokho idatha ye-XML yempendulo idluliselwa kuzo zonke izici ezincikile ukuze zihlukaniseke. Ngokubhalisa ngakunye ngidala into encike kukho. Lokhu kulula ngoba sithola ulwazi lwakamuva esicelweni esisodwa, hhayi esicelweni ngasinye ngokwehlukana. Lokhu kuqaliswa kunesici esibalulekile - umthwalo kuphrosesa.

Lapho ngihlola izakhi ezincike ku-100, angizange ngiqaphele umthwalo, kodwa ngezakhi ze-1700, lokhu kunikeze umthwalo obonakalayo we-15 wesibili ku-processor. Gcina lokhu engqondweni uma unenani elikhulu lezinto ezincikile.

Njengenketho "yokusabalalisa" umthwalo noma ukusetha amafrikhwensi okuvota ahlukene ento ethile, ungahambisa ingqondo yokucubungula uye ku-elementi ngayinye ngokuhlukile.

Angilugcini ulwazi olutholiwe kusici esiyinhloko. Okokuqala, angisiboni isidingo salokhu, futhi okwesibili, uma impendulo ingaphezu kuka-64K, i-Zabbix iyayinqamula.

Njengoba sisebenzisa impendulo ephelele ye-XML yento encikile, sidinga ukuthola inani lale elementi ekucubunguleni ngaphambili. Ngokusebenzisa I-XPath kwenziwa kanje:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ izwe)
Ezimo zokubhalisa, angizange ngisebenzise izimo zombhalo, kodwa ngiziguqule zaba ifomu lezinombolo ngisebenzisa i-JavaScript:

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

SIP Ntanga

Ngokufanisa nokubhaliswa kwe-SIP, kunesici esiyinhloko se-Asterisk - AMI SIPshowregistry, lapho okuncikile kwengezwa khona.

Lokhu kudala izakhi ezimbili ezincikile:

  • Isimo sontanga ngefomu lombhalo
  • Isikhathi sokuphendula idivayisi - uma isimo SILUNGILE, kusho ukuthi isikhathi sokuphendula idivayisi siyabhalwa, ngaphandle kwalokho β€œ-1”

Indlela eya esakhiweni ngokwayo ilula kancane I-XPath:

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

Engxenyeni yesibili ngisebenzise i-JavaScript ukuze ngihlukanise isikhathi sokuphendula kusukela kusimo sontanga, njengoba zigcinwa ndawonye:

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

isiphetho

Isixazululo esingaphandle kwebhokisi singaba yinkimbinkimbi futhi singacaci ngokushesha. Khulisa ukuguquguquka nokuphatheka phakathi kwamasistimu ahlukene

Ukuhlanganiswa okujabulisayo nokulula wonke umuntu! Isifanekiso nemiyalelo yokusetha GitHub.

Source: www.habr.com

Engeza amazwana