Giunsa ang pagkonektar sa Zabbix sa Asterisk gikan sa kahon

Sa miaging artikulo "Zabbix - pagpalapad sa mga utlanan sa macro" Gisultihan ko ikaw kung giunsa pagdawat ang sesyon sa pagtugot ug ilisan kini sa usa ka lokal nga host macro. Sa kini nga artikulo isulti ko kanimo kung giunsa ang pagkonektar sa Zabbix sa Asterisk nga wala’y mga eksternal nga script ug software.

Ang ideya nga "makighigala" niining duha ka mga sistema natawo sa dugay na nga panahon, nga wala mag-install og dugang nga software o mga script. Ang usa ka dali nga pag-googling nakahatag daghang posible nga mga solusyon, ang tanan nabuak sa kamatuoran nga nag-upload sa mga script (sa Pyha, Bash, Python, ug uban pa) sa server, ug malipay ka. Gusto nako nga ipatuman ang pag-monitor "gikan sa kahon" - nga wala’y mga eksternal nga script ug pag-install dugang nga software sa server nga adunay pag-monitor ug PBX.

Gigugol nako ang kinatibuk-an nga 4 nga mga adlaw sa pagtrabaho niini, apan ang resulta takus niini. Ang pagtrabaho pinaagi sa AMI interface, ubos nga lebel nga detection, triggers, ug labaw sa tanan, ang pagkonektar sa PBX ug sa tanan nga uban nga mga setting karon nagkinahanglan og mga 15 minutos.

Anaa ang Zabbix 4.4, mga 100 ka piraso sa Asterisk nga bersyon 13. Ang uban nga mga PBX moabut uban ang FreePBX web interface, ang uban adunay usa ka hubo nga console, usa ka hugpong sa mga limbong ug panagsama pinaagi sa usa ka dialplan.

Pagdawat sa datos gikan sa PBX

Ang una ug panguna nga punto nga kinahanglan sulbaron mao ang pagkuha sa datos bahin sa mga kaedad ug mga pagrehistro sa SIP. Alang niini nga katuyoan, ang PBX adunay mga interface sa AGI, AMI, ARI ug SSH console. Alang sa klaro nga mga hinungdan, wala nako gikonsiderar ang dugang nga mga module.

Una kinahanglan naton mahibal-an kung unsa kini nga agi, ami, ari ...

  • AGI - gamit ang mga script sa dialplan. Nag-una nga gigamit alang sa pagdumala sa tawag.
  • AMI - makahatag sa tanan nga gikinahanglan nga impormasyon, mga buhat pinaagi sa port 5038, susama sa Telnet. Nahiangay kanato!
  • ARI - moderno, uso, JSON. Adunay daghang mga posibilidad, ang format sa datos masabtan alang sa Zabbix, apan alang kanako walay nag-unang butang: dili nimo makontrol ang pagrehistro sa sip. Laing disbentaha mao nga alang sa mga kaedad adunay duha ra ka estado online / offline, bisan kung adunay daghang mga estado ug kini mapuslanon nga tagdon kini kung mag-diagnose.
  • Mahimo sa SSH ang tanan, apan usahay dili kini gitugotan tungod sa "mga hinungdan sa seguridad". Mahimong lainlain ang mga konsiderasyon, dili nako sila hisgutan.

Bisan pa, sa tanan nga mga kakulangan niini, ang ARI naglangkob sa 90% sa tanan nga mga kinahanglanon sa pag-monitor.

Zabbix ug Telnet - akong kasagmuyo

Nahibal-an ko pag-ayo ang AMI; sa usa ka higayon gipatuman nako ang pagsubay sa mga pagkawala sa mga panag-istoryahanay sa pagbahinbahin sa mga hilit nga opisina, pagdumala sa tawag, ug uban pa. Uban sa Telnet, ang tanan klaro usab: ablihi ang koneksyon, ipadala ang mga mando ug basaha ang tubag. Mao kana ang akong gibuhat, apan ang resulta nahigawad kanako.

Ang Telnet sa Zabbix dili parehas sa Linux console, kini mas simple ug gipahaom alang sa standard nga pagtugot sama sa pag-login/password. Kung lahi ang lohika sa pagtugot, ug wala’y hangyo alang sa usa ka pares sa pag-login/password, adunay sayup nga mahitabo. Human sa walay pulos nga mga pagsulay sa paglaktaw sa gikinahanglan nga pagtugot, mapuslanon ang pagtan-aw sa source code sa Telnet module.

Nakaamgo ko nga hangtod adunay tradisyonal nga paghangyo sa pag-login ug password, dili ako magpadayon. Para lang sa kalingawan, gikuha nako ang tanan nga may kalabutan sa pagtugot gikan sa code ug gi-assemble ang tanan. Obra! Apan wala kini makaabot sa mga kinahanglanon. Sige na nga…

Balik ta sa pagpangita

Gibasa nako pag-usab ang dokumentasyon sa ARI, gipadagan ang dugang nga mga pagsulay - wala’y mga pagrehistro sa sip dinhi. Adunay mga pista, adunay mga panag-istoryahanay, adunay mga breeches, apan walay mga registration. Sa pila ka punto nakahunahuna ko, kinahanglan ba gyud naton ang pagparehistro sa buwitre?

Pinaagi sa usa ka kataw-anan nga sulagma, sa niining higayona ang lain nga hangyo moabut gikan sa tiggamit, nga adunay problema sa mga outgoing nga tawag. Ang problema mao nga ang pagrehistro sa sip nagyelo ug nasulbad pinaagi lamang sa pag-reboot sa module.

asterisk -rx "sip reload"

Nindot kaayo nga ma-access ang AMI sa web: kana makasulbad sa tanan nga mga problema, sa akong hunahuna. Nagsugod ako sa pagkalot niini nga direksyon, ug sa literal ang una nga linya sa pagpangita nagpadulong sa opisyal nga dokumentasyon sa Asterisk, nga nag-ingon nga adunay kapilian alang sa akong mga buluhaton. webenable sa file /etc/asterisk/manager.conf, nga kinahanglang itakda sa YES, sa seksyon [kinatibuk-an]

Pagkahuman niini, pinaagi sa usa ka regular nga hangyo sa web sa porma http://ats:8089/mxml?action=SIPshowregistry makuha namo ang tanang gikinahanglang impormasyon.

Kung gamiton ang interface sa FreePBX, dili nimo mahimo kini nga kapilian pinaagi sa web, kinahanglan nimo nga palihokon kini pinaagi sa console pinaagi sa paghimo og mga pagbag-o sa manager.conf file. Dili kini mapapas sa FreePBX kung ang mga pagbag-o sa configuration gihimo pinaagi sa web.

Nagtrabaho ko uban sa lain-laing mga matang sa Asterisk integration sa dugay nga panahon, apan wala pa nako makita kini nga bahin nga gihisgutan bisan asa. Natingala ko nga walay usa nga naghulagway niini nga paagi sa pagpakig-uban sa PBX. Labi na nga mapuslanon ang pagpangita alang sa kasayuran bahin sa kini nga hilisgutan: halos wala o gigamit kini alang sa hingpit nga lainlaing mga buluhaton.

WEB AMI - unsa nga klase sa mananap?

Pagdugang og opsyon webenable sa pag-file manager.conf naghatag og bug-os nga access sa pagdumala sa ATS pinaagi sa web. Ang tanan nga mga sugo nga magamit pinaagi sa usa ka regular nga AMI naa na sa web, mahimo nimong paminawon ang mga panghitabo gikan sa PBX pinaagi sa usa ka socket. Ang prinsipyo sa operasyon walay kalainan sa console AMI. Human sa pagpaaktibo niini nga opsyon, mahimo nimong kontakon ang PBX sa mosunod nga mga adres:

https://ats:8089/manager β€” usa ka panid sa web nga adunay yano nga interface alang sa pagsulay ug mano-mano nga pagpadala mga hangyo. Ang tanan nga mga tubag giporma sa mabasa nga HTML. Dili kaayo angay alang sa pagmonitor.
https://ats:8089/rawman β€” text output lamang, pormat susama sa console AMI
https://ats:8089/mxml - text output lamang, sa XML format. Nahiangay kanato!

Giunsa ang pagkonektar sa Zabbix sa Asterisk gikan sa kahon

Dayon naghunahuna ko: β€œKini ang solusyon! Karon ang tanan andam na! Easy-peezy lemon squeezey,” pero sayo pa kaayo para magmaya. Aron makuha ang kasayuran nga among gikinahanglan, igo na ang paggamit sa usa ka GET nga hangyo nga adunay kinahanglan nga aksyon aksyon, nga agig tubag nagbalik sa xml nga adunay lista sa tanan nga mga pagrehistro ug ang ilang kahimtang. Nindot kini tanan, apan kinahanglan nimo ang pagtugot aron mahinumduman ang sesyon gikan sa cookie. Kung nagsulay ka sa browser, wala ka maghunahuna bahin niini nga proseso.

Proseso sa pagtugot

Una atong hisgotan ang adres http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, agig tubag, ang server nagpadala kanamo og cookie nga adunay sesyon sa pagtugot. Kini ang hitsura sa usa ka hangyo sa 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

Tubag:

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>

Aron magtrabaho didto kinahanglan nimo mansession_id="6f5de42c", i.e. ang cookie sa pagtugot mismo.
Ang sulud kinahanglan nimo nga susihon ang tubag "Gidawat ang authentication" Sunod, alang sa tanan nga mga tawag sa PBX server, kinahanglan namon nga magdugang usa ka cookie sa pagtugot sa hangyo.

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

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

Basaha kung giunsa pagkuha ang cookie sa pagtugot ug gamiton kini sa ubang mga hangyo dinhi: "Zabbix - pagpalapad sa mga utlanan sa macroΒ»

Aron makahimo og mga elemento sa pagsubay sa Zabbix akong gamiton ang auto detection.

Auto detection

Aron awtomatiko nga makit-an ang mga pagrehistro ug masubay ang mga estado sa kaedad, kinahanglan nimo nga kontakon ang mosunod nga adres: https://ats:8089/mxml?action=SIPshowregistry o https://ats:8089/mxml?action=SIPpeers

Agig tubag, ang PBX mibalik kanamo ug XML nga tubag:

<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>

Adunay daghang mga basura sa tubag, mao nga sa preprocessing atong gisala kini pinaagi sa template XPath: //tubag/generic[@host]
Dayon magsugod ang kalingawan. Aron magtrabaho uban ang detection ug dinamikong paghimo og mga elemento, ang tubag kinahanglang anaa sa JSON format. Dili suportado ang XML para sa mga auto detection.

Aron ma-convert ang XML ngadto sa JSON, kinahanglan kong magdula og gamay sa auto replacement, diin naghimo ko og script sa JS

Giunsa ang pagkonektar sa Zabbix sa Asterisk gikan sa kahon

Usa ka makapaikag nga punto: sa tubag sa ATS, ang tanan nga mga parameter gilibutan sa usa nga mga kinutlo, ug pagkahuman gipadapat ang template //tubag/generic[@host] gipulihan sila ug doble.

Aron makahimo og mga elemento, naggamit kami og mga variable gikan sa XML nga tubag (karon JSON).

Giunsa ang pagkonektar sa Zabbix sa Asterisk gikan sa kahon

SIP Registry

Alang sa pagrehistro sa sip naggamit kami tulo ka mga variable: username, panon, Dunggoanan. Nalipay ko sa ngalan sa elemento [protektado sa email]: 5060, Wala koy nakit-an nga bisan unsang mga sitwasyon diin kinahanglan nimo gamiton ang tanan nga lima ka mga variable.

Ang panguna nga elemento nga nakadawat kasayuran bahin sa tanan nga pagrehistro, Asterisk - AMI SIPshowregistry. Kausa sa usa ka minuto naghimo kini og GET nga hangyo sa https://ats:8089/mxml?action=SIPshowregistry, pagkahuman ang tubag nga XML data gipasa sa tanan nga nagsalig nga mga elemento alang sa pag-parse. Alang sa matag pagrehistro naghimo ako usa ka elemento nga nagsalig niini. Kombenyente kini tungod kay nakadawat kami sa labing bag-ong kasayuran sa usa ka hangyo, ug dili alang sa matag hangyo nga gilain. Kini nga pagpatuman adunay usa ka mahinungdanong disbentaha - ang load sa processor.

Kung gisulayan ang hangtod sa 100 nga nagsalig nga mga elemento, wala nako namatikdan ang pagkarga, apan sa 1700 nga mga elemento, naghatag kini usa ka mamatikdan nga 15 segundos nga pagkarga sa processor. Hinumdumi kini kung daghan ka nga nagsalig nga mga elemento.

Isip usa ka opsyon sa "pagsabwag" sa load o pagtakda sa lain-laing mga polling frequency alang sa usa ka elemento, mahimo nimong ibalhin ang pagproseso nga lohika sa matag elemento nga gilain.

Wala nako gitipigan ang nadawat nga kasayuran sa panguna nga elemento. Una, wala nako makita ang panginahanglan alang niini, ug ikaduha, kung ang tubag labaw pa sa 64K, unya giputol kini ni Zabbix.

Tungod kay naggamit kami usa ka bug-os nga tubag sa XML alang sa nagsalig nga elemento, kinahanglan namon makuha ang kantidad niini nga elemento sa preprocessing. Pinaagi sa XPath kini gibuhat sama niini:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ estado)
Alang sa mga status sa pagrehistro, wala ako mogamit sa mga status sa teksto, apan gi-convert kini sa numeric nga porma gamit ang JavaScript:

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

SIP mga kauban

Pinaagi sa pagtandi sa mga pagrehistro sa SIP, adunay usa ka nag-unang elemento sa Asterisk - AMI SIPshowregistry, diin gidugang ang mga nagsalig.

Naghimo kini og duha ka nagsalig nga mga elemento:

  • Ang kahimtang sa kauban sa porma sa teksto
  • Oras sa pagtubag sa aparato - kung OK ra ang kahimtang, ang oras sa pagtubag sa aparato gisulat, kung dili "-1"

Ang agianan sa elemento mismo mas simple XPath:

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

Alang sa ikaduha nga elemento gigamit nako ang JavaScript sa pagbulag tubag sa Panahon gikan sa peer status, tungod kay sila gitipigan nga magkauban:

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

konklusyon

Ang usa ka out-of-the-box nga solusyon mahimong komplikado ug dili dayon klaro. Nagpataas sa pagka-flexible ug kadali sa taliwala sa lainlaing mga sistema

Malipayon ug sayon ​​nga panaghiusa sa tanan! Template ug mga instruksyon sa pag-set up GitHub.

Source: www.habr.com

Idugang sa usa ka comment