Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript
Tikhon Uskov, injineli yeqela lokudibanisa iZabbix

I-Zabbix liqonga elinokwenziwa ngokwezifiso elisetyenziselwa ukubeka esweni naluphi na uhlobo lwedatha. Ukusukela kwiinguqulelo zokuqala zeZabbix, abalawuli bokubeka iliso babenakho ukuqhuba izikripthi ezahlukeneyo nge. izenzo ukukhangela iindawo zenethiwekhi ekujoliswe kuzo. Ngelo xesha, ukuqaliswa kwezikripthi kubangele ubunzima obuninzi, kubandakanywa njengesidingo sokuxhasa izikripthi, ukuhanjiswa kwazo kwiindawo zonxibelelwano kunye neeproxies, kunye nenkxaso yeenguqulelo ezahlukeneyo.

IJavaScript yeZabbix

Ngo-Epreli ka-2019, i-Zabbix 4.2 yaziswa ngeJavaScript preprocessing. Abantu abaninzi baba nemincili malunga nombono wokuyeka ukubhala okubhaliweyo okuthatha idatha kwindawo ethile, ukuyetyisa kwaye banikezele ngefomathi uZabbix ayiqondayo, kwaye enze iitshekhi ezilula eziza kufumana idatha engekakulungeli ukugcinwa kunye nokuqhutyelwa nguZabbix, kwaye emva koko uqhubele phambili lo mjelo wedatha usebenzisa iZabbix kunye nezixhobo zeJavaScript. Ngokubambisana nokufunyanwa kwinqanaba eliphantsi kunye nezinto ezixhomekeke kwi-Zabbix 3.4, sifumene ingcamango eguquguqukayo ngokufanelekileyo yokuhlenga nokulawula idatha efunyenweyo.

Kwi-Zabbix 4.4, njengokuqhubeka okunengqiqo kokucutshungulwa kwangaphambili kwiJavaScript, indlela entsha yokwazisa iye yavela - iWebhook, engasetyenziselwa ukudibanisa ngokulula izaziso zeZabbix kunye nezicelo zeqela lesithathu.

JavaScript kunye neDuktapes

Kwakutheni ukuze kukhethwe iJavaScript kunye neDuktape? Iinketho ezahlukeneyo zeelwimi kunye neenjini zaqwalaselwa:

  • IsiLua - isiLua 5.1
  • Lua - LuaJIT
  • Javascript-Duktape
  • Javascript -JerryScript
  • I-Python ifakwe
  • Ifakwe iPerl

Iikhrayitheriya zokukhetha eziphambili yayikuxhaphaka, ukukhululeka kokuhlanganiswa kwenjini kwimveliso, ukusetyenziswa kwezixhobo eziphantsi kunye nokusebenza ngokubanzi kwe-injini, kunye nokhuseleko lokwazisa ikhowudi kolu lwimi ekubekweni iliso. Ngokusekwe kwindibaniselwano yezalathi, iJavaScript iphumelele kwinjini yeDuktape.

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript

Iikhrayitheriya zokukhetha kunye novavanyo lomsebenzi

Iimpawu zeDuktape:

β€” Umgangatho ECMAScript E5/E5.1
β€” Iimodyuli zeZabbix zeDuktape:

  • I-Zabbix.log () - ikuvumela ukuba ubhale imiyalezo enamanqanaba ahlukeneyo eenkcukacha ngokuthe ngqo kwi-log ye-Zabbix Server, eyenza kube lula ukulungelelanisa iimpazamo, umzekelo, kwi-Webhook, kunye ne-server state.
  • I-CurlHttpRequest () - ikuvumela ukuba wenze izicelo ze-HTTP kwinethiwekhi, apho ukusetyenziswa kweWebhook kusekelwe khona.
  • atob () kunye ne-btoa () - ikuvumela ukuba wenze ikhowudi kwaye uchaze imitya kwifomathi ye-Base64.

QAPHELA. I-Duktape ithobela imigangatho ye-ACME. I-Zabbix isebenzisa inguqulo ye-2015 yeskripthi. Utshintsho olulandelayo luncinci, ngoko ke alunakuhoywa..

Umlingo weJavaScript

Bonke umlingo weJavaScript ilezi kukuchwetheza okuguquguqukayo kunye nohlobo lokuphosa: umtya, amanani, kunye ne-boolean.

Oku kuthetha ukuba akukho mfuneko yokuchaza kwangaphambili ukuba loluphi uhlobo oluza kubuyisela ixabiso.

Kwimisebenzi yemathematika, amaxabiso abuyiswe ngabaqhubi bemisebenzi aguqulwa abe ngamanani. Ukwahlukileyo kwimisebenzi enjalo yongezwa, kuba ukuba ubuncinane enye yemigaqo ingumtya, ukuguqulwa komtya kusetyenziswe kuwo onke amagama.

QAPHELA. Iindlela ezinoxanduva lolo tshintsho zihlala ziphunyezwa kwiprototypes yomzali wento, ixabisoOf ΠΈ ukuyaString. ixabisoOf ebizwa ngexesha lokuguqulwa kwamanani kwaye rhoqo phambi kwendlela ukuyaString. Indlela ixabisoOf Kufuneka ibuyisele amaxabiso amandulo, kungenjalo isiphumo sawo asihoywa.

Indlela ibizwa ngokuba yinto ixabisoOF. Ukuba ayifumanekanga okanye ayibuyiseli ixabiso lakudala, indlela ibizwa ngokuba ukuyaString. Ukuba indlela ukuyaString ayifunyanwanga, iyakhangela ixabisoOf kwiprototype yento, kwaye yonke into iyaphindwa de ukuqhubekekiswa kwexabiso kugqitywe kwaye onke amaxabiso kwintetho aphoswe kuhlobo olufanayo.. Ukuba into iphumeza indlela ukuyaString, ebuyisela ixabiso lakudala, ngoko yiyo esetyenziselwa uguqulelo lomtya. Nangona kunjalo, isiphumo sokusebenzisa le ndlela ayisiyiyo intambo.

Umzekelo, ukuba ngento 'Iinjongo' indlela iyachazwa ukuyaString,

`var obj = { toString() { return "200" }}` 

indlela ukuyaString ibuyisela ngqo umtya, kwaye xa udibanisa umtya kunye nenani, sifumana intambo encamatheleyo:

`obj + 1 // '2001'` 

`obj + 'a' // β€˜200a'`

Kodwa ukuba uphinda ubhale ukuyaString, ukwenzela ukuba indlela ibuyisele inombolo, xa into yongezwa, umsebenzi weemathematika kunye nokuguqulwa kwamanani kuya kwenziwa kwaye umphumo wokongezwa kweemathematika uya kufumaneka.

`var obj = { toString() { return 200 }}` 

`obj + 1 // '2001'`

Kule meko, ukuba senza udibaniso ngentambo, ukuguqulwa kweentambo kwenziwa, kwaye sifumana intambo edibeneyo.

`obj + 'a' // β€˜200a'`

Esi sizathu senani elikhulu leempazamo ngabasebenzisi be-novice JavaScript.

Indlela ukuyaString ungabhala umsebenzi ozakunyusa ixabiso langoku lento ngo 1.

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript
Ukwenziwa kombhalo, ngaphandle kokuba uguqulo lulingana no-3, kwaye ikwalingana no-4.

Xa kuthelekiswa nesamente (==), indlela iphunyezwa ngexesha ngalinye ukuyaString ngomsebenzi wokunyusa ixabiso. Ngokufanelekileyo, ngothelekiso ngalunye olulandelayo, ixabiso liyakhula. Oku kunokuphetshwa ngokusebenzisa uthelekiso olungaphoswanga (===).

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript
Uthelekiso ngaphandle kohlobo lokuphosa

QAPHELA. Musa ukusebenzisa iCast Comparison ngokungeyomfuneko.

Kwimibhalo entsonkothileyo, efana ne-Webhooks enengqiqo entsonkothileyo, efuna uthelekiso nohlobo lokuphosa, kuyacetyiswa ukuba ubhale kwangaphambili iitshekhi zamaxabiso abuyisela izinto eziguquguqukayo kunye nokuphatha ukungangqinelani kunye neempazamo.

IWebhook Media

Ngasekupheleni kuka-2019 kwaye ekuqaleni kuka-2020, iqela lokudibanisa i-Zabbix liye laphuhlisa ngenkuthalo i-Webhooks kunye nokudibanisa ngaphandle kwebhokisi okuza nokuhanjiswa kweZabbix.

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript
Qhagamshela kwi uxwebhu

Ukuqhubela phambili

  • Ukufika kokulungiswa kwangaphambili kwiJavaScript kwenza ukuba kube lula ukushiya uninzi lwemibhalo yangaphandle, kwaye okwangoku kwiZabbix unokufumana naliphi na ixabiso kwaye uliguqulele kwixabiso elahluke ngokupheleleyo.
  • Ukulungiswa kwangaphambili kwi-Zabbix kusetyenziswa ikhowudi yeJavaScript, ethi, xa ihlanganiswe kwi-bytecode, iguqulelwe ibe ngumsebenzi othatha ixabiso elinye njengeparameter. inani Njengomtya (umtya unokuqulatha zombini idijithi kunye nenani).
  • Ekubeni imveliso ingumsebenzi, ekupheleni kweskripthi siyafuneka buya.
  • Kuyenzeka ukusebenzisa iimacros zesiko kwikhowudi.
  • Izibonelelo zinokulinganiselwa kungekuphela kwinqanaba lenkqubo yokusebenza, kodwa nakwinkqubo. Inyathelo lokucubungula kwangaphambili linikezelwe ubuninzi beemegabytes ezili-10 ze-RAM kunye nomda wexesha lokuqhuba imizuzwana ye-10.

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript

QAPHELA. Ixabiso lexesha lokuvala lemizuzwana eli-10 lininzi kakhulu, kuba ukuqokelela okunemeko engamawaka ezinto zedatha ngomzuzwana omnye ngokwemeko "enzima" yokucubungula kunokucothisa iZabbix. Ngoko ke, akukhuthazwa ukuba kusetyenziswe ulwenziwo lwangaphambili ukuphumeza ngokupheleleyo-i JavaScript egcweleyo ngokubizwa-izinto zedatha yesithunzi (izinto eziludummy), eziqhutywa kuphela ukwenza ulungiso lwangaphambili..

Ungayijonga ikhowudi yakho ngovavanyo lwangaphambili okanye usebenzisa into eluncedo zabbix_js:

`zabbix_js -s *script-file -p *input-param* [-l log-level] [-t timeout]`

`zabbix_js -s script-file -i input-file [-l log-level] [-t timeout]`

`zabbix_js -h`

`zabbix_js -V`

Imisebenzi eyenziwayo

Injongo 1

Buyisela into ebaliweyo ngokucocwa kwangaphambili.

Imeko: Fumana iqondo lobushushu kwiFahrenheit ukusuka kwisivamvo ukuze uyigcine ngeCelsius.

Ngaphambili, besiya kwenza into eqokelela iqondo lobushushu kwiidigri zeFahrenheit. Emva koko, enye into yedatha (ibalwe) eya kuguqula iFahrenheit ibe yiCelsius isebenzisa ifomula.

Iingxaki:

  • Kuyafuneka ukuphinda izinto zedatha kwaye ugcine onke amaxabiso kwisiseko sedatha.
  • Kufuneka uvumelane ngamakhefu ento "yomzali" yedatha ebalwa yaze yasetyenziswa kwifomula, nakwinto yedatha ebalwayo. Kungenjalo, into ebaliweyo inokuya kwimeko engaxhaswanga okanye ibale ixabiso langaphambili, eliya kuchaphazela ukuthembeka kweziphumo zokubeka iliso.

Esinye isisombululo yayikukusuka kumathuba okukhangela aguquguqukayo ngokuthanda amathuba amiselweyo ukuqinisekisa ukuba into ebaliweyo ivavanywa emva kwento efumana idatha (kwimeko yethu, iqondo lobushushu kwiidigri zeFahrenheit).

Kodwa ukuba, umzekelo, sisebenzisa itemplate ukujonga inani elikhulu lezixhobo, kwaye itshekhi yenziwa kanye ngemizuzwana engama-30, i-Zabbix "i-hacks" imizuzwana engama-29, kwaye ngomzuzwana wokugqibela iqala ukujonga nokubala. Oku kudala umgca kwaye kuchaphazela ukusebenza. Ngoko ke, kucetyiswa ukuba kusetyenziswe izithuba ezimiselweyo kuphela ukuba kuyimfuneko ngokwenene.

Kule ngxaki, esona sisombululo sisesona sisombululo singumgca omnye weJavaScript oguqula iidigri zikaFahrenheit zibe ziidigri zeCelsius:

`return (value - 32) * 5 / 9;`

Kuyakhawuleza kwaye kulula, awudingi ukwenza izinto zedatha ezingafunekiyo kwaye ugcine imbali kuzo, kwaye ungasebenzisa amaxesha aguqukayo okuhlola.

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript

`return (parseInt(value) + parseInt("{$EXAMPLE.MACRO}"));`

Kodwa, ukuba kwimeko yokucingela kuyimfuneko ukongeza into efunyenweyo yedatha, umzekelo, ngayo nayiphi na into echazwe rhoqo kwi-macro, kufuneka ithathelwe ingqalelo ukuba iparameter. inani yandisa ibe ngumtya. Kumsebenzi wokudibanisa umtya, imitya emibini idityaniswa ngokulula ibe nye.

Sicombulula iingxaki ezisebenzayo kwiZabbix sisebenzisa iJavaScript

`return (value + "{$EXAMPLE.MACRO}");`

Ukufumana isiphumo sokusebenza kwemathematika, kuyafuneka ukuguqula iintlobo zamaxabiso afunyenweyo kwifomathi yamanani. Kule nto ungasebenzisa umsebenzi paseInt(), evelisa inani elipheleleyo, umsebenzi cahlulaFamba (), evelisa idesimali, okanye umsebenzi inani, ebuyisela inani elipheleleyo okanye lokugqibela.

Umsebenzi wesi-2

Fumana ixesha ngemizuzwana kude kube sekupheleni kwesatifikethi.

Imeko: inkonzo ikhupha umhla wokuphelelwa kwesatifikethi kwifomathi "Feb 12 12:33:56 2022 GMT".

Kwi-ECMAScript5 umhla.calula() yamkela umhla kwifomati ye-ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Kuyimfuneko ukuphosa umtya kuyo kwifomati MMM DD YYYY HH:mm:ss ZZ

Ingxaki: Ixabiso lenyanga lichazwa njengesicatshulwa, hayi njengenani. Idata ekule fomati ayimkelwa nguDuktape.

Umzekelo wesisombululo:

  • Okokuqala, uguqulo lubhengezwa oluthatha ixabiso (iskripthi sonke sisibhengezo sezinto eziguquguqukayo ezidweliswe zahlulwe ngeekoma).

  • Kumgca wokuqala sifumana umhla kwipharamitha inani kwaye uyahlule ngezithuba usebenzisa indlela bahlukana. Ngaloo ndlela, sifumana uluhlu, apho into nganye yoluhlu, iqala kwisalathiso esingu-0, ihambelana nomhla omnye ngaphambi nasemva kwesithuba. Ukwahlula (0) - inyanga, Ukwahlula (1) -inombolo, Ukwahlula (2) - umtya kunye nexesha, njl. Emva koko, into nganye yomhla inokufumaneka ngesalathisi kuluhlu.

`var split = value.split(' '),`

  • Inyanga nganye (ngokulandelelana kwexesha) ihambelana nesalathisi sendawo yayo kwi-array (ukusuka kwi-0 ukuya kwi-11). Ukuguqula ixabiso lombhalo kwixabiso lamanani, enye yongezwa kwisalathisi senyanga (kuba iinyanga zibalwa ziqala kwi-1). Kule meko, inkcazo kunye nokongezwa komnye kuthathwa kwiibiki, kuba ngaphandle koko umtya uya kufumaneka, kungekhona inombolo. Ekugqibeleni senza isilayi () - ukusika uluhlu ukusuka ekupheleni ukushiya abalinganiswa ababini kuphela (okubalulekileyo kwiinyanga kunye nenani elinamanani amabini).

`MONTHS_LIST = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],`

`month_index = ('0' + (MONTHS_LIST.indexOf(split[0]) + 1)).slice(-2),`

  • Senza umtya kwifomathi ye-ISO ukusuka kumaxabiso afunyenweyo ngokongezwa okuqhelekileyo kwemitya ngokulandelelana okufanelekileyo.

`ISOdate = split[3] + '-' + month_index + '-' + split[1] + 'T' + split[2],`

Idatha kwifomathi ebangelwa yinani lemizuzwana ukusuka kwi-1970 ukuya kwindawo ethile kwixesha elizayo. Kuphantse ukuba akunakwenzeka ukusebenzisa idatha kwifomathi efunyenweyo kwizinto ezibangela, kuba i-Zabbix ikuvumela ukuba usebenze kuphela nge-macros. {Umhla} ΠΈ {Ixesha}, ebuyisela umhla kunye nexesha kwifomati esebenziseka lula.

  • Singawufumana ke umhla wangoku kwiJavaScript kwifomati yeSitampu sexesha le-Unix kwaye siyisuse kumhla wokuphelelwa kwesatifikethi onesiphumo sokufumana inani leemillisecond ukusuka ngoku de isatifikethi siphelelwe.

`now = Date.now();`

  • Sahlula ixabiso elifunyenweyo ngewaka ukufumana imizuzwana kwiZabbix.

`return parseInt((Date.parse(ISOdate) - now) / 1000);`

Kwisiqalo, ungakhankanya intetho 'yokugqibela' ilandelwa liqela lamanani ahambelana nenani lemizuzwana kwithuba ofuna ukuphendula ngalo, umzekelo, kwiiveki. Ke, i-trigger iya kwazisa ukuba isatifikethi siphelelwa kwiveki.

QAPHELA. Nika ingqalelo ekusetyenzisweni paseInt() kumsebenzi buyaukuguqula inani eliqhekezayo eliphuma kulwahlulo lwee-milliseconds ukuya kwinani elipheleleyo. Ungasebenzisa kwakhona cahlulaFamba () kunye nokugcina idatha eqhekekileyo.

Jonga ingxelo

umthombo: www.habr.com

Yongeza izimvo