Zabbix-ni yulduzcha bilan qutidan qanday ulash mumkin

Oldingi maqolada "Zabbix - makro chegaralarni kengaytirish" Men sizga avtorizatsiya seansini qanday qabul qilishni va uni mahalliy xost makrosiga almashtirishni aytdim. Ushbu maqolada men sizga Zabbix-ni yulduzcha bilan tashqi skriptlar va dasturiy ta'minotsiz qanday ulashni aytaman.

Ushbu ikki tizimni "do'stlashish" g'oyasi uzoq vaqt oldin, qo'shimcha dasturlar yoki skriptlarni o'rnatmasdan tug'ilgan. Tez googling ko'plab mumkin bo'lgan echimlarni berdi, barchasi skriptlarni (Pyha, Bash, Python va boshqalarda) serverga yuklash bilan yakunlandi va siz xursand bo'lasiz. Men tashqi skriptlarsiz va monitoring va PBX bilan serverga qo'shimcha dasturiy ta'minot o'rnatmasdan, "qutidan tashqari" monitoringni amalga oshirmoqchi edim.

Men bu bilan jami 4 ish kunini o'tkazdim, ammo natija bunga arziydi. AMI interfeysi orqali ishlash, past darajadagi aniqlash, tetiklar va eng muhimi, PBX va boshqa barcha sozlamalarni ulash endi taxminan 15 daqiqa davom etadi.

Zabbix 4.4 mavjud, taxminan 100 dona Asterisk 13 versiyasi. Ba'zi PBXlar FreePBX veb-interfeysi, ba'zilari esa yalang'och konsol, bir qancha hiylalar va dialplan orqali integratsiyaga ega.

ATSdan ma'lumotlarni qabul qilish

Yechilishi kerak bo'lgan birinchi va asosiy nuqta - bu tengdoshlar va SIP ro'yxatga olishlari to'g'risidagi ma'lumotlarni olish. Shu maqsadda ATSda AGI, AMI, ARI va SSH konsol interfeyslari mavjud. Aniq sabablarga ko'ra men qo'shimcha modullarni hisobga olmadim.

Avval bu agi, ami, ari nima ekanligini aniqlashimiz kerak...

  • AGI - dialplanda skriptlardan foydalanish. Asosan qo'ng'iroqlarni boshqarish uchun ishlatiladi.
  • AMI - barcha kerakli ma'lumotlarni taqdim eta oladi, Telnetga o'xshash 5038 port orqali ishlaydi. Bizga yarashadi!
  • ARI - zamonaviy, moda, JSON. Ko'p imkoniyatlar mavjud, ma'lumotlar formati Zabbix uchun tushunarli, lekin men uchun asosiy narsa yo'q: siz sip ro'yxatga olishni nazorat qila olmaysiz. Yana bir kamchilik shundaki, tengdoshlar uchun faqat ikkita onlayn/oflayn holat mavjud, garchi ko'proq shtatlar mavjud va tashxis qo'yishda ularni hisobga olish foydalidir.
  • SSH hamma narsani qila oladi, lekin ba'zida "xavfsizlik sabablari" tufayli ruxsat berilmaydi. Mulohazalar boshqacha bo'lishi mumkin, men ularga kirmayman.

Biroq, barcha kamchiliklari bilan ARI barcha monitoring ehtiyojlarining 90% ni qoplaydi.

Zabbix va Telnet - mening umidsizlik

Men AMIni yaxshi bilaman; bir vaqtlar men masofaviy ofislar bo'yicha bo'linmalar, qo'ng'iroqlarni boshqarish va boshqalar bilan suhbatlarda yo'qotishlarni kuzatishni amalga oshirganman. Telnet bilan hamma narsa ham juda aniq: ulanishni oching, buyruqlarni yuboring va javobni o'qing. Men shunday qildim, lekin natija meni xafa qildi.

Zabbix-dagi Telnet Linux konsolidagi kabi emas, u biroz soddaroq va login/parol kabi standart avtorizatsiya uchun mo'ljallangan. Agar avtorizatsiya mantig'i boshqacha bo'lsa va login/parol juftligi uchun so'rov bo'lmasa, xatolik yuz beradi. Avtorizatsiya talabini chetlab o'tish uchun behuda urinishlardan so'ng, Telnet modulining manba kodini ko'rib chiqish foydali bo'ldi.

An'anaviy login va parol so'rovi bo'lmaguncha, men oldinga siljmasligimni angladim. Faqat o'yin-kulgi uchun men avtorizatsiya bilan bog'liq hamma narsani koddan olib tashladim va hamma narsani qayta yig'dim. Ishlaydi! Lekin talablarga javob bermaydi. Davom etishga ruxsat…

Keling, qidiruvga qaytaylik

Men ARI hujjatlarini qayta o'qib chiqdim, qo'shimcha testlarni o'tkazdim - bu erda hech qanday ro'yxatga olish yo'q. Bayramlar bor, suhbatlar bor, shimlar bor, lekin ro'yxatga olish yo'q. Bir payt men hatto o'yladim, bizga tulporlarni ro'yxatdan o'tkazish kerakmi?

Qiziqarli tasodif bilan, ayni paytda foydalanuvchidan chiqish qo'ng'iroqlari bilan bog'liq muammo bilan yana bir so'rov keladi. Muammo shundaki, sip ro'yxatdan o'tish muzlab qoldi va modulni oddiygina qayta ishga tushirish orqali hal qilindi.

asterisk -rx "sip reload"

Internet orqali AMIga kirish juda yaxshi bo'lardi: bu barcha muammolarni hal qiladi, deb o'yladim. Men bu yo'nalishda qazishni boshlayman va tom ma'noda birinchi qidiruv qatori rasmiy Yulduzcha hujjatlariga olib keladi, bu mening vazifalarim uchun imkoniyat borligini aytadi veb-yoqilgan faylda /etc/asterisk/manager.conf, bo'limida YES ga o'rnatilishi kerak [umumiy]

Shundan so'ng, formaning muntazam veb-so'rovi orqali http://ats:8089/mxml?action=SIPshowregistry biz barcha kerakli ma'lumotlarni olamiz.

FreePBX interfeysidan foydalanganda siz ushbu parametrni internet orqali faollashtira olmaysiz, menejer.conf fayliga o'zgartirish kiritish orqali uni konsol orqali yoqishingiz kerak. Internet orqali konfiguratsiya o'zgartirilganda FreePBX uni o'chirmaydi.

Men uzoq vaqt davomida Yulduzcha integratsiyalarining har xil turlari bilan ishlaganman, lekin bu xususiyatni hech qaerda ko'rmaganman. Hech kim PBX bilan o'zaro ta'sir qilishning bunday usulini tasvirlamaganiga hayron bo'ldim. Bu mavzu bo'yicha ma'lumot izlash ayniqsa foydali bo'ldi: deyarli hech narsa yo'q yoki u butunlay boshqa vazifalar uchun ishlatilgan.

WEB AMI - qanday hayvon?

Variant qo'shish veb-yoqilgan faylga manager.conf internet orqali ATS boshqaruviga to‘liq kirishni ta’minladi. Oddiy AMI orqali mavjud bo'lgan barcha buyruqlar endi Internetda, siz rozetka orqali PBX dan voqealarni tinglashingiz mumkin. Ishlash printsipi AMI konsolidan farq qilmaydi. Ushbu parametr faollashtirilgandan so'ng, siz quyidagi manzillar bo'yicha ATS bilan bog'lanishingiz mumkin:

https://ats:8089/manager — so'rovlarni sinovdan o'tkazish va qo'lda yuborish uchun oddiy interfeysga ega veb-sahifa. Barcha javoblar o'qilishi mumkin bo'lgan HTML formatida formatlangan. Monitoring uchun juda mos emas.
https://ats:8089/rawman — faqat matn chiqishi, konsol AMI ga o'xshash format
https://ats:8089/mxml - faqat matn chiqishi, XML formatida. Bizga yarashadi!

Zabbix-ni yulduzcha bilan qutidan qanday ulash mumkin

Keyin o'yladim: “Bu yechim! Endi hamma narsa tayyor bo'ladi! Oson-peezy limon squeezey”, lekin xursand bo'lishga hali erta edi. Bizga kerakli ma'lumotlarni olish uchun kerakli harakatlar bilan GET so'rovidan foydalanish kifoya harakat, bu javobda barcha ro'yxatga olishlar ro'yxati va ularning holati bilan xml qaytaradi. Bularning barchasi ajoyib, lekin cookie-fayldan sessiyani eslab qolish uchun sizga ruxsat kerak. Brauzerda sinovdan o'tganingizda, bu jarayon haqida o'ylamaysiz.

Avtorizatsiya jarayoni

Avval manzilga murojaat qilamiz http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, bunga javoban server bizga avtorizatsiya seansi bilan kuki yuboradi. HTTP so'rovi shunday ko'rinadi:

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

Javob:

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>

U erda ishlash uchun sizga kerak mansession_id="6f5de42c", ya'ni avtorizatsiya cookie-faylining o'zi.
Tarkibni faqat javobni tekshirishingiz kerak "Autentifikatsiya qabul qilindi" Keyinchalik, PBX serveriga barcha qo'ng'iroqlar uchun so'rovga avtorizatsiya cookie-faylini qo'shishimiz kerak bo'ladi.

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

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

Avtorizatsiya cookie-faylini qanday olish va undan boshqa so‘rovlarda foydalanishni bu yerda o‘qing: “Zabbix - makro chegaralarni kengaytirish»

Zabbix-da kuzatuv elementlarini yaratish uchun men avtomatik aniqlashdan foydalanaman.

Avtomatik aniqlash

Registratsiyalarni avtomatik aniqlash va tengdosh holatlarni kuzatish uchun quyidagi manzilga murojaat qilishingiz kerak: https://ats:8089/mxml?action=SIPshowregistry yoki https://ats:8089/mxml?action=SIPpeers

Bunga javoban PBX bizga XML javobini qaytaradi:

<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>

Javobda juda ko'p axlat bor, shuning uchun oldindan ishlov berishda biz uni shablon bo'yicha filtrlaymiz XPath: //javob/generic[@host]
Keyin kulgi boshlanadi. Aniqlash bilan ishlash va elementlarni dinamik ravishda yaratish uchun javob JSON formatida bo'lishi kerak. XML avtomatik aniqlash uchun qo'llab-quvvatlanmaydi.

XML-ni JSON-ga aylantirish uchun men avtomatik almashtirish bilan biroz o'ynashim kerak edi, buning uchun men JS-da skript yaratdim.

Zabbix-ni yulduzcha bilan qutidan qanday ulash mumkin

Qiziqarli nuqta: ATS javobida barcha parametrlar bitta tirnoq bilan o'ralgan va shablonni qo'llaganingizdan so'ng //javob/generic[@host] ularning o'rniga qo'sh bo'ladi.

Elementlarni yaratish uchun biz XML javobidagi o'zgaruvchilardan foydalanamiz (hozirgi JSON).

Zabbix-ni yulduzcha bilan qutidan qanday ulash mumkin

SIP reestri

Sip ro'yxatga olish uchun biz uchta o'zgaruvchidan foydalanamiz: username, mezbon, port. Men elementning nomidan xursand bo'ldim [elektron pochta bilan himoyalangan]: 5060, Men barcha besh o'zgaruvchidan foydalanishingiz kerak bo'lgan vaziyatlarni topmadim.

Barcha ro'yxatga olishlar haqida ma'lumot oladigan asosiy element, Yulduzcha - AMI SIPshowregistr. Bir daqiqada u GET so'rovini yuboradi https://ats:8089/mxml?action=SIPshowregistry, shundan so'ng javob XML ma'lumotlari tahlil qilish uchun barcha bog'liq elementlarga uzatiladi. Har bir ro'yxatdan o'tish uchun men unga bog'liq element yarataman. Bu qulay, chunki biz har bir so'rov uchun alohida emas, balki bitta so'rovda dolzarb ma'lumotlarni olamiz. Ushbu amalga oshirish muhim kamchilikka ega - protsessorga yuk.

100 tagacha bog'liq elementlarni sinab ko'rganimda, men yukni sezmadim, lekin 1700 ta element bilan bu protsessorga sezilarli 15 soniya yuk berdi. Agar sizda ko'p miqdordagi qaram elementlar bo'lsa, buni yodda tuting.

Yukni "tarqatish" yoki element uchun turli xil so'rov chastotalarini o'rnatish varianti sifatida siz qayta ishlash mantig'ini har bir elementga alohida ko'chirishingiz mumkin.

Qabul qilingan ma'lumotni asosiy elementda saqlamayman. Birinchidan, men bunga ehtiyoj sezmayapman, ikkinchidan, agar javob 64K dan ortiq bo'lsa, Zabbix uni to'xtatadi.

Biz bog'liq element uchun to'liq XML javobidan foydalanganimiz sababli, biz ushbu elementning qiymatini oldindan ishlov berishda olishimiz kerak. orqali XPath bu shunday amalga oshiriladi:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ davlat)
Roʻyxatga olish holatlari uchun men matn holatlaridan foydalanmadim, lekin ularni JavaScript yordamida raqamli shaklga aylantirdim:

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

SIP tengdoshlari

SIP ro'yxatga olishlariga o'xshab, Asteriskning asosiy elementi - AMI SIPshowregistr mavjud bo'lib, unga qaram bo'lganlar qo'shiladi.

Bu ikkita qaram elementni yaratadi:

  • Matn ko'rinishidagi tengdosh holati
  • Qurilmaning javob vaqti - agar holat yaxshi bo'lsa, qurilmaning javob vaqti yoziladi, aks holda "-1"

Elementning o'ziga boradigan yo'l biroz oddiyroq XPath:

string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)

Ikkinchi element uchun men ajratish uchun JavaScript dan foydalandim javob vaqti tengdosh holatidan, chunki ular birgalikda saqlanadi:

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

xulosa

Chiqarilgan yechim murakkab bo'lishi mumkin va darhol aniq bo'lmaydi. Turli tizimlar o'rtasida moslashuvchanlik va portativlikni oshiradi

Hammaga baxtli va oson integratsiya! Shablon va sozlash bo'yicha ko'rsatmalar GitHub.

Manba: www.habr.com

a Izoh qo'shish