Ing artikel sadurunge
Gagasan kanggo "nggawe kanca" saka rong sistem kasebut wis suwe, tanpa nginstal piranti lunak utawa skrip tambahan. A googling cepet ngasilaken akeh solusi bisa, kabeh nggodhok mudhun kanggo kasunyatan sing upload Tulisan (ing Pyha, Bash, Python, etc.) kanggo server, lan sampeyan bakal seneng. Aku pengin ngetrapake pemantauan "metu saka kothak" - tanpa skrip eksternal lan nginstal piranti lunak tambahan ing server kanthi pemantauan lan PBX.
Aku ngginakaken total 4 apa dina karo iki, nanging asil worth iku. Nggarap antarmuka AMI, deteksi tingkat rendah, pemicu, lan sing paling penting, nyambungake PBX lan kabeh setelan liyane saiki butuh udakara 15 menit.
Zabbix 4.4 kasedhiya, kira-kira 100 potongan Asterisk versi 13. Sawetara PBXs teka karo antarmuka web FreePBX, sawetara karo console gundhul, Bunch saka trik lan integrasi liwat dialplan a.
Nampa data saka PBX
Titik pisanan lan utama sing kudu dirampungake yaiku entuk data babagan peer lan registrasi SIP. Kanggo maksud iki, PBX nduweni antarmuka konsol AGI, AMI, ARI lan SSH. Kanggo alasan sing jelas, aku ora nganggep modul tambahan.
Pisanan kita kudu ngerteni apa agi, ami, ari iki ...
- AGI - nggunakake skrip ing dialplan. Utamane digunakake kanggo manajemen telpon.
- AMI - bisa nyedhiyani kabeh informasi sing perlu, dianggo liwat port 5038, padha Telnet. Cocok karo kita!
- ARI - modern, modis, JSON. Ana akeh kemungkinan, format data bisa dingerteni kanggo Zabbix, nanging kanggo aku ora ana sing utama: sampeyan ora bisa ngontrol registrasi sip. Kerugian liyane yaiku kanggo kanca-kanca mung ana rong negara online / offline, sanajan ana luwih akeh negara lan migunani kanggo njupuk nalika diagnosa.
- SSH bisa nindakake kabeh, nanging kadhangkala ora diidini amarga "alasan keamanan". Pertimbangan bisa uga beda, aku ora bakal mlebu.
Nanging, kanthi kabeh kekurangane, ARI nyakup 90% kabeh kabutuhan pemantauan.
Zabbix lan Telnet - kuciwo
Aku ngerti AMI kanthi apik; ing sawijining wektu aku ngetrapake pelacakan kerugian ing obrolan karo divisi dening kantor terpencil, manajemen telpon, lsp. Kanthi Telnet, kabeh uga cetha banget: mbukak sambungan, ngirim printah lan maca respon. Mekaten ingkang kula tindakaken, nanging asilipun nguciwani kula.
Telnet ing Zabbix ora padha karo konsol Linux, luwih prasaja lan disesuaikan kanggo wewenang standar kayata login / sandhi. Yen logika wewenang beda, lan ora ana panjalukan kanggo login / sandhi pasangan, ana kesalahan. Sawise usaha tanpa guna kanggo ngliwati syarat wewenang, migunani kanggo ndeleng kode sumber modul Telnet.
Aku nyadari yen nganti ana panjalukan login lan sandhi tradisional, aku ora bakal maju. Mung kanggo seneng-seneng, Aku dibusak kabeh related kanggo wewenang saka kode lan reassembled kabeh. Nyambut gawe! Nanging ora nyukupi syarat. Terusnaβ¦
Ayo bali menyang panelusuran
Aku maca maneh dokumentasi ARI, nglakokake tes tambahan - ora ana registrasi sip ing kene. Ana slametan, ana obrolan, ana sungsang, nanging ora ana registrasi. Ing sawetara titik aku malah mikir, apa kita pancene kudu registrasi manuk hering?
Kanthi kebetulan sing lucu, ing wektu iki panjaluk liyane teka saka pangguna, kanthi masalah karo telpon metu. Masalahe yaiku registrasi sip wis beku lan ditanggulangi kanthi reboot modul kasebut.
asterisk -rx "sip reload"
Iku bakal apik kanggo ngakses AMI liwat web: sing bakal ngatasi kabeh masalah, Aku panginten. Aku miwiti ngeduk arah iki, lan secara harfiah baris telusuran pisanan ndadΓ©kakΓ© menyang dokumentasi Asterisk resmi, kang ngandika ana pilihan kanggo tugas-tugasku. webenabled ing file /etc/asterisk/manager.conf, sing kudu disetel menyang YES, ing bagean kasebut [umum]
Sawise iki, liwat request web biasa saka formulir
Nalika nggunakake antarmuka FreePBX, sampeyan ora bisa ngaktifake pilihan iki liwat web, sampeyan kudu ngaktifake liwat console dening nggawe owah-owahan menyang manager.conf file. FreePBX ora mbusak nalika owah-owahan konfigurasi digawe liwat web.
Aku wis kerjo karo macem-macem integrasi Asterisk kanggo dangu, nanging aku wis tau ndeleng fitur iki kasebut ing ngendi wae. Aku kaget amarga ora ana sing nerangake cara sesambungan karo PBX iki. Malah luwih migunani kanggo nggoleki informasi babagan topik iki: ora ana apa-apa utawa digunakake kanggo tugas sing beda-beda.
WEB AMI - kewan apa?
Nambahake pilihan webenabled kanggo file manager.conf nyedhiyakake akses lengkap menyang manajemen ATS liwat web. Kabeh printah kasedhiya liwat AMI biasa saiki ing web, sampeyan bisa ngrungokake acara saka PBX liwat soket. Prinsip operasi ora beda karo konsol AMI. Sawise ngaktifake pilihan iki, sampeyan bisa ngubungi PBX ing alamat ing ngisor iki:
Aku banjur mikir: βIki solusine! Saiki kabeh bakal siap! Meres lemon sing gampang ngelak, "nanging wis suwe banget kanggo bungah. Kanggo entuk informasi sing dibutuhake, cukup nggunakake panjaluk GET kanthi tumindak sing dibutuhake tumindak, sing nanggepi ngasilake xml kanthi dhaptar kabeh registrasi lan statuse. Iki kabeh apik, nanging sampeyan butuh wewenang kanggo ngelingi sesi saka cookie. Nalika sampeyan nyoba ing browser, sampeyan ora mikir babagan proses iki.
Proses wewenang
Pisanan kita alamat alamat
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
Jawaban:
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>
Kanggo bisa ana sampeyan kudu omah_id="6f5d42c", yaiku cookie wewenang dhewe.
Isi sampeyan mung kudu mriksa jawaban "Otentikasi ditampa" Sabanjure, kanggo kabeh telpon menyang server PBX, kita kudu nambah cookie wewenang kanggo panyuwunan.
https://ats:8089/mxml?action=SIPpeers
Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"
Waca carane njaluk cookie wewenang lan gunakake ing panjalukan liyane ing kene: "
Kanggo nggawe unsur nelusuri ing Zabbix aku bakal nggunakake deteksi otomatis.
Deteksi otomatis
Kanggo ndeteksi registrasi lan nglacak status peer kanthi otomatis, sampeyan kudu ngubungi alamat ing ngisor iki:
Kanggo nanggepi, PBX ngasilake respon 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>
Ana akeh sampah ing respon, supaya ing preprocessing kita nyaring miturut cithakan XPath: //respon/generik[@host]
Banjur kesenengan diwiwiti. Kanggo nggarap deteksi lan nggawe unsur kanthi dinamis, respon kudu ana ing format JSON. XML ora didhukung kanggo deteksi otomatis.
Kanggo ngowahi XML dadi JSON, aku kudu muter sethithik karo panggantos otomatis, sing aku nggawe skrip ing JS
Titik menarik: ing respon ATS, kabeh paramèter diubengi kuotasi siji, lan sawise nglamar cithakan //respon/generik[@host] padha diganti dening pindho.
Kanggo nggawe unsur, kita nggunakake variabel saka respon XML (saiki JSON).
Daftar SIP
Kanggo registrasi sip kita nggunakake telung variabel: jeneng panganggo, inang, port. Aku seneng karo jeneng unsur [email dilindhungi]: 5060, Aku wis ora nemu kahanan apa sampeyan kudu nggunakake kabeh limang variabel.
Unsur utama sing nampa informasi babagan kabeh registrasi, Asterisk - AMI SIPshowregistry. Sawise menit nggawe panjalukan GET kanggo
Nalika nyoba nganti 100 unsur gumantung, Aku ora sok dong mirsani mbukak, nanging karo 1700 unsur, iki menehi ngelingke 15 mbukak detik ing prosesor. Elinga yen sampeyan duwe akeh unsur gumantung.
Minangka pilihan kanggo "nyebar" mbukak utawa nyetel frekuensi polling beda kanggo unsur, sampeyan bisa mindhah logika Processing kanggo saben unsur dhewe.
Aku ora nyimpen informasi sing ditampa ing unsur utama. Sepisanan, aku ora weruh perlu kanggo iki, lan sareh, yen respon luwih saka 64K, banjur Zabbix ngethok.
Awit kita nggunakake respon XML lengkap kanggo unsur gumantung, kita kudu njaluk Nilai saka unsur iki ing preprocessing. Liwat XPath rampung kaya iki:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ negara)
Kanggo status registrasi, aku ora nggunakake status teks, nanging diowahi dadi formulir numerik nggunakake JavaScript:
switch(value) {
case 'Registered':
return 1;
case 'Unregistered':
return 0;
default:
return -1;
}
SIP kanca
Kanthi analogi karo registrasi SIP, ana unsur utama Asterisk - AMI SIPshowregistry, sing ditambahake gumantung.
Iki nggawe rong unsur gumantung:
- Status peer ing wangun teks
- Wektu nanggepi piranti - yen status OK, banjur wektu nanggepi piranti ditulis, yen ora "-1"
Path menyang unsur dhewe iku sethitik prasaja XPath:
string(//respon/generik[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)
Kanggo unsur kapindho aku digunakake JavaScript kanggo misahake wektu nanggepi saka status peer, amarga padha disimpen bebarengan:
if(value.substring(0,2) == 'OK'){
return value.match(/(d+)/gm);
}
else {
return -1;
}
kesimpulan
Solusi out-of-the-box bisa rumit lan ora langsung jelas. Nambah keluwesan lan portabilitas ing antarane sistem sing beda
Seneng lan gampang integrasi kabeh wong! Cithakan lan instruksi kanggo nyetel
Source: www.habr.com