Kif tgħaqqad Zabbix ma 'Asterisk barra mill-kaxxa

Fl-artikolu preċedenti "Zabbix - tespandi l-konfini makro" Għidtlek kif tirċievi sessjoni ta' awtorizzazzjoni u tissostitwiha f'makro host lokali. F'dan l-artikolu ser ngħidlek kif tikkonnettja Zabbix ma 'Asterisk mingħajr skripts u software esterni.

L-idea li "tagħmel ħbieb" ta 'dawn iż-żewġ sistemi twieldet żmien twil ilu, mingħajr ma jiġu installati softwer jew skripts addizzjonali. Googling ta 'malajr ta ħafna soluzzjonijiet possibbli, kollox mgħollija għall-fatt li ittella' l-iskripts (f'Pyha, Bash, Python, eċċ.) Fis-server, u tkun kuntent. Ridt nimplimenta monitoraġġ "barra mill-kaxxa" - mingħajr skripts esterni u ninstalla softwer addizzjonali fuq is-server b'monitoraġġ u PBX.

B'dan qattajt total ta' 4 ijiem tax-xogħol, iżda r-riżultat kien worth it. Il-ħidma permezz tal-interface AMI, skoperta ta 'livell baxx, tqanqal, u l-aktar importanti, il-konnessjoni tal-PBX u s-settings l-oħra kollha issa tieħu madwar 15-il minuta.

Zabbix 4.4 huwa disponibbli, madwar 100 biċċa tal-verżjoni Asterisk 13. Xi PBXs jiġu mal-interface tal-web FreePBX, xi wħud b'console vojta, mazz ta 'tricks u integrazzjoni permezz ta' dialplan.

Jirċievu data mill-PBX

L-ewwel u l-punt ewlieni li jeħtieġ li jiġi solvut huwa l-ksib ta' data dwar il-pari u r-reġistrazzjonijiet SIP. Għal dan il-għan, il-PBX għandu interfaces tal-console AGI, AMI, ARI u SSH. Għal raġunijiet ovvji, ma kkunsidrajtx moduli addizzjonali.

L-ewwel irridu naraw x'inhuma dawn l-agi, ami, ari...

  • AGI - bl-użu ta' skripts fid-dialplan. Prinċipalment użat għall-ġestjoni tas-sejħiet.
  • AMI - tista 'tipprovdi l-informazzjoni kollha meħtieġa, taħdem permezz tal-port 5038, simili għal Telnet. Taqbel magħna!
  • ARI - moderna, moda, JSON. Hemm ħafna possibbiltajiet, il-format tad-dejta jinftiehem għal Zabbix, iżda għalija m'hemm l-ebda ħaġa ewlenija: ma tistax tikkontrolla r-reġistrazzjoni tas-sip. Żvantaġġ ieħor huwa li għal sħabhom hemm biss żewġ stati online/offline, għalkemm hemm aktar stati u huwa utli li jitqiesu meta ssir dijanjosi.
  • SSH jista 'jagħmel kollox, iżda xi drabi mhux permess minħabba "raġunijiet ta' sigurtà". Il-konsiderazzjonijiet jistgħu jkunu differenti, mhux se nidħol fihom.

Madankollu, bin-nuqqasijiet kollha tagħha, l-ARI tkopri 90% tal-ħtiġijiet kollha ta’ monitoraġġ.

Zabbix u Telnet - id-diżappunt tiegħi

Naf sew lill-AMI; f'ħin minnhom implimentajt it-traċċar tat-telf f'konversazzjonijiet ma' diviżjoni minn uffiċċji remoti, ġestjoni tas-sejħiet, eċċ. B'Telnet, kollox huwa wkoll ċar ħafna: tiftaħ il-konnessjoni, ibgħat il-kmandi u aqra r-rispons. Hekk għamilt, imma r-riżultat iddiżappuntani.

Telnet f'Zabbix mhuwiex l-istess bħal fil-console Linux, huwa ftit aktar sempliċi u mfassal apposta għal awtorizzazzjoni standard bħal login/password. Jekk il-loġika tal-awtorizzazzjoni hija differenti, u ma jkun hemm l-ebda talba għal par login/password, iseħħ żball. Wara tentattivi għalxejn biex taqbeż ir-rekwiżit tal-awtorizzazzjoni, kien utli li wieħed iħares lejn il-kodiċi tas-sors tal-modulu Telnet.

Irrealizzajt li sakemm ikun hemm talba għal login u password tradizzjonali, mhux se nimxi 'l quddiem. Biss għall-gost, neħħejt dak kollu relatat mal-awtorizzazzjoni mill-kodiċi u erġajt assemblajt kollox. Xogħlijiet! Iżda ma tissodisfax ir-rekwiżiti. Aqbad…

Ejja nerġgħu lura għat-tfittxija

Erġajt qrajt id-dokumentazzjoni tal-ARI, għamilt testijiet addizzjonali - m'hemm l-ebda reġistrazzjoni tas-sip hawn. Hemm festi, hemm konversazzjonijiet, hemm breeches, iżda m'hemmx reġistrazzjonijiet. F'xi punt anke ħsibt, għandna verament bżonn ir-reġistrazzjoni tal-avulturi?

B'kumbinazzjoni umoristiċi, f'dan il-mument tasal talba oħra mill-utent, bi problema b'sejħiet ħerġin. Il-problema kienet li r-reġistrazzjoni tas-sip kienet qed tiffriża u ġiet solvuta billi sempliċiment rebooting il-modulu.

asterisk -rx "sip reload"

Ikun kbir li taċċessa l-AMI fuq il-web: dan issolvi l-problemi kollha, ħsibt. Nibda nħaffer f'din id-direzzjoni, u litteralment l-ewwel linja ta 'tfittxija twassal għad-dokumentazzjoni uffiċjali ta' Asterisk, li tgħid li hemm għażla għall-kompiti tiegħi webenabled fil-fajl /etc/asterisk/manager.conf, li jeħtieġ li jiġi ssettjat għal IVA, fit-taqsima [ġenerali]

Wara dan, permezz ta 'talba web regolari tal-formola http://ats:8089/mxml?action=SIPshowregistry nikbru l-informazzjoni kollha meħtieġa.

Meta tuża l-interface tal-FreePBX, ma tistax tattiva din l-għażla permezz tal-web; jeħtieġ li tattivaha permezz tal-console billi tagħmel bidliet fil-fajl manager.conf. FreePBX ma jħassarx meta jsiru bidliet fil-konfigurazzjoni permezz tal-web.

Ħdimt ma 'diversi tipi ta' integrazzjoni Asterisk għal żmien twil, iżda qatt ma rajt din il-karatteristika msemmija imkien. Kont sorpriż li ħadd ma jiddeskrivi dan il-metodu ta 'interazzjoni mal-PBX. Kien saħansitra speċjalment utli li tfittex informazzjoni dwar dan is-suġġett: prattikament m'hemm xejn jew intuża għal kompiti kompletament differenti.

WEB AMI - x'tip ta' kruha?

Żieda ta 'għażla webenabled għall-fajl manager.conf ipprovda aċċess sħiħ għall-ġestjoni tal-ATS permezz tal-web. Il-kmandi kollha disponibbli permezz ta 'AMI regolari issa huma fuq il-web, tista' tisma 'avvenimenti mill-PBX permezz ta' socket. Il-prinċipju tat-tħaddim mhuwiex differenti mill-console AMI. Wara li tattiva din l-għażla, tista' tikkuntattja lill-PBX fl-indirizzi li ġejjin:

https://ats:8089/manager — paġna tal-web b'interface sempliċi għall-ittestjar u r-rikjesti manwalment jintbagħtu. It-tweġibiet kollha huma fformattjati f'HTML li jista' jinqara. Mhux adattat ħafna għall-monitoraġġ.
https://ats:8089/rawman — output tat-test biss, format simili għal console AMI
https://ats:8089/mxml - output tat-test biss, f'format XML. Taqbel magħna!

Kif tgħaqqad Zabbix ma 'Asterisk barra mill-kaxxa

Imbagħad ħsibt: “Din hija s-soluzzjoni! Issa kollox se jkun lest! Easy-peezy lemon squeezey,” imma kien kmieni wisq biex nifirħu. Biex tikseb l-informazzjoni li neħtieġu, huwa biżżejjed li nużaw talba GET bl-azzjoni meħtieġa azzjoni, li bi tweġiba jirritorna xml b'lista tar-reġistrazzjonijiet kollha u l-istatus tagħhom. Dan kollu huwa kbir, imma għandek bżonn awtorizzazzjoni biex tiftakar is-sessjoni mill-cookie. Meta tittestja fil-browser, ma taħsibx dwar dan il-proċess.

Proċess ta' awtorizzazzjoni

L-ewwel nindirizzaw l-indirizz http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, bi tweġiba, is-server jibgħatilna cookie bis-sessjoni ta 'awtorizzazzjoni. Hekk tidher talba 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

Tweġiba:

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>

Biex taħdem hemm għandek bżonn mansession_id="6f5de42c", jiġifieri l-cookie tal-awtorizzazzjoni nnifisha.
Kontenut li għandek bżonn biss tiċċekkja għat-tweġiba "Awtentikazzjoni aċċettata" Sussegwentement, għas-sejħiet kollha lis-server tal-PBX, ikollna bżonn inżidu cookie ta' awtorizzazzjoni mat-talba.

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

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

Aqra kif tikseb cookie ta’ awtorizzazzjoni u tużaha f’talbiet oħra hawn: “Zabbix - espansjoni tal-konfini makro»

Biex noħolqu elementi ta 'traċċar f'Zabbix se nuża skoperta awtomatika.

Sejbien awtomatiku

Biex tiskopri awtomatikament ir-reġistrazzjonijiet u ssegwi stati tal-pari, trid tikkuntattja l-indirizz li ġej: https://ats:8089/mxml?action=SIPshowregistry jew https://ats:8089/mxml?action=SIPpeers

Bi tweġiba, il-PBX jirritorna tweġiba 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>

Hemm ħafna żibel fir-rispons, għalhekk fil-preproċessar aħna niffiltrawha mill-mudell XPath: //rispons/ġeneriku[@host]
Imbagħad jibda l-gost. Biex taħdem b'detezzjoni u toħloq elementi b'mod dinamiku, ir-rispons irid ikun f'format JSON. L-XML mhuwiex appoġġat għall-iskoperti awtomatiċi.

Biex nikkonverti XML għal JSON, kelli nilgħab ftit b'sostituzzjoni awtomatika, li għalih għamilt script f'JS

Kif tgħaqqad Zabbix ma 'Asterisk barra mill-kaxxa

Punt interessanti: fir-rispons ATS, il-parametri kollha huma mdawra bi kwotazzjonijiet singoli, u wara l-applikazzjoni tal-mudell //rispons/ġeneriku[@host] huma mibdula b'dawk doppji.

Biex noħolqu elementi, nużaw varjabbli mir-rispons XML (issa JSON).

Kif tgħaqqad Zabbix ma 'Asterisk barra mill-kaxxa

Reġistru SIP

Għar-reġistrazzjonijiet sip nużaw tliet varjabbli: username, ospitanti, port. Kont kuntent bl-isem tal-element [protett bl-email]: 5060, Ma sibt l-ebda sitwazzjoni fejn għandek bżonn tuża l-ħames varjabbli kollha.

L-element ewlieni li jirċievi informazzjoni dwar ir-reġistrazzjonijiet kollha, Asterisk - AMI SIPshowregistry. Darba fil-minuta jagħmel talba GET lil https://ats:8089/mxml?action=SIPshowregistry, wara li d-dejta XML tar-rispons tiġi mgħoddija lill-elementi dipendenti kollha għall-analiżi. Għal kull reġistrazzjoni noħloq element dipendenti fuqha. Dan huwa konvenjenti għaliex nirċievu informazzjoni aġġornata f'talba waħda, u mhux għal kull talba separatament. Din l-implimentazzjoni għandha żvantaġġ sinifikanti - it-tagħbija fuq il-proċessur.

Meta ttestja sa 100 elementi dipendenti, ma ndunajtx it-tagħbija, iżda b'elementi 1700, dan ta tagħbija notevoli ta '15-il sekonda fuq il-proċessur. Żomm dan f'moħħok jekk għandek numru kbir ta 'elementi dipendenti.

Bħala għażla biex "tifrex" it-tagħbija jew issettja frekwenzi ta 'votazzjoni differenti għal element, tista' tmexxi l-loġika tal-ipproċessar għal kull element separatament.

Ma naħżenx l-informazzjoni riċevuta fl-element prinċipali. L-ewwelnett, ma narax il-ħtieġa għal dan, u t-tieni, jekk ir-rispons ikun aktar minn 64K, allura Zabbix jaqtagħha.

Peress li nużaw rispons XML sħiħ għall-element dipendenti, irridu nġibu l-valur ta 'dan l-element fil-preproċessar. Permezz XPath isir hekk:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ Stat)
Għall-istatus ta' reġistrazzjoni, ma użajtx status ta' test, iżda kkonvertijthom f'forma numerika bl-użu ta' JavaScript:

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

SIP Peers

B'analoġija mar-reġistrazzjonijiet SIP, hemm element ewlieni ta 'Asterisk - AMI SIPshowregistry, li miegħu jiżdiedu dawk dipendenti.

Dan joħloq żewġ elementi dipendenti:

  • Stat tal-pari f'forma ta' test
  • Ħin tar-rispons tal-apparat - jekk l-istatus huwa OK, allura l-ħin tar-rispons tal-apparat huwa miktub, inkella "-1"

It-triq għall-element innifsu hija ftit aktar sempliċi XPath:

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

Għat-tieni element użajt JavaScript biex nissepara ħin ta 'rispons mill-istatus tal-pari, peress li huma maħżuna flimkien:

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

Konklużjoni

Soluzzjoni out-of-the-box tista 'tkun kumplessa u mhux ċara immedjatament. Iżżid il-flessibbiltà u l-portabbiltà bejn sistemi differenti

Integrazzjoni kuntenta u faċli kulħadd! Mudell u struzzjonijiet għat-twaqqif GitHub.

Sors: www.habr.com

Żid kumment