Hvernig á að tengja Zabbix við stjörnu úr kassanum

Í fyrri greininni "Zabbix - stækkandi þjóðhagsmörk" Ég sagði þér hvernig á að fá heimildarlotu og setja hana í staðbundið gestgjafafjölva. Í þessari grein mun ég segja þér hvernig á að tengja Zabbix við stjörnu án utanaðkomandi forskrifta og hugbúnaðar.

Hugmyndin um að „eignast vini“ þessara tveggja kerfa fæddist fyrir löngu, án þess að setja upp viðbótarhugbúnað eða forskriftir. Snögg googl gaf margar mögulegar lausnir, allt snérist það um að hlaða upp skriftunum (í Pyha, Bash, Python o.s.frv.) á netþjóninn og þú verður ánægður. Ég vildi innleiða eftirlit „úr kassanum“ - án utanaðkomandi forskrifta og setja upp viðbótarhugbúnað á þjóninum með eftirliti og PBX.

Ég eyddi samtals 4 virkum dögum í þetta en útkoman var þess virði. Það tekur nú um 15 mínútur að vinna í gegnum AMI viðmótið, lágstigsskynjun, kveikjur og síðast en ekki síst, að tengja PBX og allar aðrar stillingar.

Zabbix 4.4 er fáanlegt, um 100 stykki af Asterisk útgáfu 13. Sumar PBX koma með FreePBX vefviðmótinu, sumar með berum stjórnborði, fullt af brellum og samþættingu í gegnum hringaáætlun.

Tekið á móti gögnum frá PBX

Fyrsta og aðalatriðið sem þarf að leysa er að afla gagna um jafningja og SIP skráningar. Í þessu skyni hefur PBX AGI, AMI, ARI og SSH stjórnborðsviðmót. Af augljósum ástæðum hugsaði ég ekki um viðbótareiningar.

Fyrst þurfum við að finna út hvað þessir agi, ami, ari eru...

  • AGI - að nota forskriftir í dialplan. Aðallega notað fyrir símtalastjórnun.
  • AMI - getur veitt allar nauðsynlegar upplýsingar, virkar í gegnum höfn 5038, svipað og Telnet. Hentar okkur!
  • ARI - nútímalegt, smart, JSON. Það eru margir möguleikar, gagnasniðið er skiljanlegt fyrir Zabbix, en fyrir mig er ekkert aðalatriði: þú getur ekki stjórnað sopaskráningunni. Annar ókostur er að fyrir jafnaldra eru aðeins tvö ríki á netinu/ótengt, þó það séu fleiri ríki og það er gagnlegt að taka tillit til þeirra við greiningu.
  • SSH getur gert allt, en stundum er það ekki leyfilegt vegna „öryggisástæðna“. Hugsanir geta verið mismunandi, ég mun ekki fara út í þær.

Hins vegar, með öllum sínum göllum, tekur ARI 90% af öllum vöktunarþörfum.

Zabbix og Telnet - vonbrigði mín

Ég þekki AMI vel; á sínum tíma innleiddi ég rakningu á tapi í samtölum við deild eftir fjarskrifstofum, símtalastjórnun osfrv. Með Telnet er allt líka mjög skýrt: opnaðu tenginguna, sendu skipanirnar og lestu svarið. Það var það sem ég gerði en niðurstaðan olli mér vonbrigðum.

Telnet í Zabbix er ekki það sama og í Linux stjórnborðinu, það er aðeins einfaldara og sérsniðið fyrir hefðbundna heimild eins og innskráningu/lykilorð. Ef heimildarrökfræðin er önnur og engin beiðni er um innskráningu/lykilorð par, kemur upp villa. Eftir tilgangslausar tilraunir til að komast framhjá heimildarkröfunni var gagnlegt að skoða frumkóðann á Telnet-einingunni.

Ég áttaði mig á því að þangað til það er hefðbundin beiðni um innskráningu og lykilorð mun ég ekki halda áfram. Til gamans tók ég allt sem tengist heimild úr kóðanum og setti allt saman aftur. Virkar! En það uppfyllir ekki kröfurnar. Gjörðu svo vel…

Snúum okkur aftur að leitinni

Ég las aftur ARI skjölin, fór í viðbótarpróf - það eru engar sopaskráningar hér. Það eru veislur, það eru samtöl, það eru buxur, en það eru engar skráningar. Á einhverjum tímapunkti hugsaði ég meira að segja, þurfum við virkilega skráningu á hrægamma?

Fyrir fyndna tilviljun berst á þessari stundu önnur beiðni frá notandanum, með vandamál með úthringingar. Vandamálið var að sopaskráningin var að frjósa og var leyst með því einfaldlega að endurræsa eininguna.

asterisk -rx "sip reload"

Það væri frábært að fá aðgang að AMI á vefnum: það myndi leysa öll vandamálin, hugsaði ég. Ég byrja að grafa í þessa átt, og bókstaflega leiðir fyrsta leitarlínan að opinberu stjörnuskjölunum, sem segir að það sé möguleiki fyrir verkefnin mín vefvirkt í skrá /etc/asterisk/manager.conf, sem þarf að stilla á JÁ, í hlutanum [almennt]

Eftir þetta, í gegnum venjulega vefbeiðni á eyðublaðinu http://ats:8089/mxml?action=SIPshowregistry við fáum allar nauðsynlegar upplýsingar.

Þegar þú notar FreePBX viðmótið geturðu ekki virkjað þennan valkost í gegnum vefinn; þú þarft að virkja hann í gegnum stjórnborðið með því að gera breytingar á manager.conf skránni. FreePBX eyðir því ekki þegar stillingarbreytingar eru gerðar í gegnum vefinn.

Ég hef unnið með ýmiss konar Asterisk samþættingu í langan tíma, en ég hef aldrei séð þennan eiginleika nefndan neins staðar. Það kom mér á óvart að enginn lýsir þessari aðferð við að hafa samskipti við PBX. Það var jafnvel sérstaklega gagnlegt að leita að upplýsingum um þetta efni: það er nánast ekkert eða það var notað fyrir allt önnur verkefni.

WEB AMI - hvers konar dýr?

Bætir við valmöguleika vefvirkt að skrá manager.conf veitt fullan aðgang að stjórnun ATS í gegnum vefinn. Allar skipanir sem eru tiltækar í gegnum venjulegan AMI eru nú á vefnum, þú getur hlustað á atburði úr PBX í gegnum innstunguna. Meginreglan um rekstur er ekkert frábrugðin stjórnborðinu AMI. Eftir að hafa virkjað þennan möguleika geturðu haft samband við PBX á eftirfarandi heimilisföngum:

https://ats:8089/manager — vefsíðu með einföldu viðmóti til að prófa og senda beiðnir handvirkt. Öll svör eru sniðin í læsilegt HTML. Hentar ekki mjög vel til eftirlits.
https://ats:8089/rawman — Aðeins textaúttak, snið svipað og console AMI
https://ats:8089/mxml - Aðeins textaúttak, á XML sniði. Hentar okkur!

Hvernig á að tengja Zabbix við stjörnu úr kassanum

Þá hugsaði ég: „Þetta er lausnin! Nú verður allt tilbúið! Auðveld sítrónupressa,“ en það var of snemmt að gleðjast. Til að fá þær upplýsingar sem við þurfum er nóg að nota GET beiðni með nauðsynlegum aðgerðum aðgerð, sem sem svar skilar xml með lista yfir allar skráningar og stöðu þeirra. Þetta er allt frábært, en þú þarft leyfi til að muna lotuna úr kökunni. Þegar þú prófar í vafranum hugsarðu ekki um þetta ferli.

Heimildarferli

Fyrst tökum við upp heimilisfangið http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, sem svar sendir þjónninn okkur vafraköku með heimildarlotunni. Svona lítur HTTP beiðni út:

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

Svar:

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>

Til að vinna þar þarftu mansession_id="6f5de42c“, þ.e.a.s. heimildakökuna sjálfa.
Efni sem þú þarft bara að athuga með svarið "Auðkenning samþykkt" Næst, fyrir öll símtöl til PBX-þjónsins, þurfum við að bæta heimildaköku við beiðnina.

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

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

Lestu hvernig á að fá heimildaköku og nota hana í öðrum beiðnum hér: “Zabbix - stækkandi þjóðhagsmörk»

Til að búa til rakningarþætti í Zabbix mun ég nota sjálfvirka uppgötvun.

Sjálfvirk uppgötvun

Til að greina sjálfkrafa skráningar og fylgjast með stöðu jafningja þarftu að hafa samband við eftirfarandi heimilisfang: https://ats:8089/mxml?action=SIPshowregistry eða https://ats:8089/mxml?action=SIPpeers

Sem svar, PBX skilar okkur XML svari:

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

Það er mikið af rusli í svarinu, þannig að í forvinnslu síum við það eftir sniðmáti XPath: //svar/almennt[@gestgjafi]
Þá byrjar fjörið. Til að vinna með uppgötvun og búa til þætti á kraftmikinn hátt verður svarið að vera á JSON sniði. XML er ekki stutt fyrir sjálfvirka uppgötvun.

Til að breyta XML í JSON þurfti ég að leika mér aðeins með sjálfvirka útskiptingu, sem ég gerði handrit fyrir í JS

Hvernig á að tengja Zabbix við stjörnu úr kassanum

Áhugaverður punktur: í ATS svarinu eru allar breytur umkringdar stökum gæsalöppum og eftir að sniðmátið hefur verið beitt //svar/almennt[@gestgjafi] þeim er skipt út fyrir tvöfalda.

Til að búa til þætti notum við breytur úr XML svarinu (nú JSON)​.

Hvernig á að tengja Zabbix við stjörnu úr kassanum

SIP Registry

Fyrir sopaskráningar notum við þrjár breytur: notandanafn, gestgjafi, höfn. Ég var ánægður með nafnið á frumefninu [netvarið]: 5060, Ég hef ekki fundið neinar aðstæður þar sem þú þarft að nota allar fimm breyturnar.

Aðalþátturinn sem fær upplýsingar um allar skráningar, Stjörnumerki - AMI SIPshowregistry. Einu sinni á mínútu gerir það GET beiðni til https://ats:8089/mxml?action=SIPshowregistry, eftir það eru XML svargögnin send til allra háðra þátta fyrir þáttun. Fyrir hverja skráningu bý ég til þátt sem er háður henni. Þetta er þægilegt vegna þess að við fáum uppfærðar upplýsingar í einni beiðni en ekki fyrir hverja beiðni fyrir sig. Þessi útfærsla hefur verulegan galla - álagið á örgjörvann.

Þegar ég prófaði allt að 100 háða þætti tók ég ekki eftir álaginu, en með 1700 þáttum gaf þetta áberandi 15 sekúndna álag á örgjörvann. Hafðu þetta í huga ef þú ert með mikinn fjölda háðra þátta.

Sem valmöguleiki til að „dreifa“ álaginu eða stilla mismunandi könnunartíðni fyrir stak, geturðu fært vinnslurökfræðina á hvern þátt fyrir sig.

Ég geymi ekki mótteknar upplýsingar í aðalatriðinu. Í fyrsta lagi sé ég ekki þörfina fyrir þetta, og í öðru lagi, ef svarið er meira en 64K, þá slítur Zabbix það af.

Þar sem við notum fullt XML svar fyrir háða þáttinn, þurfum við að fá gildi þessa þáttar í forvinnslu. Í gegnum XPath það er gert svona:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ ríki)
Fyrir skráningarstöður notaði ég ekki textastöður, en breytti þeim í tölulegt form með JavaScript:

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

SIP jafnaldrar

Á hliðstæðan hátt við SIP-skráningar er aðalþáttur Asterisk - AMI SIPshowregistry, sem ósjálfráðum er bætt við.

Þetta skapar tvo háða þætti:

  • Jafningjastaða í textaformi
  • Viðbragðstími tækis - ef staðan er í lagi, þá er viðbragðstími tækisins skrifaður, annars „-1“

Leiðin að frumefninu sjálfu er aðeins einfaldari XPath:

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

Fyrir seinni þáttinn notaði ég JavaScript til að aðskilja viðbragðstími frá jafningjastöðu, þar sem þau eru geymd saman:

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

Ályktun

Lausn sem er útúr kassanum getur verið flókin og ekki strax skýr. Eykur sveigjanleika og færanleika milli mismunandi kerfa

Gleðilega og auðveld aðlögun allir! Sniðmát og leiðbeiningar um uppsetningu GitHub.

Heimild: www.habr.com

Bæta við athugasemd