Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript
Tikhon Uskov, Injineer kooxda isku dhafka ee Zabbix

Zabbix waa madal la beddeli karo oo loo isticmaalo in lagu kormeero nooc kasta oo xog ah. Tan iyo noocyadii ugu horreeyay ee Zabbix, maamulayaasha la socodka ayaa awood u yeeshay inay ku socodsiiyaan qoraallo kala duwan Tallaabooyinka hubinta qanjidhada shabakada bartilmaameedka. Isla mar ahaantaana, bilaabista qoraallada waxay keentay dhibaatooyin badan, oo ay ka mid yihiin baahida loo qabo in la taageero qoraallada, gaarsiintooda qanjidhada isgaarsiinta iyo wakiillada, iyo sidoo kale taageerada noocyo kala duwan.

JavaScript ee Zabbix

Bishii Abriil 2019, Zabbix 4.2 waxaa lagu soo bandhigay JavaScript horudhac ah. Dad badan ayaa ku farxay fikradda ah in laga tago qoraallada qoraalka ah ee qaadaya xogta meel ka mid ah, u jeexjeexo oo ku siiyaan qaab Zabbix fahamsan yahay, oo ay sameeyaan jeegag fudud oo heli doona xogta aan diyaar u ahayn kaydinta iyo habaynta Zabbix, iyo ka dibna ka baaraandegi qulqulka xogtan iyadoo la adeegsanayo Zabbix iyo aaladaha JavaScript. Iyadoo lala kaashanayo daahfurka heerka hoose iyo walxaha ku tiirsan ee ka soo muuqday Zabbix 3.4, waxaan helnay fikrad si cadaalad ah u dabacsanaan karta kala soocida iyo maareynta xogta la helay.

In Zabbix 4.4, sida sii wadida macquul ah ee ka-hortagga ka-hortagga JavaScript, hab cusub oo ogeysiis ah ayaa soo muuqday - Webhook, kaas oo loo isticmaali karo in si fudud loogu daro ogeysiisyada Zabbix codsiyada dhinac saddexaad.

JavaScript iyo Duktapes

Waa maxay sababta JavaScript iyo Duktape loo doortay? Ikhtiyaarada kala duwan ee luqadaha iyo matoorada ayaa la tixgeliyey:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Embedded Python
  • Ku-xidhan Perl

Shuruudaha xulashada ugu muhiimsan waxay ahaayeen baahsanaanta, fududaynta isku dhafka matoorka ee alaabta, isticmaalka kheyraadka hooseeya iyo guud ahaan waxqabadka matoorka, iyo badbaadada soo bandhigida koodka luqaddan si loola socdo. Iyada oo ku saleysan isku-darka tilmaamayaasha, JavaScript wuxuu ku guuleystay mashiinka Duktape.

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript

Shuruudaha xulashada iyo imtixaanka waxqabadka

Tilmaamaha Duktape:

- Heerka ECMAScript E5/E5.1
- Qaybaha Zabbix ee Duktape:

  • Zabbix.log () - Waxay kuu ogolaaneysaa inaad si toos ah ugu qorto farriimaha leh heerar kala duwan oo tafatiran si toos ah Log Server Zabbix, taas oo suurtogal ka dhigaysa in la xidhiidhiyo khaladaadka, tusaale ahaan, Webhook, iyo gobolka server.
  • CurlHttpRequest() - waxay kuu ogolaanaysaa inaad codsi HTTP u samayso shabakada, kaas oo isticmaalka Webhook ku salaysan yahay.
  • atob() iyo btoa() - waxay kuu ogolaanaysaa inaad codayn karto oo aad xarkaha ku dejiso qaabka Base64.

XUSUUS. Duktape waxay u hogaansantaa heerarka ACME Zabbix waxay isticmaashaa nooca 2015 ee qoraalka. Isbeddelada soo socdaa waa kuwa yar yar, markaa waa la iska indho tiri karaa..

JavaScript Magic

Dhammaan sixirka JavaScript wuxuu ku jiraa qorista firfircoon iyo nooca wax shubista: Xarig, tiro iyo boolean.

Tani waxay ka dhigan tahay in aan loo baahnayn in horay loo sii sheego nooca doorsoomuhu uu soo celinayo qiimaha.

Hawlaha xisaabta, qiyamka ay soo celiyaan hawl-wadeenada shaqada waxaa loo rogaa lambaro. Marka laga reebo hawlgallada noocan oo kale ah waa isugeyn, sababtoo ah haddii ugu yaraan mid ka mid ah ereyada uu yahay xarig, beddelka xargaha ayaa lagu dabaqaa dhammaan shuruudaha.

XUSUUS. Hababka mas'uulka ka ah isbeddellada noocan oo kale ah waxaa badanaa lagu fuliyaa tusaalaha waalidka shayga, qiimahaOf ΠΈ Xarriiqda. qiimahaOf loo yaqaan inta lagu guda jiro beddelka tirada iyo had iyo jeer ka hor habka Xarriiqda. Habka qiimahaOf waa in ay soo celisaa qiyamkii hore, haddii kale natiijadeeda waa la iska indhatiray.

Habka waxaa loogu yeeraa shay qiimahaOF. Haddii aan la helin ama aysan soo celin qiimo hore, habka ayaa loo yaqaan Xarriiqda. Haddi habka Xarriiqda lama helin, raadin qiimahaOf ee qaabka shayga, wax walbana waa lagu soo celiyaa ilaa habaynta qiimaha la dhammeeyo oo dhammaan qiyamka odhaahda lagu tuuray isla nooc isku mid ah.. Haddii shaygu uu fuliyo hab Xarriiqda, kaas oo soo celiya qiimaha asaasiga ah, ka dibna waa kan loo isticmaalo beddelka xargaha. Si kastaba ha ahaatee, natiijada codsiga habkan ma aha daruuri xadhig.

Tusaale ahaan, haddii loogu talagalay shayga 'walaxHabka waa la qeexay Xarriiqda,

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

Habka Xarriiqda si sax ah ayuu u soo celiyaa xadhig, iyo marka lagu daro xadhig leh nambar, waxaanu helnaa xadhig dhejis ah:

`obj + 1 // '2001'` 

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

Laakiin haddii aad dib u qorto Xarriiqda, si dariiqadu u soo celiyaan lambar, marka shayga lagu daro, waxaa la samayn doonaa qalliin xisaabeed oo leh beddelaad tiro waxaana la heli doonaa natiijada xisaabta ku darsiga.

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

`obj + 1 // '2001'`

Xaaladdan oo kale, haddii aan ku samayno isku-darka xargaha, beddelka xargaha ayaa la sameeyaa, waxaanan helnaa xargo dhejis ah.

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

Tani waa sababta khaladaadka tirada badan ee isticmaalayaasha JavaScript ee cusub.

Habka Xarriiqda waxaad qori kartaa shaqo kordhin doonta qiimaha hadda shayga 1.

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript
Fulinta qoraalka, waa haddii doorsoomuhu la mid yahay 3, sidoo kalena la mid yahay 4.

Marka la barbar dhigo kabka (==), habka waa la fuliyaa mar kasta Xarriiqda oo leh shaqada korodhka qiimaha. Sidaa awgeed, isbarbardhigga kasta oo xiga, qiimihiisu wuu kordhaa. Tan waxaa looga fogaan karaa iyadoo la isticmaalo isbarbardhigga aan jibka ahayn (===).

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript
Isbarbardhigga oo aan lahayn nooca wax shubista

XUSUUS. Ha u isticmaalin Isbarbardhigga Jidka si aan loo baahnayn.

Qoraallada adag, sida Webhooks oo leh caqli-gal adag, oo u baahan isbarbardhigga nooca shubista, waxaa lagula talinayaa in horay loo qoro jeegaga qiyamka soo celinaya doorsoomayaasha oo wax ka qabta iswaafaqsanaanta iyo khaladaadka.

Webhook Media

Dabayaaqadii 2019 iyo horraantii 2020, kooxda is dhexgalka ee Zabbix waxay si firfircoon u horumarinayeen Webhooks iyo isdhexgalka ka baxsan sanduuqa ee la socda qaybinta Zabbix.

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript
Isku xidhiidh dukumeenti

Horudhac

  • Imaanshaha horudhac u samaynta JavaScript waxa ay suurto galisay in laga tago inta badan qoraalada dibadeed, oo hadda Zabbix waxaad ka heli kartaa qiimo kasta oo aad u rogi kartaa qiimo gebi ahaanba ka duwan.
  • Ka hor-u-socodka Zabbix waxaa hirgeliyay code JavaScript, kaas oo, marka lagu ururiyo bytecode, loo beddelo hawl qaadata hal qiime halbeeg ahaan. qiimaha Xadhig ahaan (xadhiggu wuxuu ka koobnaan karaa lambar iyo nambar labadaba).
  • Maadaama wax-soo-saarku uu yahay shaqo, dhammaadka qoraalka ayaa loo baahan yahay soo laabtay.
  • Waxaa suurtogal ah in loo isticmaalo makros-ka caadiga ah ee koodhka.
  • Kheyraadka laguma xaddidi karo oo keliya heerka nidaamka hawlgalka, laakiin sidoo kale barnaamij ahaan. Tillaabada diyaarinta waxaa loo qoondeeyay ugu badnaan 10 megabyte oo RAM ah iyo wakhtiga uu soconayo oo ah 10 ilbiriqsi.

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript

XUSUUS. Qiimaha wakhtiga ee 10 ilbiriqsi aad buu u badan yahay, sababtoo ah ururinta kumanaan xog shuruudaysan 1 ilbiriqsi iyadoo loo eegayo "culus" horudhac horudhac ah ayaa hoos u dhigi karta Zabbix. Sidaa darteed, laguma talinayo in la isticmaalo horudhac si loo fuliyo qoraallo JavaScript buuxa ah iyada oo loo marayo waxa loogu yeero walxaha xogta hadhka ah (alaabta dunmmy), kuwaas oo loo wado oo kaliya in la sameeyo horudhac..

Waxaad ku hubin kartaa koodhkaaga adoo isticmaalaya tijaabada hore ama isticmaalka utility 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`

Hawlaha wax ku oolka ah

Ujeeddo 1

Ku beddel shayga la xisaabiyey oo horay u sii habeeyey.

XaaladHeerkulka Fahrenheit ka hel dareenka si aad ugu kaydiso Celsius.

Markii hore, waxaanu abuuri doonaa shay heerkulka ku ururinaya darajo Fahrenheit. Intaa ka dib, shay kale oo xog ah (la xisaabiyay) oo u beddelaya Fahrenheit Celsius iyadoo la isticmaalayo qaacido.

Dhibaatooyinka:

  • Waa lagama maarmaan in la nuqulo walxaha xogta oo lagu kaydiyo dhammaan qiyamka database-ka.
  • Waa inaad ku heshiiyaan inta u dhaxaysa shayga xogta "waalidka" ee la xisaabiyay laguna isticmaalay qaacidada, iyo shayga xogta la xisaabiyay. Haddii kale, shayga la xisaabiyay ayaa laga yaabaa inuu galo xaalad aan la taageerin ama xisaabin qiime hore, taas oo saameyn doonta kalsoonida natiijooyinka la socodka.

Mid ka mid ah xalku wuxuu ahaa in laga fogaado udub dhexaadka hubinta dabacsan iyadoo loo door bidayo waqtiyo go'an si loo hubiyo in shayga la xisaabiyay la qiimeeyo ka dib shayga helaya xogta (xaaladkeena, heerkulka darajo Fahrenheit).

Laakiin haddii, tusaale ahaan, aan isticmaalno template si aan u hubinno tiro badan oo qalab ah, iyo jeeggu waa la sameeyaa hal mar 30 ilbiriqsi kasta, Zabbix "hacks" 29 ilbiriqsi, iyo ilbiriqsi u dambeeya waxay bilaabeysaa hubinta iyo xisaabinta. Tani waxay abuurtaa saf waxayna saamaynaysaa waxqabadka. Sidaa darteed, waxaa lagu talinayaa in la isticmaalo waqtiyo go'an oo keliya haddii ay dhab ahaantii lagama maarmaan tahay.

Dhibaatadan, xalka ugu fiican waa hal-line JavaScript horudhac ah oo u beddelaya darajo Fahrenheit ilaa darajo Celsius:

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

Waa dhakhso oo fudud, uma baahnid inaad abuurto shay xog aan loo baahnayn oo aad taariikhda ku hayso, waxa kale oo aad isticmaali kartaa waqtiyo dabacsan si aad u hubiso.

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript

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

Laakiin, haddii xaalad mala-awaal ah ay lagama maarmaan tahay in lagu daro qaybta xogta la helay, tusaale ahaan, iyada oo wax kasta oo joogto ah lagu qeexay makro, waa in la tixgeliyaa in qiyaasta qiimaha ku fidsan xadhig. Hawlgalka isku-darka xadhigga, laba xadhig ayaa si fudud la isugu daray mid.

Waxaan ku xalinnaa dhibaatooyinka la taaban karo ee Zabbix anagoo adeegsanayna JavaScript

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

Si loo helo natiijada hawlgalka xisaabeed, waxaa lagama maarmaan ah in loo beddelo noocyada qiyamka la helay qaab lambareed. Tan waxaad isticmaali kartaa shaqada parseInt(), kaas oo soo saara tiro, shaqo parseFloat(), kaas oo soo saara jajab tobanle, ama shaqo tirada, oo soo celisa tiro ama jajab tobanle.

Hawsha 2

Ku hel wakhtiga ilbiriqsiyo ilaa dhamaadka shahaadada

Xaalad: adeegu waxa uu soo saaraa shahaado taariikhda uu dhacayo qaabka "Feb 12 12:33:56 2022 GMT".

In ECMAScript5 taariikhda.parse() aqbala taariikhda qaabka ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Waxaa lagama maarmaan ah in lagu dhejiyo xargaha qaabka MMM DD YYYY HH:mm:ss ZZ

dhibaatoQiimaha bisha waxaa lagu muujiyey qoraal ahaan, ee looma qeexo sida tiro. Xogta qaabkan ah ma aqbalayso Duktape.

Tusaale ahaan xalka:

  • Ugu horrayn, doorsoome ayaa lagu dhawaaqaa kaas oo qiimeeya (dhammaan qoraalku waa caddayn doorsoomayaal kuwaas oo ay ku taxan yihiin hakadyo).

  • Sadarka koowaad waxaan ku helnaa taariikhda qiyaasta qiimaha oo ku kala saar meelo bannaan adigoo isticmaalaya habka Kala badh. Haddaba, waxaynu helnaa array, halkaasoo qayb kasta oo ka mid ah shaxanka, oo ka bilaabmaya index 0, u dhigma hal curiye taariikh ka hor iyo ka dib meel bannaan. kala go'ay (0) - bil, kala go'ay (1) - tirada, kala go'ay (2) - Xadhig leh waqti, iwm. Intaa ka dib, qayb kasta oo taariikhda ka mid ah waxaa lagu heli karaa index ee diyaarinta.

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

  • Bil kasta (sida ay u kala horreeyaan) waxa ay u dhigantaa tusmada booska ay ku dhex jirto shaxda (laga bilaabo 0 ilaa 11). Si qiimaha qoraalka loogu beddelo qiime nambaro, mid ayaa lagu daraa tusmada bisha (maxaa yeelay bilaha ayaa la tiriyaa laga bilaabo 1). Xaaladdan oo kale, tibaaxaha lagu daro mid ka mid ah waxaa lagu qaadaa dhejisyo, sababtoo ah haddii kale xadhig ayaa la heli doonaa, ma aha tiro. Dhammaadka waxaan sameynaa jeex() - ka jar shaxanka dhammaadka si aad uga tagto laba xaraf oo keliya (taas oo muhiim u ah bilaha lambar laba-god ah).

`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),`

  • Waxaan ka samaynaa xadhig qaab ISO ah oo ka soo jeeda qiyamka la helay iyadoo la raacayo isku darka caadiga ah ee xargaha sida habboon.

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

Xogta qaabka ka dhalatay waa tirada ilbiriqsiyo laga bilaabo 1970 ilaa barta mustaqbalka. Waa wax aan macquul aheyn in la isticmaalo xogta qaabka la helay ee kiciya, sababtoo ah Zabbix waxay kuu ogolaaneysaa inaad ku shaqeyso oo kaliya makros {Taariikh} ΠΈ {Waqtiga}, oo taariikhda iyo wakhtiga ku soo celisa qaab isticmaale-saaxiibtinimo ah.

  • Waxaan markaas ku heli karnaa taariikhda hadda jirta JavaScript oo ah qaabka Unix Timestamp oo aan ka jarno natiijada taariikhda ay dhacayso shahaadada si aan u helno tirada millise seconds hadda ilaa ay shahaadodu dhacayso.

`now = Date.now();`

  • Waxaan u qaybineynaa qiimaha la helay kun si aan u helno ilbiriqsiyo gudaha Zabbix.

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

Keebka, waxaad ku qeexi kartaa odhaahda 'u dambeeya' waxaa ku xiga tiro lambarro ah oo u dhiganta tirada ilbiriqsi ee muddada aad rabto inaad ka jawaabto, tusaale ahaan, toddobaadyo. Markaa, kicinta ayaa ogeysiin doonta in shahaadodu ay dhacayso usbuuc gudihii.

XUSUUS. U fiirso adeegsiga parseInt() shaqaynaysa soo laabtaysi loogu beddelo tirada jajabka ah ee ka dhalatay qaybinta millise seconds loona beddelo tiro. Waxaad sidoo kale isticmaali kartaa parseFloat() oo kaydi xogta jajabka.

Daawo warbixinta

Source: www.habr.com

Add a comment