පෙට්ටියෙන් පිටත Asterisk සමඟ Zabbix සම්බන්ධ කරන්නේ කෙසේද

පෙර ලිපියේ "Zabbix - සාර්ව මායිම් පුළුල් කිරීම" අවසර දීමේ සැසියක් ලබාගෙන එය දේශීය සත්කාරක මැක්‍රෝ එකකට ආදේශ කරන්නේ කෙසේදැයි මම ඔබට කීවෙමි. බාහිර ස්ක්‍රිප්ට් සහ මෘදුකාංග නොමැතිව Asterisk සමඟ Zabbix සම්බන්ධ කරන්නේ කෙසේදැයි මෙම ලිපියෙන් මම ඔබට කියමි.

අතිරේක මෘදුකාංග හෝ ස්ක්‍රිප්ට් ස්ථාපනය නොකර මෙම පද්ධති දෙකෙහි "මිතුරන් ඇති කර ගැනීම" යන අදහස බොහෝ කලකට පෙර උපත ලැබීය. ඉක්මන් ගූගල් කිරීමකින් හැකි විසඳුම් බොහොමයක් ලැබුණි, ඒ සියල්ල සර්වරයට (Pyha, Bash, Python, ආදියෙහි) ස්ක්‍රිප්ට් උඩුගත කිරීම සහ ඔබ සතුටු වනු ඇත. මට අවශ්‍ය වූයේ බාහිර ස්ක්‍රිප්ට් නොමැතිව සහ අධීක්‍ෂණය සහ PBX සමඟින් සේවාදායකයේ අමතර මෘදුකාංග ස්ථාපනය කිරීම - “කොටුවෙන් පිටත” අධීක්‍ෂණය ක්‍රියාත්මක කිරීමටයි.

මම මේ සමඟ වැඩ කරන දින 4 ක් ගත කළෙමි, නමුත් ප්රතිඵලය එය වටී. AMI අතුරුමුහුණත, පහත් මට්ටමේ හඳුනාගැනීම්, ප්‍රේරක හරහා ක්‍රියා කිරීම සහ වඩාත්ම වැදගත් දෙය නම්, PBX සහ අනෙකුත් සියලුම සැකසුම් සම්බන්ධ කිරීමට දැන් මිනිත්තු 15ක් පමණ ගත වේ.

Zabbix 4.4 තිබේ, Asterisk version 100 කෑලි 13ක් පමණ ඇත. සමහර PBXs FreePBX වෙබ් අතුරු මුහුණත සමඟ පැමිණේ, සමහරක් හිස් කොන්සෝලයක්, උපක්‍රම සහ ඩයල්ප්ලෑන් එකක් හරහා ඒකාබද්ධ කිරීම.

PBX වෙතින් දත්ත ලබා ගැනීම

විසඳිය යුතු පළමු සහ ප්රධාන කරුණ වන්නේ සම වයසේ මිතුරන් සහ SIP ලියාපදිංචිය පිළිබඳ දත්ත ලබා ගැනීමයි. මෙම කාර්යය සඳහා, PBX හි 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 වෙත ප්‍රවේශ වීම ඉතා හොඳ වනු ඇත: එය සියලු ගැටලු විසඳනු ඇත, මම සිතුවෙමි. මම මෙම දිශාවට හෑරීමට පටන් ගන්නා අතර, වචනාර්ථයෙන් පළමු සෙවුම් රේඛාව නිල තරු ලකුණු ලේඛන වෙත යොමු කරයි, එය මගේ කාර්යයන් සඳහා විකල්පයක් ඇති බව පවසයි. webenabled ගොනුවේ /etc/asterisk/manager.conf, කොටසේ ඔව් ලෙස සැකසිය යුතු වේ [ජනරාල්]

මෙයින් පසු, පෝරමයේ නිතිපතා වෙබ් ඉල්ලීමක් හරහා http://ats:8089/mxml?action=SIPshowregistry අපි අවශ්ය සියලු තොරතුරු ලබා ගනිමු.

FreePBX අතුරුමුහුණත භාවිතා කරන විට, ඔබට මෙම විකල්පය වෙබය හරහා සක්‍රීය කළ නොහැක; ඔබ විසින් manager.conf ගොනුවේ වෙනස්කම් සිදු කිරීමෙන් කොන්සෝලය හරහා එය සක්‍රීය කළ යුතුය. වෙබය හරහා වින්‍යාස වෙනස් කිරීම් සිදු කරන විට FreePBX එය මකා නොදමයි.

මම දිගු කලක් විවිධ ආකාරයේ Asterisk ඒකාබද්ධ කිරීම් සමඟ වැඩ කර ඇත, නමුත් මෙම විශේෂාංගය කිසි තැනක සඳහන් කර ඇති බව මම දැක නැත. PBX සමඟ අන්තර්ක්‍රියා කිරීමේ මෙම ක්‍රමය කිසිවෙකු විස්තර නොකිරීම ගැන මම පුදුමයට පත් විය. මෙම මාතෘකාව පිළිබඳ තොරතුරු සොයා බැලීම පවා විශේෂයෙන් ප්රයෝජනවත් විය: ප්රායෝගිකව කිසිවක් නැත හෝ එය සම්පූර්ණයෙන්ම වෙනස් කාර්යයන් සඳහා භාවිතා කරන ලදී.

WEB AMI - මොන වගේ මෘගයෙක්ද?

විකල්පයක් එකතු කිරීම webenabled ගොනු කිරීමට manager.conf වෙබය හරහා ATS කළමනාකරණයට සම්පූර්ණ ප්‍රවේශය සපයා ඇත. සාමාන්‍ය AMI හරහා ලබා ගත හැකි සියලුම විධාන දැන් වෙබයේ ඇත, ඔබට සොකට් එකක් හරහා PBX වෙතින් සිදුවීම් වලට සවන් දිය හැක. මෙහෙයුම් මූලධර්මය කොන්සෝලය AMI වලින් වෙනස් නොවේ. මෙම විකල්පය සක්රිය කිරීමෙන් පසු, ඔබට පහත ලිපිනයන්හිදී PBX සම්බන්ධ කර ගත හැක:

https://ats:8089/manager - ඉල්ලීම් පරීක්ෂා කිරීම සහ අතින් යැවීම සඳහා සරල අතුරු මුහුණතක් සහිත වෙබ් පිටුවකි. සියලුම ප්‍රතිචාර කියවිය හැකි HTML වලට හැඩතල ගන්වා ඇත. නිරීක්ෂණය සඳහා ඉතා සුදුසු නොවේ.
https://ats:8089/rawman - පෙළ ප්‍රතිදානය පමණක්, කොන්සෝල AMI ආකෘතියට සමාන ආකෘතිය
https://ats:8089/mxml - පෙළ ප්‍රතිදානය පමණක්, XML ආකෘතියෙන්. අපට ගැලපේ!

පෙට්ටියෙන් පිටත Asterisk සමඟ Zabbix සම්බන්ධ කරන්නේ කෙසේද

ඊට පස්සේ මම හිතුවා: “මේක තමයි විසඳුම! දැන් සියල්ල සූදානම් වනු ඇත! Easy-peezy Lemon squeezey,” නමුත් එය ප්‍රීති වීමට ඉක්මන් වැඩිය. අපට අවශ්ය තොරතුරු ලබා ගැනීම සඳහා, අවශ්ය ක්රියාමාර්ගය සමඟ 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>

ප්‍රතිචාරයේ කුණු ගොඩක් ඇත, එබැවින් පෙර සැකසීමේදී අපි එය අච්චුවකින් පෙරන්නෙමු එක්ස්පාත්: //ප්‍රතිචාර/සාමාන්‍ය[@host]
එවිට විනෝදය ආරම්භ වේ. අනාවරණය සමඟ වැඩ කිරීමට සහ මූලද්‍රව්‍ය ගතිකව නිර්මාණය කිරීමට, ප්‍රතිචාරය JSON ආකෘතියෙන් විය යුතුය. XML ස්වයංක්‍රීය හඳුනාගැනීම් සඳහා සහය නොදක්වයි.

XML JSON බවට පරිවර්තනය කිරීමට, මට ස්වයංක්‍රීය ප්‍රතිස්ථාපනය සමඟ ටිකක් සෙල්ලම් කිරීමට සිදු විය, ඒ සඳහා මම JS හි ස්ක්‍රිප්ට් එකක් සෑදුවෙමි.

පෙට්ටියෙන් පිටත Asterisk සමඟ Zabbix සම්බන්ධ කරන්නේ කෙසේද

සිත්ගන්නා කරුණක්: ATS ප්‍රතිචාරයේ, සියලුම පරාමිති තනි උද්ධෘත වලින් වට වී ඇති අතර අච්චුව යෙදීමෙන් පසුව //ප්‍රතිචාර/සාමාන්‍ය[@host] ඒවා ද්විත්ව ඒවා මගින් ප්රතිස්ථාපනය වේ.

මූලද්‍රව්‍ය සෑදීමට, අපි XML ප්‍රතිචාරයෙන් (දැන් JSON) විචල්‍ය භාවිතා කරමු.

පෙට්ටියෙන් පිටත Asterisk සමඟ Zabbix සම්බන්ධ කරන්නේ කෙසේද

SIP රෙජිස්ට්රි

සිප් ලියාපදිංචිය සඳහා අපි විචල්‍ය තුනක් භාවිතා කරමු: පරිශීලක නාමය, සත්කාරකය, වරාය. මූලද්රව්යයේ නම ගැන මම සතුටු විය [විද්‍යුත් ආරක්‍ෂිත]: 5060, ඔබට විචල්‍ය පහම භාවිතා කිරීමට අවශ්‍ය කිසිදු තත්වයක් මම සොයාගෙන නොමැත.

සියලුම ලියාපදිංචි කිරීම් පිළිබඳ තොරතුරු ලැබෙන ප්‍රධාන අංගය, තරු ලකුණ - AMI SIPshowregistry. විනාඩියකට වරක් එය GET ඉල්ලීමක් කරයි https://ats:8089/mxml?action=SIPshowregistry, පසුව ප්‍රතිචාර XML දත්ත විග්‍රහ කිරීම සඳහා සියලු යැපෙන මූලද්‍රව්‍ය වෙත යවනු ලැබේ. එක් එක් ලියාපදිංචිය සඳහා මම එය මත රඳා පවතින මූලද්රව්යයක් නිර්මාණය කරමි. මෙය පහසු වන්නේ අපට යාවත්කාලීන තොරතුරු එක් ඉල්ලීමකින් ලැබෙන නිසා මිස එක් එක් ඉල්ලීම සඳහා වෙන වෙනම නොවේ. මෙම ක්රියාත්මක කිරීම සැලකිය යුතු පසුබෑමක් ඇත - ප්රොසෙසරය මත පැටවීම.

පරායත්ත මූලද්‍රව්‍ය 100ක් දක්වා පරීක්‍ෂා කිරීමේදී, මම බර නොදැක්කෙමි, නමුත් මූලද්‍රව්‍ය 1700ක් සමඟ, මෙය ප්‍රොසෙසරයේ තත්පර 15 ක සැලකිය යුතු බරක් ලබා දුන්නේය. ඔබට රඳා පවතින මූලද්රව්ය විශාල සංඛ්යාවක් තිබේ නම් මෙය මතක තබා ගන්න.

බර "පැතිරීමට" හෝ මූලද්‍රව්‍යයක් සඳහා විවිධ ඡන්ද සංඛ්‍යාත සැකසීමට විකල්පයක් ලෙස, ඔබට එක් එක් මූලද්‍රව්‍ය වෙත සැකසුම් තර්කය වෙන වෙනම ගෙන යා හැක.

මම ලැබුණු තොරතුරු ප්රධාන අංගයේ ගබඩා නොකරමි. පළමුව, මම මේ සඳහා අවශ්යතාවයක් නොදකිමි, දෙවනුව, ප්රතිචාරය 64K ට වඩා වැඩි නම්, Zabbix එය කපා දමයි.

අපි පරායත්ත මූලද්‍රව්‍ය සඳහා සම්පූර්ණ XML ප්‍රතිචාරයක් භාවිතා කරන බැවින්, පෙර සැකසුම් කිරීමේදී අපට මෙම මූලද්‍රව්‍යයේ අගය ලබා ගත යුතුය. ඔස්සේ එක්ස්පාත් එය මේ ආකාරයට සිදු කර ඇත:
string(//ප්‍රතිචාර/ජනක[@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”

මූලද්‍රව්‍යයට යන මාර්ගය මදක් සරල ය එක්ස්පාත්:

string(//ප්‍රතිචාර/සාමාන්‍ය[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@තත්ත්වය)

දෙවන අංගය සඳහා මම වෙන් කිරීමට JavaScript භාවිතා කළෙමි ප්රතිචාර කාලය සම වයසේ සිට, ඔවුන් එකට ගබඩා කර ඇති බැවින්:

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

නිගමනය

කොටුවෙන් පිටත විසඳුමක් සංකීර්ණ විය හැකි අතර වහාම පැහැදිලි නොවේ. විවිධ පද්ධති අතර නම්‍යශීලී බව සහ අතේ ගෙන යා හැකි බව වැඩි කරයි

සැමට ප්‍රීතිමත් සහ පහසු ඒකාබද්ධතාවයක්! සැකිල්ල සහ සැකසීම සඳහා උපදෙස් GitHub.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න