Zabbix-ті жұлдызшамен қораптан қалай қосуға болады

Алдыңғы мақалада «Заббикс - макро шекараларды кеңейту» Мен сізге авторизация сеансын қалай алу керектігін және оны жергілікті хост макросына қалай ауыстыру керектігін айттым. Бұл мақалада мен Zabbix-ті жұлдызшамен сыртқы сценарийлерсіз және бағдарламалық жасақтамасыз қалай қосу керектігін айтамын.

Бұл екі жүйені «дос ету» идеясы қосымша бағдарламалық жасақтаманы немесе сценарийлерді орнатпастан бұрыннан пайда болды. Жылдам гуглинг көптеген мүмкін шешімдерді берді, мұның бәрі сценарийлерді (Pyha, Bash, Python және т. Мен мониторингті «қораптан тыс» жүзеге асырғым келді - сыртқы сценарийлерсіз және мониторинг пен PBX бар серверде қосымша бағдарламалық құрал орнатусыз.

Мен мұнымен барлығы 4 жұмыс күнін өткіздім, бірақ нәтиже оған тұрарлық болды. AMI интерфейсі арқылы жұмыс істеу, төмен деңгейді анықтау, триггерлер және ең бастысы, АТС және барлық басқа параметрлерді қосу қазір шамамен 15 минутты алады.

Zabbix 4.4 қол жетімді, Asterisk 100 нұсқасының шамамен 13 дана. Кейбір АТС-тер FreePBX веб-интерфейсімен, ал кейбіреулері жалаң консольмен, көптеген трюктермен және теру жоспары арқылы интеграциямен келеді.

АТС-тен деректерді қабылдау

Шешілуі қажет бірінші және негізгі мәселе - құрдастар мен SIP тіркеулері туралы деректерді алу. Осы мақсатта АТС-те AGI, AMI, ARI және SSH консоль интерфейстері бар. Белгілі себептерге байланысты мен қосымша модульдерді қарастырмадым.

Алдымен біз бұл аги, ами, ари деген не екенін анықтауымыз керек...

  • AGI - теру жоспарында сценарийлерді пайдалану. Негізінен қоңырауларды басқару үшін қолданылады.
  • AMI - барлық қажетті ақпаратты бере алады, Telnet сияқты 5038 порты арқылы жұмыс істейді. Бізге жарасады!
  • ARI - заманауи, сәнді, JSON. Көптеген мүмкіндіктер бар, деректер пішімі Zabbix үшін түсінікті, бірақ мен үшін бастысы жоқ: сіз жұтым тіркеуді басқара алмайсыз. Тағы бір кемшілігі, құрдастар үшін онлайн/офлайн режимінде тек екі күй бар, дегенмен көп күйлер бар және оларды диагностикалау кезінде ескеру пайдалы.
  • SSH бәрін жасай алады, бірақ кейде «қауіпсіздік себептеріне» байланысты рұқсат етілмейді. Қарастырулар әртүрлі болуы мүмкін, мен оларға кірмеймін.

Дегенмен, оның барлық кемшіліктерімен ARI барлық мониторинг қажеттіліктерінің 90% жабады.

Zabbix және Telnet - менің көңілім қалды

Мен AMI-ді жақсы білемін, бір кездері мен қашықтағы кеңселер бойынша бөлімшелермен сөйлесулердегі шығындарды қадағалауды, қоңырауларды басқаруды және т.б. жүзеге асырдым. Telnet көмегімен бәрі де анық: қосылымды ашыңыз, пәрмендерді жіберіңіз және жауапты оқыңыз. Мен солай істедім, бірақ нәтиже көңілімді қалдырды.

Zabbix-тегі Telnet Linux консоліндегі сияқты емес, ол сәл қарапайым және логин/пароль сияқты стандартты авторизацияға бейімделген. Авторизация логикасы басқа болса және логин/пароль жұбына сұрау болмаса, қате орын алады. Рұқсат ету талабын айналып өтудің нәтижесіз әрекеттерінен кейін Telnet модулінің бастапқы кодын қарау пайдалы болды.

Дәстүрлі логин мен пароль сұрауы болмайынша, алға жылжымайтынымды түсіндім. Тек көңіл көтеру үшін мен кодтан авторизацияға қатысты барлық нәрсені алып тастадым және бәрін қайта құрдым. Жұмыс істейді! Бірақ ол талаптарға сай келмейді. Ілгері жүру…

Іздеуге қайта оралайық

Мен ARI құжаттамасын қайта оқыдым, қосымша сынақтарды өткіздім - мұнда ешқандай жұтым тіркеулері жоқ. Той бар, әңгіме бар, шалбар бар, бірақ тіркеу жоқ. Бір кезде мен тіпті ойладым, бізге шынымен де лашын тіркеу керек пе?

Күлкілі кездейсоқтықпен, осы уақытта пайдаланушыдан шығыс қоңырауларға қатысты мәселе бар тағы бір сұрау түседі. Мәселе мынада болды: жұтуды тіркеу қатып қалды және модульді қайта жүктеу арқылы шешілді.

asterisk -rx "sip reload"

Интернет арқылы AMI-ге қол жеткізу тамаша болар еді: бұл барлық мәселелерді шешеді деп ойладым. Мен осы бағытта қазуды бастаймын, және сөзбе-сөз бірінші іздеу жолы ресми жұлдызша құжаттамасына апарады, ол менің тапсырмаларым үшін опция бар екенін айтады. веб-қосылған файлда /etc/asterisk/manager.confбөлімінде ИӘ күйіне орнатылуы керек [жалпы]

Осыдан кейін пішіннің тұрақты веб-сұранысы арқылы http://ats:8089/mxml?action=SIPshowregistry біз барлық қажетті ақпаратты аламыз.

FreePBX интерфейсін пайдаланған кезде бұл опцияны веб арқылы қоса алмайсыз, оны manager.conf файлына өзгертулер енгізу арқылы консоль арқылы қосу керек. FreePBX оны конфигурацияға өзгертулер веб арқылы енгізілгенде өшірмейді.

Мен ұзақ уақыт бойы Жұлдызша интеграциясының әртүрлі түрлерімен жұмыс істедім, бірақ бұл мүмкіндікті еш жерде көрген емеспін. Мені таң қалдырды, бұл АТС-пен әрекеттесу әдісін ешкім сипаттамайды. Бұл тақырып бойынша ақпаратты іздеу тіпті пайдалы болды: іс жүзінде ештеңе жоқ немесе ол мүлдем басқа тапсырмалар үшін пайдаланылды.

WEB AMI - қандай аң?

Опция қосу веб-қосылған файлға manager.conf веб арқылы АТС басқаруына толық қол жеткізуді қамтамасыз етті. Кәдімгі AMI арқылы қол жетімді барлық пәрмендер қазір интернетте, сіз розетка арқылы PBX оқиғаларын тыңдай аласыз. Жұмыс принципі AMI консольінен еш айырмашылығы жоқ. Осы опцияны іске қосқаннан кейін сіз келесі мекенжайлар бойынша АТС-ке хабарласа аласыз:

https://ats:8089/manager — сұрауларды тестілеуге және қолмен жіберуге арналған қарапайым интерфейсі бар веб-бет. Барлық жауаптар оқылатын HTML форматында пішімделген. Бақылау үшін өте қолайлы емес.
https://ats:8089/rawman — тек мәтінді шығару, AMI консольіне ұқсас пішім
https://ats:8089/mxml - тек XML пішімінде мәтінді шығару. Бізге жарасады!

Zabbix-ті жұлдызшамен қораптан қалай қосуға болады

Сонда мен ойладым: «Міне, шешім! Енді бәрі дайын болады! Жеңіл пияз лимон сығу», бірақ қуануға әлі ерте еді. Бізге қажетті ақпаратты алу үшін қажетті әрекеті бар GET сұрауын пайдалану жеткілікті іс-шаралар, ол жауап ретінде барлық тіркеулердің тізімі және олардың күйі бар xml қайтарады. Мұның бәрі тамаша, бірақ cookie файлындағы сеансты есте сақтау үшін сізге авторизация қажет. Браузерде тестілеу кезінде сіз бұл процесс туралы ойламайсыз.

Авторизациялау процесі

Алдымен мекен-жайды анықтаймыз http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, жауап ретінде сервер бізге авторизация сеансы бар cookie файлын жібереді. 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", яғни авторизация cookie файлының өзі.
Мазмұнды тек жауапты тексеру керек »Аутентификация қабылданды" Әрі қарай, PBX серверіне барлық қоңыраулар үшін сұрауға авторизация cookie файлын қосуымыз керек.

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

Жауап ретінде АТС бізге 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 тізілімі

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 тіркеулеріне ұқсастық бойынша, жұлдызшаның негізгі элементі - 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.

Ақпарат көзі: www.habr.com

пікір қалдыру