Am fréieren Artikel Ech hunn Iech gesot wéi Dir eng Autorisatiounssitzung kritt an se an e lokale Hostmakro ersetzt. An dësem Artikel wÀert ech Iech soen wéi Dir Zabbix mat Asterisk verbënnt ouni extern Scripten a Software.
D'Iddi "Frënn ze maachen" vun dësen zwee Systemer gouf viru laanger ZÀit gebuer, ouni zousÀtzlech Software oder Scripten z'installéieren. E séiere Googling huet vill méiglech Léisunge geliwwert, et huet alles op d'Tatsaach gekacht datt d'Skripten eropluede (an Pyha, Bash, Python, etc.) op de Server, an Dir wÀert glécklech sinn. Ech wollt d'Iwwerwaachung "aus der Këscht" ëmsetzen - ouni extern Scripten an zousÀtzlech Software um Server mat Iwwerwaachung a PBX z'installéieren.
Ech hunn am Ganzen 4 Aarbechtsdeeg mat dësem verbruecht, awer d'Resultat war et wÀert. Schafft duerch den AMI Interface, Low-Level Detectioun, Ausléiser, an am wichtegsten, d'Verbindung vun der PBX an all aner Astellungen dauert elo ongeféier 15 Minutten.
Zabbix 4.4 ass verfĂŒgbar, ongefĂ©ier 100 StĂ©ck Asterisk Versioun 13. E puer PBXs kommen mat der FreePBX Web Interface, e puer mat enger bloer Konsole, eng RĂ«tsch Tricken an Integratioun iwwer en Dialplan.
Date vun der PBX kréien
Den éischten an Haaptpunkt, dee geléist muss ginn, ass d'Daten iwwer Peer a SIP-Registréierungen ze kréien. Fir dësen Zweck huet de PBX AGI, AMI, ARI an SSH Konsol Interfaces. Aus offensichtleche Grënn hunn ech keng zousÀtzlech Moduler ugesinn.
Als éischt musse mir erausfannen wat dës agi, ami, ari sinn ...
- AGI - benotzt Scripten am Dialplan. HaaptsÀchlech fir Opruff Gestioun benotzt.
- AMI - kann all déi néideg Informatioun ubidden, funktionnéiert iwwer Hafen 5038, Àhnlech wéi Telnet. Passt bei eis!
- ARI - modern, moudesch, JSON. Et gi vill MĂ©iglechkeeten, d'Dateformat ass verstĂ€ndlech fir Zabbix, awer fir mech ass et keen Haapt Saach: Dir kĂ«nnt d'SippregistrĂ©ierung net kontrollĂ©ieren. En aneren Nodeel ass datt et fir Peer nĂ«mmen zwee Staaten online / offline sinn, obwuel et mĂ©i Staaten sinn an et ass nĂ«tzlech se ze berĂŒcksichtegen wann Dir diagnostizĂ©iert.
- SSH kann alles maachen, awer heiansdo ass et net erlaabt aus "Sécherheetsgrënn". Considératiounen kënnen ënnerschiddlech sinn, ech ginn net an hinnen.
WĂ©i och Ă«mmer, mat all senge MĂ€ngel, deckt ARI 90% vun all IwwerwaachungsbedĂŒrfnisser.
Zabbix an Telnet - meng EnttÀuschung
Ech kennen AMI gutt; op enger ZĂ€it hunn ech Verfollegung vu Verloschter a GesprĂ©icher mat Divisioun duerch FernbĂŒroen, Uruffmanagement, etc. Mat Telnet ass alles och ganz kloer: d'Verbindung opmaachen, d'Befehle schĂ©cken an d'Ăntwert liesen. Dat ass wat ech gemaach hunn, awer d'Resultat huet mech enttĂ€uscht.
Den Telnet vun Zabbix ass net datselwecht wéi dee vun der Konsol. LinuxEt ass e bësse méi einfach an entwéckelt fir Standard Login/Passwuert-Authentifikatioun. Wann d'Authentifikatiounslogik anescht ass a kee Login/Passwuert-Paar ugefrot gëtt, geschitt e Feeler. Nodeems ech erfolleglos probéiert hunn, d'Authentifikatiounsufuerderung ze ëmgoen, hunn ech ugefaangen, de Quellcode vum Telnet-Modul ze kucken.
Ech hu gemierkt datt bis et eng traditionell Login a Passwuert Ufro ass, ech wĂ€ert net weidergoen. Just for fun, Ech gelĂ€scht alles Zesummenhang mat Autorisatioun aus dem Code an nees alles. Wierker! Awer et entsprĂ©cht net den Ufuerderunge. Maach weiderâŠ
Komme mer zréck op d'Sich
Ech liesen d'ARI Dokumentatioun nach eng Kéier, hunn zousÀtzlech Tester gemaach - et gi keng Schlupp Aschreiwungen hei. Et gi Fester, et gi Gespréicher, et gi Brochstécker, awer et gi keng Umeldungen. Iergendwann hunn ech iwwerhaapt geduecht, brauche mir wierklech Geierregistrierung?
Duerch e witzegen Zoufall kënnt zu dësem Moment nach eng Demande vum Benotzer, mat engem Problem mat den ausgaangenen Uriff. De Problem war datt d'Sippregistréierung gefruer ass a geléist gouf andeems Dir de Modul einfach nei starten.
asterisk -rx "sip reload"Et wier super fir AMI iwwer de Web ze kréien: dat géif all d'Problemer léisen, hunn ech geduecht. Ech fÀnken un an dës Richtung ze graven, a wuertwiertlech déi éischt Sichlinn féiert zu der offizieller Asterisk Dokumentatioun, déi seet datt et eng Optioun fir meng Aufgaben ass webaktivéiert am Fichier /etc/asterisk/manager.conf, déi op JO gesat muss ginn, an der Rubrik [général]
Duerno, duerch eng regulÀr Web Ufro vun der Form mir kréien all néideg Informatiounen.
Wann Dir d'FreePBX Interface benotzt, kĂ«nnt Dir dĂ«s Optioun net iwwer de Web aktivĂ©ieren; Dir musst et duerch d'Konsol aktivĂ©ieren andeems Dir Ănnerungen an der manager.conf Datei maacht. FreePBX lĂ€scht et net wann d'KonfiguratiounsĂ€nnerungen iwwer de Web gemaach ginn.
Ech hu laang mat verschiddenen Aarte vun Asterisk-Integratioune geschafft, awer ech hunn dës Feature ni iwwerall ernimmt gesinn. Ech war iwwerrascht datt keen dës Method fir mat der PBX ze interagéieren beschreift. Et war souguer besonnesch nëtzlech fir Informatioun iwwer dëst Thema ze sichen: et gëtt praktesch nÀischt oder et gouf fir ganz aner Aufgaben benotzt.
WEB AMI - wéi eng Béischt?
Eng Optioun dobĂ€izemaachen webaktivĂ©iert ze Fichier manager.conf gĂ«tt voll Zougang zu ATS Gestioun iwwer de Web. All Kommandoen, dĂ©i iwwer e regulĂ€re AMI verfĂŒgbar sinn, sinn elo um Internet, Dir kĂ«nnt Eventer vun der PBX iwwer e Socket lauschteren. De Prinzip vun der Operatioun ass net anescht wĂ©i d'Konsol AMI. Nodeems Dir dĂ«s Optioun aktivĂ©iert hutt, kĂ«nnt Dir de PBX op folgend Adressen kontaktĂ©ieren:
- eng WebsĂ€it mat engem einfachen Interface fir Testen a manuell Ufroen ze schĂ©cken. All Ăntwerte sinn an liesbar HTML formatĂ©iert. Net ganz gĂ«eegent fir Iwwerwaachung.
- Nëmmen Textausgang, Format Àhnlech wéi Konsol AMI
- nëmmen Textausgang, am XML-Format. Passt bei eis!

Dunn hunn ech geduecht: "DĂ«st ass d'LĂ©isung! Elo wĂ€ert alles prett sinn! Einfach peezy Zitroun squeezey," mee et war ze frĂ©i ze freeĂ«n. Fir d'Informatioun ze krĂ©ien dĂ©i mir brauchen, ass et genuch fir eng GET Ufro mat der nĂ©ideger Handlung ze benotzen Aktiounen, dĂ©i als Ăntwert xml mat enger LĂ«scht vun all Umeldungen an hire Status zrĂ©ckginn. DĂ«st ass alles super, awer Dir braucht Autorisatioun fir d'Sessioun vum Cookie ze erĂ«nneren. Wann Dir am Browser testen, denkt Dir net un dĂ«se Prozess.
Autorisatioun Prozess
Als Ă©ischt adressĂ©iere mir d'Adress , als Ăntwert schĂ©ckt de Server eis e Cookie mat der Autorisatiounssession. DĂ«st ass wĂ©i eng HTTP Ufro ausgesĂ€it:
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Ăntwert:
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> Fir do ze schaffen braucht Dir mansession_id="6f5de42c", dh den Autorisatiouns-Cookie selwer.
Inhalt Dir braucht just fir d'Ăntwert ze kontrollĂ©ieren "Authentifikatioun ugeholl" Als nĂ€chst, fir all Uruff un de PBX-Server, musse mir en Autorisatiouns-Cookie op d'Ufro addĂ©ieren.
https://ats:8089/mxml?action=SIPpeers
Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"Liest wéi Dir en Autorisatiouns-Cookie kritt a benotzt se an aner Ufroen hei: "»
Fir Tracking Elementer an Zabbix ze kreéieren wÀert ech automatesch Detektioun benotzen.
Auto Detektioun
Fir automatesch Enregistrementer z'entdecken an Peer Staaten ze verfollegen, musst Dir déi folgend Adress kontaktéieren: oder
Als Ăntwert gĂ«tt de PBX eis eng XML Ăntwert zrĂ©ck:
<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> Et gĂ«tt vill Gerempels an der Ăntwert, also an der Virveraarbechtung filtere mir et no Schabloun XPath: //Ăntwert/generesch[@host]
Da fĂ€nkt de Spaass un. Fir mat Detektioun ze schaffen an dynamesch Elementer ze kreĂ©ieren, muss d'Ăntwert am JSON-Format sinn. XML gĂ«tt net fir automatesch Detektiounen Ă«nnerstĂ«tzt.
Fir XML op JSON ze konvertéieren, hunn ech e bëssen mam Auto Ersatz gespillt, fir deen ech e Skript am JS gemaach hunn

En interessante Punkt: an der ATS Ăntwert sinn all Parameter vun eenzelen Zitater Ă«mgi, an no der Uwendung vun der Schabloun //Ăntwert/generesch[@host] si ginn duerch duebel ersat.
Fir Elementer ze kreĂ©ieren benotze mir Variablen aus der XML Ăntwert (elo JSON) .

SIP Registry
Fir Schlupp Aschreiwunge benotze mir drÀi Variabelen: Benotzernumm, Provider, port. Ech war frou mam Numm vum Element 111111@login.mtt.ru:5060, Ech hu keng Situatiounen fonnt wou Dir all fënnef Variabelen benotze musst.
Den Haaptelement dat Informatioun iwwer all Umeldungen kritt, Asterisk - AMI SIPshowregistry. Eemol pro Minutt mĂ©cht et eng GET Ufro un , no deem d'Ăntwert XML Daten un all ofhĂ€ngeg Elementer fir d'Parsing weiderginn. Fir all Aschreiwung schafen ech en Element ofhĂ€ngeg vun et. DĂ«st ass bequem well mir aktuell Informatioun an enger Ufro krĂ©ien, an net fir all Ufro separat. DĂ«s Ămsetzung huet e wesentlechen Nodeel - d'Laascht op de Prozessor.
Wann ech bis zu 100 ofhÀngeg Elementer testen, hunn ech d'Laascht net gemierkt, awer mat 1700 Elementer huet dëst eng merkbar 15 Sekonn Laascht op de Prozessor ginn. Halen dëst am Kapp wann Dir eng grouss Zuel vun ofhÀngeg Elementer hunn.
Als Optioun fir d'Laascht "ausbreeden" oder verschidde Pollingfrequenzen fir en Element ze setzen, kënnt Dir d'Veraarbechtungslogik op all Element separat réckelen.
Ech spĂ€icheren dĂ©i kritt Informatioun net am Haaptelement. Ăischtens, ech gesinn net de Besoin fir dĂ«st, an zweetens, wann d'Ăntwert mĂ©i wĂ©i 64K ass, da schneid Zabbix et of.
Well mir eng voll XML Ăntwert fir dat ofhĂ€ngegt Element benotzen, musse mir de WĂ€ert vun dĂ«sem Element an der Virveraarbechtung krĂ©ien. Duerch XPath dĂ«st gĂ«tt esou gemaach:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ Staat)
Fir Umeldungsstatusen hunn ech keng Textstatuse benotzt, awer se an numeresch Form ëmgewandelt mat JavaScript:
switch(value) {
case 'Registered':
return 1;
case 'Unregistered':
return 0;
default:
return -1;
}
SIP Peers
Analogie mat SIP Aschreiwungen gĂ«tt et en Haaptelement vun der Asterisk - AMI SIPshowregistry, op dĂ©i ofhĂ€ngeg bĂ€igefĂŒĂŒgt ginn.
Dëst erstellt zwee ofhÀngeg Elementer:
- Peer Status an Textform
- Apparat Ăntwert ZĂ€it - wann de Status OK ass, da gĂ«tt d'Apparat Ăntwert ZĂ€it geschriwwe, soss "-1"
De Wee zum Element selwer ass e bësse méi einfach XPath:
string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)
Fir dat zweet Element hunn ech JavaScript benotzt fir ze trennen Ăntwert ZĂ€it vum Peer-Status, well se zesumme gelagert sinn:
if(value.substring(0,2) == 'OK'){
return value.match(/(d+)/gm);
}
else {
return -1;
}Konklusioun
Eng out-of-the-box Léisung kann komplex sinn an net direkt kloer. Erhéicht Flexibilitéit a Portabilitéit tëscht verschiddene Systemer
Glécklech an einfach Integratioun jiddereen! Schabloun an Uweisunge fir Ariichten .
Source: will.com
