Чӣ тавр Zabbix-ро бо ситорача аз қуттӣ пайваст кардан мумкин аст

Дар мақолаи гузашта "Zabbix - васеъ кардани сарҳадҳои макро" Ман ба шумо гуфтам, ки чӣ тавр сессияи иҷозатро қабул кунед ва онро ба макроси мизбони маҳаллӣ иваз кунед. Дар ин мақола ман ба шумо мегӯям, ки чӣ тавр пайваст кардани Zabbix бо Asterisk бе скриптҳои беруна ва нармафзор.

Идеяи «дӯстӣ пайдо кардани» ин ду система кайҳо пеш, бе насб кардани нармафзори иловагӣ ё скрипт таваллуд шудааст. Гуглинги зуд бисёр ҳалли имконпазирро дод, ҳамааш аз он иборат аст, ки скриптҳоро (дар Pyha, Bash, Python ва ғайра) ба сервер бор кунед ва шумо хушбахт хоҳед буд. Ман мехостам мониторинги "аз қуттӣ" - бе скриптҳои беруна ва насби нармафзори иловагӣ дар сервер бо мониторинг ва PBX -ро амалӣ кунам.

Ман бо ин ҳамагӣ 4 рӯзи корӣ сарф кардам, аммо натиҷа ба он меарзад. Кор тавассути интерфейси AMI, муайянкунии сатҳи паст, триггерҳо ва муҳимтар аз ҳама, пайваст кардани PBX ва ҳама танзимоти дигар ҳоло тақрибан 15 дақиқа вақтро мегирад.

Zabbix 4.4 дастрас аст, тақрибан 100 дона Asterisk версияи 13. Баъзе PBX-ҳо бо веб-интерфейси FreePBX меоянд, баъзеҳо бо консоли бараҳна, як қатор ҳилаҳо ва ҳамгироӣ тавассути рақамгузорӣ.

Гирифтани маълумот аз АТС

Нуктаи аввал ва асосие, ки бояд ҳал карда шавад, гирифтани маълумот дар бораи ҳамсолон ва сабти SIP мебошад. Бо ин мақсад, PBX дорои интерфейсҳои консолҳои AGI, AMI, ARI ва SSH мебошад. Бо сабабҳои маълум, ман модулҳои иловагиро баррасӣ накардам.

Аввалан мо бояд бифаҳмем, ки ин аги, ами, ари чист...

  • AGI - бо истифода аз скриптҳо дар dialplan. Асосан барои идоракунии зангҳо истифода мешавад.
  • AMI - метавонад ҳама маълумоти заруриро пешниҳод кунад, тавассути порти 5038, ба монанди Telnet кор мекунад. Ба мо мувофиқ аст!
  • ARI - муосир, муд, JSON. Имкониятҳои зиёд вуҷуд доранд, формати маълумот барои Zabbix фаҳмо аст, аммо барои ман чизи асосӣ нест: шумо сабти сипро назорат карда наметавонед. Камбудии дигар ин аст, ки барои ҳамсолон танҳо ду ҳолати онлайн/офлайн мавҷуд аст, гарчанде ки штатҳо зиёданд ва ҳангоми ташхис ба назар гирифтани онҳо муфид аст.
  • SSH ҳама чизро карда метавонад, аммо баъзан бо сабаби "сабабҳои амниятӣ" иҷозат дода намешавад. Мулоҳизаҳо метавонанд гуногун бошанд, ман ба онҳо намеравам.

Аммо, бо тамоми камбудиҳои худ, ARI 90% тамоми ниёзҳои мониторингро фаро мегирад.

Zabbix ва Telnet - ноумедии ман

Ман AMI-ро хуб медонам; дар як вақт ман пайгирии талафотро дар гуфтугӯҳо бо шӯъбаҳо аз ҷониби идораҳои дурдаст, идоракунии зангҳо ва ғайра амалӣ мекардам. Бо Telnet, ҳама чиз низ хеле равшан аст: пайвастро кушоед, фармонҳоро фиристед ва ҷавобро хонед. Ман ин корро кардам, аммо натиҷа маро ноумед кард.

Telnet дар Zabbix ба консолҳои Linux монанд нест, он каме соддатар аст ва барои иҷозати стандартӣ, ба монанди ворид / парол мувофиқ аст. Агар мантиқи авторизатсия гуногун бошад ва дархост барои ҷуфти логин/парол вуҷуд надошта бошад, хатогӣ рух медиҳад. Пас аз кӯшишҳои бефоида барои гузаштан аз талаботи иҷозат, дидан ба коди сарчашмаи модули Telnet муфид буд.

Ман фаҳмидам, ки то дархости анъанавии логин ва парол вуҷуд надошта бошад, ман пеш намеравам. Танҳо барои фароғат, ман ҳама чизҳои марбут ба авторизатсияро аз код хориҷ кардам ва ҳама чизро аз нав ҷамъ кардам. Кор мекунад! Аммо он ба талаб чавоб дода наметавонад. Ба пеш…

Биёед ба ҷустуҷӯ баргардем

Ман ҳуҷҷатҳои ARI-ро бори дигар хондам, санҷишҳои иловагиро гузаронидам - ​​дар ин ҷо ягон сабти сип вуҷуд надорад. Зиёфат ҳаст, сӯҳбат ҳаст, бричӣ ҳаст, аммо қайд нест. Дар баъзе мавридҳо ман ҳатто фикр мекардам, ки оё ба мо воқеан ба қайди туҳфа лозим аст?

Бо як тасодуфи хандаовар, дар айни замон дархости дигар аз корбар бо мушкили зангҳои содиротӣ меояд. Мушкилот дар он буд, ки бақайдгирии сип ях баста буд ва танҳо бо барқароркунии модул ҳал карда шуд.

asterisk -rx "sip reload"

Дастрасӣ ба AMI тавассути веб хеле хуб мебуд: ин ҳама мушкилотро ҳал мекунад, ман фикр мекардам. Ман дар ин самт кофтанро оғоз мекунам ва аслан хати аввалини ҷустуҷӯ ба ҳуҷҷатҳои расмии Asterisk оварда мерасонад, ки дар он гуфта мешавад, ки варианти вазифаҳои ман вуҷуд дорад. веб фаъол карда шудааст дар файл /etc/asterisk/manager.conf, ки бояд ба ҲА муқаррар карда шавад, дар бахш [умумӣ]

Пас аз ин, тавассути дархости мунтазами веб форма http://ats:8089/mxml?action=SIPshowregistry хамаи маълумоти заруриро мегирем.

Ҳангоми истифодаи интерфейси FreePBX, шумо ин хосиятро тавассути веб фаъол карда наметавонед; шумо бояд онро тавассути консол тавассути ворид кардани тағирот ба файли manager.conf фаъол созед. Ҳангоми тағир додани конфигуратсия тавассути веб FreePBX онро нест намекунад.

Ман муддати тӯлонӣ бо намудҳои гуногуни интегратсияҳои Asterisk кор кардам, аммо ман ҳеҷ гоҳ ин хусусиятро дар ягон ҷо надидаам. Ман ҳайрон шудам, ки ҳеҷ кас ин усули ҳамкорӣ бо АТС-ро тавсиф намекунад. Ҷустуҷӯи маълумот дар ин мавзӯъ ҳатто муфид буд: амалан ҳеҷ чиз нест ё он барои вазифаҳои тамоман дигар истифода мешуд.

WEB AMI - чӣ гуна ҳайвони ваҳшӣ?

Илова кардани вариант веб фаъол карда шудааст файл кардан manager.conf дастрасии пурра ба идоракунии ATS тавассути веб таъмин. Ҳама фармонҳое, ки тавассути AMI муқаррарӣ дастрасанд, ҳоло дар интернет мавҷуданд, шумо метавонед рӯйдодҳоро аз PBX тавассути розетка гӯш кунед. Принсипи кор аз консолҳои AMI фарқ надорад. Пас аз фаъол кардани ин хосият, шумо метавонед ба PBX бо суроғаҳои зерин муроҷиат кунед:

https://ats:8089/manager — саҳифаи интернетӣ бо интерфейси оддӣ барои санҷиш ва ба таври дастӣ фиристодани дархостҳо. Ҳама ҷавобҳо ба HTML хондашаванда формат карда мешаванд. Барои мониторинг чандон мувофиқ нест.
https://ats:8089/rawman — танҳо баромади матн, формати монанд ба консол AMI
https://ats:8089/mxml - танҳо баромади матн, дар формати XML. Ба мо мувофиқ аст!

Чӣ тавр Zabbix-ро бо ситорача аз қуттӣ пайваст кардан мумкин аст

Он гоҳ ман фикр кардам: «Ин аст ҳалли! Акнун ҳама чиз омода хоҳад шуд! лимуи осоиш-пез», вале хурсанд шудан барвакт буд. Барои ба даст овардани маълумоти ба мо лозим аст, истифодаи дархости GET бо амали зарурӣ кифоя аст амал, ки дар ҷавоб xml-ро бо рӯйхати ҳамаи сабти номҳо ва ҳолати онҳо бармегардонад. Ин ҳама олиҷаноб аст, аммо барои дар хотир нигоҳ доштани сессия аз куки ба шумо иҷозат лозим аст. Вақте ки шумо дар браузер озмоиш мекунед, шумо дар бораи ин раванд фикр намекунед.

Раванди иҷозатдиҳӣ

Аввал ба суроға муроҷиат мекунем http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, дар посух, сервер ба мо кукиеро бо сессияи авторизатсия мефиристад. Дархости 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

Ҷавоб:

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>

Барои кор кардан дар он ҷо ба шумо лозим аст mansession_id="6f5de42c", яъне худи кукии иҷозатдиҳӣ.
Мазмуни шумо танҳо бояд ҷавобро тафтиш кунед "Аутентификатсия қабул карда шуд" Минбаъд, барои ҳама зангҳо ба сервери PBX, мо бояд ба дархост кукии иҷозатдиҳӣ илова кунем.

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

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

Чӣ тавр гирифтани кукии иҷозатдиҳӣ ва истифода аз он дар дархостҳои дигар дар ин ҷо хонед: "Zabbix - васеъ кардани сарҳадҳои макро»

Барои эҷод кардани унсурҳои пайгирӣ дар Zabbix ман муайянкунии худкорро истифода хоҳам кард.

Муайянкунии худкор

Барои ба таври худкор муайян кардани бақайдгирӣ ва пайгирии ҳолати ҳамсолон, шумо бояд ба суроғаи зерин муроҷиат кунед: https://ats:8089/mxml?action=SIPshowregistry ё https://ats:8089/mxml?action=SIPpeers

Дар посух, PBX ба мо ҷавоби 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>

Дар посух партовҳои зиёде мавҷуданд, бинобар ин ҳангоми коркарди пешакӣ мо онро аз рӯи қолаб филтр мекунем XPath: //ҷавоб/умумӣ[@хост]
Он гоҳ фароғат оғоз меёбад. Барои кор бо кашф ва ба таври динамикӣ эҷод кардани унсурҳо, посух бояд дар формати JSON бошад. XML барои муайянкунии худкор дастгирӣ намешавад.

Барои табдил додани XML ба JSON, ман бояд каме бо ивазкунии худкор бозӣ кунам, ки барои он ман дар JS скрипт сохтам.

Чӣ тавр Zabbix-ро бо ситорача аз қуттӣ пайваст кардан мумкин аст

Нуктаи ҷолиб: дар посухи ATS, ҳама параметрҳо бо нохунакҳои ягона иҳота карда мешаванд ва пас аз татбиқи қолаб //ҷавоб/умумӣ[@хост] ба чои онхо дугонахо иваз карда мешаванд.

Барои сохтани унсурҳо, мо тағирёбандаҳоро аз посухи XML истифода мебарем (ҳоло JSON).

Чӣ тавр Zabbix-ро бо ситорача аз қуттӣ пайваст кардан мумкин аст

Феҳристи SIP

Барои бақайдгирии сип мо се тағирёбандаро истифода мебарем: Логин, мизбон, бандаргоҳ. Ман аз номи элемент хурсанд шудам [почтаи электронӣ ҳифз карда шудааст]: 5060, Ман ягон ҳолатеро наёфтам, ки шумо бояд ҳамаи панҷ тағирёбандаро истифода баред.

Унсури асосӣ, ки маълумотро дар бораи ҳамаи сабти номҳо қабул мекунад, Ситорача - AMI SIPshowregistry. Як маротиба дар як дақиқа он дархости GET медиҳад https://ats:8089/mxml?action=SIPshowregistry, ки пас аз он маълумоти XML ҷавоб ба ҳама унсурҳои вобаста барои таҳлил интиқол дода мешавад. Барои ҳар як бақайдгирӣ ман як унсури вобаста ба он эҷод мекунам. Ин қулай аст, зеро мо маълумоти муосирро дар як дархост мегирем, на барои ҳар як дархост. Ин татбиқ як камбудии назаррас дорад - сарбории протсессори.

Ҳангоми санҷиши то 100 унсури вобаста, ман сарбориро пайхас накардам, аммо бо 1700 элемент, ин ба протсессор бори 15 сонияро назаррас дод. Агар шумо шумораи зиёди унсурҳои вобаста дошта бошед, инро дар хотир доред.

Ҳамчун имкони "паҳн кардани" сарборӣ ё таъин кардани басомадҳои гуногуни овоздиҳӣ барои элемент, шумо метавонед мантиқи коркардро ба ҳар як элемент алоҳида интиқол диҳед.

Ман маълумоти гирифташударо дар элементи асосӣ нигоҳ намедорам. Аввалан, ман ба ин зарурат намебинам ва дуюм, агар посух аз 64K зиёд бошад, пас Zabbix онро қатъ мекунад.

Азбаски мо ҷавоби пурраи XML-ро барои унсури вобаста истифода мебарем, мо бояд арзиши ин элементро дар коркарди пешакӣ гирем. Ба воситаи XPath он чунин анҷом дода мешавад:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ давлат)
Барои ҳолати бақайдгирӣ, ман статусҳои матниро истифода накардаам, балки онҳоро бо истифода аз JavaScript ба шакли рақамӣ табдил додам:

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

Ҳамсолони SIP

Дар муқоиса бо сабтҳои SIP, як унсури асосии Asterisk мавҷуд аст - AMI SIPshowregistry, ки ба он шахсони вобаста илова карда мешаванд.

Ин ду унсури вобастаро эҷод мекунад:

  • Ҳолати ҳамсол дар шакли матн
  • Вақти вокуниши дастгоҳ - агар вазъ хуб бошад, вақти вокуниши дастгоҳ навишта мешавад, дар акси ҳол "-1"

Роҳ ба худи элемент каме соддатар аст XPath:

сатр(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)

Барои унсури дуюм ман JavaScript-ро барои ҷудо кардан истифода кардам вақти вокуниш аз мақоми ҳамсол, зеро онҳо якҷоя нигоҳ дошта мешаванд:

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

хулоса

Ҳалли берун аз қуттӣ метавонад мураккаб бошад ва фавран равшан нест. Тасвирӣ ва интиқолпазириро байни системаҳои гуногун афзоиш медиҳад

Интегратсияи хушбахт ва осон ба ҳама! Шаблон ва дастурҳо барои насб GitHub.

Манбаъ: will.com

Илова Эзоҳ