Eelmisel artiklil Ma rÀÀkisin, kuidas saada autoriseerimise sessiooni ja sisestada see kohalikku hosti makrosse. Selles artiklis jagan, kuidas Zabbixit Asteriskiga sÔbrustada ilma vÀliste skriptide ja tarkvarata.
Idee need kaks sĂŒsteemi âsĂ”brustadaâ tekkis ammu, ilma et oleks vaja paigaldada lisatarkvara ja skripte. Kiire Google'iga otsimine andis hulgaliselt lahendusi, kuid kĂ”ik viitas sellele, et laadige serverisse skriptid (PHP, bash, Python jms) ja ongi Ă”nn kĂ€es. Mina tahtsin aga teostada jĂ€lgimist âvĂ€lja pakitudâ â ilma vĂ€liste skriptide ja lisatarkvara paigaldamiseta jĂ€lgimis- ja PBX-serverisse.
Töötasin selle kallal kokku 4 tööpĂ€eva, kuid tulemus oli seda vÀÀrt. Töö AMI liidese kaudu, madala taseme tuvastamine, triggereid ja mis peamine, PBX-i ĂŒhendamiseks ja kĂ”ikide muude seadistuste jaoks kulub nĂŒĂŒd vaid 15 minutit.
KÀes on Zabbix 4.4 ja umbes 100 Asterisk 13 versiooni. MÔned PBX-id tulevad koos FreePBX veebiliidesega, teised palja konsooli, hulga nipide ja dial-plaani kaudu integreerimisega.
Saame andmeid PBX-ist
Esimene ja peamine asi, mida peab lahendama â saada andmeid peeride ja SIP registreerimiste kohta. Selleks on PBX-is olemas AGI, AMI, ARI ja SSH konsooli liidesed. TĂ€iendavaid module ei kaalunud selge pĂ”hjuse tĂ”ttu.
Esiteks, tuleb aru saada, mis need AGI, AMI, ARI⊠on.
- AGI â skriptide kasutamine dial-plaanis. Peamiselt kasutatakse kĂ”nede juhtimiseks.
- AMI â suudab anda kogu vajaliku teabe, töötab pordi 5038 kaudu nagu Telnet. See sobib meile!
- ARI â moodsalt, stiilselt, JSON-vormingus. Palju vĂ”imalusi, andmevorming arusaadaval kujul Zabbixile, kuid minu jaoks on puudu peamine: SIP registreerimist ei saa kontrollida. Veel ĂŒks miinus â peeride kohta on ainult kaks olekut: online/offline, kuigi olekuid on rohkem ja neid on kasulik diagnostika jaoks arvesse vĂ”tta.
- SSH â suudab kĂ”ike, kuid mĂ”nikord ei anta seda âturvakaalutlustelâ. TĂ”enĂ€oliselt on kaalutlusi erinevaid, ei hakka neid arutama.
Siiski, vaatamata oma puudustele katab ARI 90% kÔikidest jÀlgimise vajadustest.
Zabbix ja Telnet â minu pettumus
Ma tean AMI-d hĂ€sti, omal ajal rakendasin kĂ”nede kaotuste jĂ€lgimist kaugkontorite jagunemisega, kĂ”nede haldamist jne. Telneti puhul on kĂ”ik samuti selge: avad ĂŒhenduse, saadad kĂ€sud ja loed vastuse. Nii ma teginkin, kuid tulemus pettis mind.
Zabbixis on Telnet pisut erinev kui Linuxi konsoolis; see on veidi lihtsam ja kohandatud standardse autentimise jaoks, nagu kasutajanimi/parool. Kui autentimise loogika on teine ja kasutajanimi/parooli paari kĂŒsitakse, tekib viga. PĂ€rast mitmeid ebaĂ”nnestunud katseid autentimisnĂ”ude ĂŒmber minna, hakkasin uurima Telneti mooduli lĂ€htekoodi.
MÔistsin, et seni kuni traditsioonilist kasutajanime ja parooli pÀringut ei toimu, ei edene edasi. Huvi pÀrast eemaldasitin koodist kÔik, mis puudutas autentimist, ja kompileerisin kÔik uuesti. See töötab! Kuid nÔuetele see ei vasta. JÀtkame...
Naaseme otsingu juurde
Lugesin uuesti ARI dokumentatsiooni, viisime lĂ€bi tĂ€iendavad katsetused - siin ei ole SIP registreerimisi. Peerid on olemas, kĂ”ned on olemas, sillad on olemas, registreerimisi pole. Mingil hetkel mĂ”tlesin isegi, kas me vajame ĂŒldse SIP registreerimisi?
Tohutul kombel saabub sel hetkel jÀlle kasutajalt pÀring, millel on probleem vÀljakutsutud kÔnedega. Probleem oli SIP registreerimise hangumisega ja lahendati tavapÀrase mooduli taaskÀivitamisega.
asterisk -rx "sip reload"Oleks tore, kui saaksin AMI-d veebist kasutada: see lahendaks kÔik probleemid, mÔtlesin ma. Hakkan uurima seda suunda ja jÀrjekordne otsing viib mind Asterisk ametlikule dokumentatsioonile, kus öeldakse, et minu vajaduste jaoks on olemas valik webenabled failis /etc/asterisk/manager.conf, mille peab seadistama vÀÀrtusele YES, jaotises [general]
PÀrast seda saadame tavalise veebipÀringu kujul saame kogu vajaliku teabe.
FreePBX-liidese kasutamisel ei saa seda valikut veebist sisse lĂŒlitada; see tuleb aktiveerida konsoolist, muutes faili manager.conf. FreePBX ei kustuta seda, kui muudetakse konfiguratsiooni veebis.
Kaua töötan erinevate Asterisk integratsioonidega, pole kunagi nĂ€inud, et keegi oleks maininud seda funktsiooni. Mind ĂŒllatas, et keegi ei kirjuta sellest suhtlemismeetodist PBXiga. Isegi eriti vaatasin infot selle teema kohta: praktiliselt mitte midagi ei ole vĂ”i on kasutatud tĂ€iesti teiste ĂŒlesannete tarbeks.
WEB AMI - mis asi see on?
Valiku lisamine webenabled faili manager.conf avad avatud tĂ€ieliku juurdepÀÀsu mÀÀramise ACI kaudu veebis. KĂ”ik kĂ€sud, mis on kergesti kĂ€ttesaadavad tavapĂ€rase AMI kaudu, on nĂŒĂŒd veebis saadaval, samuti saab kuulata ACI ĂŒritusi socket'i kaudu. Töö pĂ”himĂ”te ei erine konsol AMI-st.
â veebileht lihtsa liidese jaoks, testide ja kĂ€sitsi pĂ€ringute saatmiseks. KĂ”ik vastused vormindatakse loetavaks HTML-vĂ€lja.
â ainult tekstiline vĂ€ljund, formaat sarnaneb konsol AMI-ga.
â ainult tekstiline vĂ€ljund, XML-formaadis. See sobib meile!

Siin mĂ”tlesin: "Noh, see on lahendus! NĂŒĂŒd on kĂ”ik valmis! Lihtne nagu pirn," aga rÔÔmustamiseks oli veel vara. Vajaliku info saamiseks piisab GET-pĂ€ringu kasutamisest koos vajaliku tegevusega. tegevus, mis tagastab vastuseks xml, kus on kĂ”ikide registreeringute loetelu ja nende olek. See kĂ”ik on suurepĂ€rane, kuid vajame autoriseerimist koos seansi salvestamisega cookie's. Kui testid brauseris, ei mĂ”tle sa sellele protsessile.
Autoriseerimisprotsess
Alguses pöördume aadressile , millele server saadab meile autoriseerimise seansi cookie. Nii nÀeb vÀlja HTTP-pÀring:
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: et-EE,et;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: 1Vastus:
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 Selle töötamiseks on vajalik mansession_id="6f5de42c", st autoriseerimise cookie ise.
Sisu tuleb vaid kontrollida, kas vastus "Authentication accepted" on olemas. Edasi, kÔikide ACI-serverile tehtud pÀringute puhul peame lisama pÀringusse autoriseerimise cookie.
https://ats:8089/mxml?action=SIPpeers
Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"Kuidas saada autoriseerimise cookie ja kasutada seda muudes pÀringutes, loe siit: "»
Zabbixis jÀlgimiselementide loomise jaoks kasutan automaatset avastamist.
Automaatne avastamine
Kui soovid registreeringute automaatset avastamist ja peer'ide olekute jÀlgimist, pöördu aadressile: vÔi
Vastus, mille ACI meile saadab, on XML:
...
... Vastuses on palju prĂŒgi, seetĂ”ttu filtreerime me eelprotsessimisel seda mustri jĂ€rgi. XPath: //response/generic[@host]
Edasi algab kĂ”ige huvitavam. Et töötada avastamise ja dĂŒnaamiliste elementide loomisega, peab vastus olema JSON formaadis. XML ei toeta automaatset avastamist.
XML-i JSON-iks muutmiseks pidin veidi mÀngima automaatvahetusega, mille jaoks tegin JS-i skripti.

Huvitav punkt, et vastuses on kĂ”ik parameetrid ĂŒhekordsete jutumĂ€rkidega, ja pĂ€rast mustri rakendamist. //response/generic[@host] need muudetakse kahekordseteks.
Elementide loomiseks kasutame XML vastusest (nĂŒĂŒd JSON) muutujaid.

SIP Registry
SIP registreerimise jaoks kasutame kolme muutujaid: username, host, port. Mulle sobis elemendi nimi 111111@login.mtt.ru:5060, olukordi, kus tuli kasutada kÔiki viit muutujat, ei leidnud.
Peamine element, mis saab teavet kĂ”igi registreerimiste kohta, Asterisk â AMI SIPshowregistry. Kord minutis teeb ta GET pĂ€ringu aadressile , seejĂ€rel edastatakse XML vastuse andmed kĂ”ikidele sĂ”ltuvatele elementidele analĂŒĂŒsimiseks. Iga registreerimise element loodi sellele sĂ”ltuvaks. See on mugav, kuna saame ajakohast teavet ĂŒhe pĂ€ringuga, mitte igaĂŒhe jaoks eraldi. Selle rakenduse puhul on ĂŒks oluline puudus â koormus protsessorile.
Testimisel kuni 100 sÔltuva elemendi puhul ei tÀheldanud ma koormust, kuid 1700 elemendi korral andis see mÀrgatava 15-sekundilise koormuse protsessorile. Pidage seda meeles, kui teil on palju sÔltuvaid elemente.
Alternatiiv koormuse "jaotamiseks" vĂ”i elementide kĂŒsitluse erineva sageduse seadmiseks vĂ”iks olla töötlemise loogika viimine igasse elementi eraldi.
Saadud teavet ma peamises elemendis ei hoia. Esiteks, ei nĂ€e selles vajadust, ja teiseks, kui vastus ĂŒletab 64K, lĂ”ikab Zabbix selle Ă€ra.
Kuna sÔltuva elemendi jaoks kasutame tÀielikku XML vastust, peame eeltöötluses saama selle elemendi vÀÀrtuse. Selle kaudu XPath see tehakse nii:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@state)
Registreerimise staatuste jaoks ei kasutanud tekstilisi staatusi, vaid muutsin need numbriliseks kujuks JavaScripti abil:
switch(value) {
case 'Registered':
return 1;
case 'Unregistered':
return 0;
default:
return -1;
}
SIP Peers
Sarnaselt SIP-registratsioonidega on peamine element Asterisk â AMI SIPshowregistry, millele lisatakse sĂ”ltuvad elemendid.
Siin luuakse kaks sÔltuvat elementi:
- Pira staatus tekstivormingus
- Seadmest saadud vastuse aeg â kui staatus on OK, siis kirjutatakse seadme vastuse aeg, muidu â-1â
Elementi tee on juba veidi lihtsam XPath:
string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)
Teise elemendi puhul kasutasin JavaScripti, et eraldada vastuse aeg pira staatusest, kuna need talletatakse koos:
if(value.substring(0,2) == 'OK'){
return value.match(/(d+)/gm);
}
else {
return -1;
}KokkuvÔte
Lahendus âkastist vĂ€ljaâ vĂ”ib olla keeruline ja mitte kohe arusaadav. Kasvab paindlikkus ja ĂŒleviimise lihtsus erinevate sĂŒsteemide vahel.
Kena ja sujuvat integreerimist kÔigile! Mall ja seadistamise juhend on .
Allikas: habr.com
