Aurreko artikulu batean
Aspaldi sortu zen bi sistema hauen “lagunak egiteko” ideia, software edo script gehigarririk instalatu gabe. Googling azkar batek irtenbide posible asko eman zituen, scriptak (Pyha, Bash, Python, etab.) zerbitzarian kargatu eta pozik egongo zara. Monitorizazioa "kutxatik kanpo" ezarri nahi nuen - kanpoko scriptik gabe eta zerbitzarian software gehigarria instalatu monitorizazioa eta PBXarekin.
Guztira 4 lanegun eman nituen honekin, baina emaitzak merezi izan zuen. AMI interfazearen bidez lan egiteak, maila baxuko detekzioa, abiarazleak eta, batez ere, PBXa eta gainerako ezarpen guztiak konektatzeak 15 minutu inguru behar ditu orain.
Zabbix 4.4 eskuragarri dago, Asterisk 100 bertsioaren 13 pieza inguru. PBX batzuk FreePBX web interfazearekin datoz, beste batzuk kontsola hutsarekin, trikimailu mordoa eta dialplan baten bidez integratzeko.
PBXetik datuak jasotzea
Ebatzi beharreko lehen puntu eta nagusia parekideei eta SIP erregistroei buruzko datuak lortzea da. Horretarako, PBXak AGI, AMI, ARI eta SSH kontsola interfazeak ditu. Ageriko arrazoiengatik, ez nuen modulu osagarririk kontuan hartu.
Lehenik agi, ami, ari hauek... zer diren asmatu behar dugu.
- AGI - dialplaneko gidoiak erabiliz. Batez ere deiak kudeatzeko erabiltzen da.
- AMI - beharrezko informazio guztia eman dezake, 5038 atakaren bidez funtzionatzen du, Telnet-en antzera. Egokitzen zaigu!
- ARI - modernoa, modan, JSON. Aukera asko daude, datuen formatua ulergarria da Zabbixentzat, baina niretzat ez dago gauza nagusirik: ezin duzu sip erregistroa kontrolatu. Beste desabantaila bat da parekideentzat sarean/offlinean bi estatu baino ez daudela, nahiz eta estatu gehiago egon eta diagnostikoa egiterakoan kontuan hartzea komeni den.
- SSH dena egin dezake, baina batzuetan ez da onartzen "segurtasun arrazoiengatik". Gogoetak desberdinak izan daitezke, ez naiz horietan sartuko.
Hala ere, bere gabezia guztiekin, ARIk monitorizazio behar guztien % 90 estaltzen du.
Zabbix eta Telnet - nire etsipena
Ondo ezagutzen dut AMI; garai batean urruneko bulegoen banaketarekin, deien kudeaketa eta abarretako elkarrizketetan galeren jarraipena ezarri nuen. Telnet-ekin, gainera, dena oso argi dago: ireki konexioa, bidali komandoak eta irakurri erantzuna. Horixe egin nuen, baina emaitzak etsita ninduen.
Zabbix-en Telnet ez da Linux kontsolaren berdina, apur bat sinpleagoa da eta baimen estandar baterako egokituta dago, hala nola saioa hasteko/pasahitza. Baimen-logika desberdina bada, eta ez badago saio-hasiera/pasahitz bikote baten eskaerarik, errore bat gertatzen da. Baimen-eskakizuna gainditzeko alferrikako saiakerak egin ondoren, erabilgarria izan zen Telnet moduluaren iturburu-kodea aztertzea.
Konturatu nintzen ohiko login eta pasahitz eskaera egin arte ez dudala aurrera egingo. Dibertitzeko bakarrik, baimenarekin lotutako guztia kendu nuen kodeatik eta dena muntatu nuen. Lanak! Baina ez ditu baldintzak betetzen. Segi aurrera…
Itzuli gaitezen bilaketara
Berriro irakurri dut ARI dokumentazioa, proba osagarriak egin ditut - hemen ez dago sip erregistrorik. Jaiak daude, elkarrizketak, kaltzak daude, baina ez dago izen-ematerik. Noizbait pentsatu nuen, benetan behar al dugu putreen erregistroa?
Kasualitate dibertigarri baten ondorioz, momentu honetan erabiltzailearen beste eskaera bat iristen da, irteerako deiekin arazo batekin. Arazoa izan zen sip erregistroa izoztu zela eta modulua berrabiarazi besterik ez zela konpontzen zela.
asterisk -rx "sip reload"
Oso ondo legoke AMI sarean sartzea: horrek arazo guztiak konponduko lituzke, pentsatu nuen. Norabide honetan zulatzen hasten naiz, eta literalki lehenengo bilaketa lerroak Asterisk dokumentazio ofizialera eramaten du, nire zereginetarako aukera dagoela dioena. web gaituta fitxategian /etc/asterisk/manager.conf, BAI ezarri behar dena atalean [orokorra]
Horren ostean, formularioaren ohiko web eskaera baten bidez
FreePBX interfazea erabiltzean, ezin duzu aukera hau web bidez gaitu; kontsolaren bidez gaitu behar duzu manager.conf fitxategian aldaketak eginez. FreePBX-k ez du ezabatzen konfigurazio-aldaketak web bidez egiten direnean.
Aspalditik lan egin dut Asterisk integrazio mota ezberdinekin, baina ez dut inoiz ikusi ezaugarri hau inon aipatzen. Harritu nintzen inork ez zuela deskribatzen PBXarekin elkarreragiteko metodo hau. Are bereziki erabilgarria izan zen gai honi buruzko informazioa bilatzea: ia ez dago ezer edo guztiz bestelako zereginetarako erabiltzen zen.
WEB AMI - nolako piztia?
Aukera bat gehitzea web gaituta artxibatzeko kudeatzailea.conf ATS kudeaketarako sarbide osoa eman zuen web bidez. Ohiko AMI baten bidez eskuragarri dauden komando guztiak sarean daude orain, PBXetik gertaerak entzun ditzakezu socket baten bidez. Funtzionamenduaren printzipioa ez da kontsolaren AMIaren desberdina. Aukera hau aktibatu ondoren, PBXarekin harremanetan jar zaitezke helbide hauetan:
Orduan pentsatu nuen: “Hau da irtenbidea! Orain dena prest egongo da! Erraza-peezy limoi squeezey», baina goizegi zen pozteko. Behar dugun informazioa lortzeko, nahikoa da GET eskaera erabiltzea beharrezko ekintzarekin ekintza, eta erantzun gisa xml itzultzen du erregistro guztien zerrenda eta haien egoerarekin. Hau guztia bikaina da, baina baimena behar duzu cookiearen saioa gogoratzeko. Arakatzailean probatzen duzunean, ez duzu prozesu honetan pentsatzen.
Baimen-prozesua
Lehenik eta behin helbidea zuzentzen dugu
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
Erantzuna:
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>
Bertan lan egiteko behar duzu jauregi_id="6f5de42c", hau da, baimen-cookiea bera.
Erantzuna egiaztatu besterik ez duzu behar duzun edukia "Autentifikazioa onartu da" Ondoren, PBX zerbitzarirako dei guztietarako, baimen-cookie bat gehitu beharko diogu eskaerari.
https://ats:8089/mxml?action=SIPpeers
Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"
Irakurri nola lortu baimen-cookie bat eta nola erabili beste eskaera batzuetan hemen: "
Zabbix-en jarraipen-elementuak sortzeko detekzio automatikoa erabiliko dut.
Detekzio automatikoa
Erregistroak automatikoki detektatzeko eta parekoen egoerak jarraitzeko, helbide honekin jarri behar duzu harremanetan:
Horren aurrean, PBXak XML erantzun bat itzultzen digu:
<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>
Erantzunetan zabor asko dago, beraz, aurreprozesazioan txantiloiaren arabera iragazten dugu XPath: //erantzuna/generikoa[@host]
Orduan dibertsioa hasten da. Detekzioarekin lan egiteko eta elementuak dinamikoki sortzeko, erantzunak JSON formatuan egon behar du. XML ez da onartzen automatikoki detektatzeko.
XML JSON bihurtzeko, ordezkapen automatikoarekin pixka bat jokatu behar izan nuen, eta horretarako script bat egin nuen JS-n
Puntu interesgarri bat: ATS erantzunean, parametro guztiak komatxo bakarrez inguratuta daude eta txantiloia aplikatu ondoren. //erantzuna/generikoa[@host] bikoitzekin ordezkatzen dira.
Elementuak sortzeko, XML erantzunaren (orain JSON) aldagaiak erabiltzen ditugu.
SIP Erregistroa
Sip erregistroetarako hiru aldagai erabiltzen ditugu: erabiltzailea, ostalari, portu. Pozik nengoen elementuaren izenarekin [posta elektroniko bidez babestua]: 5060, ez dut aurkitu bost aldagaiak erabili behar dituzun egoerarik.
Inskripzio guztiei buruzko informazioa jasotzen duen elementu nagusia, Asterisk - AMI SIPshowregistry. Minutu batean GET eskaera bat egiten dio
100 elementu menpeko proban, ez nuen karga nabaritu, baina 1700 elementurekin, horrek 15 segundoko karga nabaria eman zion prozesadoreari. Kontuan izan hau menpeko elementu kopuru handia baduzu.
Elementu baterako karga "zabaltzeko" edo galdeketa-maiztasun desberdinak ezartzeko aukera gisa, prozesatzeko logika elementu bakoitzari bereizita eraman dezakezu.
Jasotako informazioa ez dut elementu nagusian gordetzen. Lehenik eta behin, ez dut horren beharrik ikusten, eta, bigarrenik, erantzuna 64K baino gehiago bada, orduan Zabbixek mozten du.
Menpeko elementurako XML erantzun osoa erabiltzen dugunez, elementu honen balioa lortu behar dugu aurreprozesatzeko. bidez XPath horrela egiten da:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ Estatu)
Erregistro-egoeretarako, ez ditut testu-egoerak erabili, baina zenbakizko forma bihurtu ditut JavaScript erabiliz:
switch(value) {
case 'Registered':
return 1;
case 'Unregistered':
return 0;
default:
return -1;
}
SIP Peers
SIP erregistroekin analogia eginez, Asterisk-en elementu nagusi bat dago - AMI SIPshowregistry, eta horri menpekoak gehitzen zaizkio.
Horrek menpeko bi elementu sortzen ditu:
- Parekideen egoera testu moduan
- Gailuaren erantzun-denbora - egoera ondo badago, gailuaren erantzun-denbora idatziko da, bestela "-1"
Elementurako bidea apur bat sinpleagoa da XPath:
string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)
Bigarren elementurako JavaScript erabili nuen bereizteko erantzun-denbora parekideen egoeratik, elkarrekin gordetzen direnez:
if(value.substring(0,2) == 'OK'){
return value.match(/(d+)/gm);
}
else {
return -1;
}
Ondorioa
Kutxaz kanpoko irtenbide bat konplexua izan daiteke eta ez da berehala argia. Sistema ezberdinen arteko malgutasuna eta eramangarritasuna areagotzen du
Zoriontsu eta erraza den integrazioa! Txantiloia eta konfiguratzeko argibideak
Iturria: www.habr.com