Kumaha nyambungkeun Zabbix sareng Asterisk out of the box

Dina tulisan saméméhna "Zabbix - ngembangna wates makro" Kuring bébéja anjeun kumaha nampi sési otorisasi sareng ngagentos kana makro host lokal. Dina tulisan ieu kuring bakal nyarioskeun ka anjeun kumaha nyambungkeun Zabbix sareng Asterisk tanpa skrip sareng parangkat lunak éksternal.

Gagasan pikeun "nyieun babaturan" dua sistem ieu dilahirkeun lami pisan, tanpa masang parangkat lunak atanapi skrip tambahan. A googling rusuh yielded loba solusi mungkin, eta sadayana pindang ka kanyataan yén unggah Aksara (dina Pyha, Bash, Python, jsb) ka server, tur anjeun bakal senang. Kuring hayang nerapkeun monitoring "out of the box" - tanpa Aksara éksternal sarta masang software tambahan dina server kalawan monitoring sarta PBX.

Kuring spent total 4 poé gawé kalawan ieu, tapi hasilna éta patut eta. Gawéna ngaliwatan panganteur AMI, deteksi tingkat-rendah, pemicu, sareng anu paling penting, nyambungkeun PBX sareng sadaya setélan sanés ayeuna peryogi sakitar 15 menit.

Zabbix 4.4 sayogi, sakitar 100 potongan Asterisk versi 13. Sababaraha PBXs hadir kalawan panganteur web FreePBX, sababaraha kalawan konsol bulistir, kebat tina trik jeung integrasi via dialplan a.

Narima data ti PBX

Hal kahiji sareng utama anu kedah direngsekeun nyaéta kéngingkeun data ngeunaan peers sareng pendaptaran SIP. Pikeun tujuan ieu, PBX gaduh antarmuka konsol AGI, AMI, ARI sareng SSH. Pikeun alesan anu jelas, kuring henteu nganggap modul tambahan.

Mimiti urang kedah terang naon agi ieu, ami, ari ...

  • AGI - ngagunakeun skrip dina dialplan. Utamana dipaké pikeun manajemén panggero.
  • AMI - bisa nyadiakeun sagala informasi diperlukeun, jalan via port 5038, sarupa jeung Telnet. Cocog jeung urang!
  • ARI - modéren, modis, JSON. Aya seueur kamungkinan, format data tiasa kaharti pikeun Zabbix, tapi pikeun kuring henteu aya anu utama: anjeun moal tiasa ngontrol pendaptaran sip. disadvantage sejen nyaeta pikeun peers ngan aya dua nagara bagian online / offline, sanajan aya leuwih nagara bagian sarta mangpaat pikeun tumut kana akun nalika diagnosing.
  • SSH tiasa ngalakukeun sagalana, tapi kadang teu diwenangkeun alatan "alesan kaamanan". Pertimbangan bisa jadi béda, abdi moal balik kana aranjeunna.

Tapi, kalayan sagala kakuranganana, ARI nyertakeun 90% tina sadaya kabutuhan pangawasan.

Zabbix na Telnet - kuciwa kuring

Kuring terang AMI; dina hiji waktos kuring ngalaksanakeun nyukcruk karugian dina paguneman sareng divisi ku kantor terpencil, manajemén telepon, jsb. Kalayan Telnet, sadayana ogé jelas pisan: buka sambungan, kirimkeun paréntah sareng baca résponna. Éta naon atuh, tapi hasilna kuciwa kuring.

Telnet di Zabbix henteu sami sareng dina konsol Linux, éta langkung saderhana sareng cocog pikeun otorisasi standar sapertos login / sandi. Lamun logika otorisasina béda, tur euweuh pamundut pikeun login a / pasangan sandi, kasalahan lumangsung. Saatos usaha sia-sia pikeun bypass sarat otorisasina, éta mangpaat pikeun nempo kodeu sumber modul Telnet.

Kuring sadar yén dugi aya login sareng kecap akses tradisional, abdi moal maju. Ngan keur senang, Kuring dipiceun sagalana patali otorisasina tina kode jeung reassembled sagalana. Gawé! Tapi teu minuhan sarat. Lajengkeun…

Hayu urang balik deui ka pilarian

Kuring maca deui dokuméntasi ARI, ngajalankeun tés tambahan - henteu aya pendaptaran sip di dieu. Aya salametan, aya obrolan, aya breeches, tapi euweuh pendaptaran. Dina sababaraha waktos kuring malah panginten, naha urang leres-leres peryogi pendaptaran manuk hering?

Ku kabeneran lucu, dina momen ieu pamundut sejen datang ti pamaké, kalawan masalah telepon kaluar. Masalahna éta pendaptaran sip ieu katirisan sarta direngsekeun ku saukur rebooting modul.

asterisk -rx "sip reload"

Éta hadé pikeun ngaksés AMI dina wéb: éta bakal ngabéréskeun sadaya masalah, panginten. Kuring mimiti ngagali arah ieu, sareng sacara harfiah garis panéangan anu munggaran nuju kana dokuméntasi Asterisk resmi, anu nyatakeun yén aya pilihan pikeun tugas kuring. diaktipkeun wéb dina file /etc/asterisk/manager.conf, nu kudu disetel ka YES, dina bagian [umum]

Sanggeus ieu, ngaliwatan pamundut web biasa tina formulir http://ats:8089/mxml?action=SIPshowregistry urang meunang sagala informasi diperlukeun.

Lamun make panganteur FreePBX, Anjeun teu bisa ngaktipkeun pilihan ieu ngaliwatan web, Anjeun kudu ngaktipkeun ngaliwatan konsol ku nyieun parobahan dina manager.conf file. FreePBX henteu ngahapus nalika parobahan konfigurasi dilakukeun via wéb.

Kuring parantos lami damel sareng sababaraha jinis integrasi Asterisk, tapi kuring henteu pernah ningali fitur ieu di mana waé. Kuring reuwas teu saurang ogé ngajelaskeun metoda ieu interacting jeung PBX. Ieu malah utamana mangpaat pikeun néangan informasi ngeunaan topik ieu: aya praktis nanaon atawa dipaké pikeun tugas lengkep béda.

WEB AMI - sato galak naon?

Nambahkeun hiji pilihan diaktipkeun wéb pikeun berkas manager.conf nyadiakeun aksés pinuh ka manajemén ATS via web. Kabéh paréntah sadia ngaliwatan AMI biasa ayeuna dina web, anjeun tiasa ngadangukeun acara ti PBX via stop kontak a. Prinsip operasi teu béda ti konsol AMI. Saatos ngaktipkeun pilihan ieu, anjeun tiasa ngahubungi PBX di alamat ieu:

https://ats:8089/manager — halaman wéb kalayan antarmuka anu saderhana pikeun nguji sareng ngirim pamundut sacara manual. Sadaya réspon diformat kana HTML anu tiasa dibaca. Teu cocog pisan pikeun ngawaskeun.
https://ats:8089/rawman - kaluaran téks wungkul, format sarupa konsol AMI
https://ats:8089/mxml - kaluaran téks wungkul, dina format XML. Cocog jeung urang!

Kumaha nyambungkeun Zabbix sareng Asterisk out of the box

Teras kuring mikir: "Ieu solusina! Ayeuna sagalana bakal siap! Gampang-peezy lemon squeezey,” tapi teuing mimiti pikeun girang. Pikeun kéngingkeun inpormasi anu urang peryogikeun, cekap nganggo pamundut GET kalayan tindakan anu diperyogikeun aksi, nu dina respon mulih xml kalawan daptar sadaya registrations jeung status maranéhanana. Ieu sadayana hébat, tapi anjeun peryogi otorisasi pikeun nginget sési ti cookie. Lamun anjeun nguji dina browser nu, anjeun teu mikir ngeunaan prosés ieu.

Prosés otorisasina

Urang alamat heula http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, salaku respon, server ngirimkeun kami cookie kalawan sési otorisasina. Ieu mangrupikeun pamundut 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

ngajawab:

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>

Pikeun digawé aya nu peryogi mansession_id="6f5d42c", nyaéta cookie otorisasina sorangan.
Eusi anjeun ngan ukur kedah pariksa jawabanna "Auténtikasi katampa" Salajengna, pikeun sadaya telepon ka server PBX, urang kedah nambihan cookie otorisasi kana pamundut éta.

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

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

Baca kumaha kéngingkeun cookie otorisasi sareng dianggo dina pamundut sanés di dieu: "Zabbix - ngembangna wates makro»

Pikeun nyieun elemen tracking di Zabbix I bakal ngagunakeun deteksi otomatis.

Deteksi otomatis

Pikeun ngadeteksi pendaptaran sacara otomatis sareng ngalacak status peer, anjeun kedah ngahubungi alamat ieu: https://ats:8089/mxml?action=SIPshowregistry atawa https://ats:8089/mxml?action=SIPpeers

Salaku réspon, PBX mulihkeun ka urang réspon 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>

Aya loba sampah dina respon, jadi dina preprocessing urang nyaring eta ku citakan XPath: //réspon/generik[@host]
Lajeng fun dimimitian. Pikeun damel sareng deteksi sareng nyiptakeun unsur dinamis, résponna kedah dina format JSON. XML teu dirojong pikeun deteksi otomatis.

Pikeun ngarobih XML kana JSON, kuring kedah maénkeun sakedik kalayan ngagantian otomatis, anu kuring ngadamel naskah dina JS.

Kumaha nyambungkeun Zabbix sareng Asterisk out of the box

Titik anu pikaresepeun: dina réspon ATS, sadaya parameter dikurilingan ku tanda petik tunggal, sareng saatos nerapkeun citakan. //réspon/generik[@host] aranjeunna diganti ku ganda.

Pikeun nyiptakeun elemen, kami nganggo variabel tina réspon XML (ayeuna JSON).

Kumaha nyambungkeun Zabbix sareng Asterisk out of the box

SIP pendaptaran

Pikeun pendaptaran sip kami nganggo tilu variabel: ngaran pamaké, nu boga imah, palabuhan. Kuring éta senang jeung ngaran unsur [email dijaga]: 5060, Kuring geus teu kapanggih wae kaayaan dimana anjeun kedah nganggo sadayana lima variabel.

Unsur utama anu nampi inpormasi ngeunaan sadaya pendaptaran, Asterisk - AMI SIPshowregistry. Sakali menit ngajadikeun pamundut GET ka https://ats:8089/mxml?action=SIPshowregistry, nu satutasna respon data XML disalurkeun ka sadaya elemen gumantung pikeun parsing. Pikeun unggal pendaptaran kuring nyiptakeun unsur gumantung kana éta. Ieu merenah sabab kami nampa informasi up-to-date dina hiji pamundut, sarta henteu pikeun tiap pamundut misah. palaksanaan ieu ngabogaan aral signifikan - beban dina processor.

Nalika nguji nepi ka 100 elemen gumantung, Kuring teu aya bewara beban, tapi kalawan 1700 elemen, ieu masihan noticeable 15 beban kadua dina processor. Tetep ieu dina pikiran lamun boga angka nu gede ngarupakeun elemen gumantung.

Salaku hiji pilihan pikeun "nyebarkeun" beban atawa nyetel frékuénsi polling béda pikeun unsur, anjeun tiasa mindahkeun logika processing ka unggal unsur misah.

Kuring henteu nyimpen inpormasi anu ditampi dina unsur utama. Anu mimiti, kuring henteu ningali kabutuhan ieu, sareng kadua, upami résponna langkung ti 64K, maka Zabbix motong éta.

Kusabab urang ngagunakeun respon XML pinuh pikeun elemen gumantung, urang kudu meunang nilai unsur ieu dina preprocessing. Ngaliwatan XPath parantos siga kieu:
string(//respon/generik[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ kaayaan)
Pikeun status pendaptaran, kuring henteu nganggo status téks, tapi ngarobih kana bentuk angka nganggo JavaScript:

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

SIP babaturan

Ku analogi sareng pendaptaran SIP, aya unsur utama Asterisk - AMI SIPshowregistry, anu ditambahan gumantungna.

Ieu nyiptakeun dua elemen gumantung:

  • Status peer dina wangun téks
  • Waktos réspon alat - upami statusna OK, maka waktos réspon alat ditulis, upami henteu "-1"

Jalur ka unsur sorangan rada basajan XPath:

string(//respon/generik[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)

Pikeun unsur kadua I dipaké JavaScript pikeun misahkeun waktos réspon tina status peer, sabab disimpen babarengan:

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

kacindekan

Solusi out-of-the-box tiasa rumit sareng henteu langsung jelas. Ningkatkeun kalenturan sareng portabilitas antara sistem anu béda

Bagéa sareng gampang integrasi sadayana! Citakan jeung parentah pikeun nyetel GitHub.

sumber: www.habr.com

Tambahkeun komentar