Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript
Tikhon Uskov, Einnseanair sgioba amalachaidh Zabbix

Tha Zabbix na àrd-ùrlar gnàthaichte a tha air a chleachdadh gus sùil a chumail air seòrsa sam bith de dhàta. Bho na dreachan as tràithe de Zabbix, tha comas air a bhith aig luchd-rianachd sgrùdaidh grunn sgriobtaichean a ruith tro stoc airson sgrùdaidhean air nodan lìonra targaid. Aig an aon àm, dh'adhbhraich foillseachadh sgriobtaichean grunn dhuilgheadasan, a 'gabhail a-steach an fheum air taic a thoirt do sgriobtaichean, an lìbhrigeadh gu nodan conaltraidh agus proxies, a bharrachd air taic airson dreachan eadar-dhealaichte.

Javascript airson zabbix saor an asgaidh

Anns a’ Ghiblean 2019, chaidh Zabbix 4.2 a thoirt a-steach le ro-phròiseasadh JavaScript. Bha mòran dhaoine air bhioran mun bheachd a bhith a’ trèigsinn sgriobtaichean sgrìobhaidh a bheir dàta an àiteigin, ga chnàmh agus ga thoirt seachad ann an cruth a thuigeas Zabbix, agus a’ dèanamh sgrùdaidhean sìmplidh a gheibh dàta nach eil deiseil airson a stòradh agus a ghiullachd le Zabbix, agus an uairsin pròiseas an sruth dàta seo a’ cleachdadh innealan Zabbix agus JavaScript. Ann an co-bhonn ri lorg ìre ìosal agus nithean an eisimeil a nochd ann an Zabbix 3.4, fhuair sinn bun-bheachd gu math sùbailte airson an dàta a fhuair sinn a sheòrsachadh agus a riaghladh.

Ann an Zabbix 4.4, mar leantainn loidsigeach de ro-ghiollachd ann an JavaScript, tha dòigh fios ùr air nochdadh - Webhook, a dh'fhaodar a chleachdadh gus fiosan Zabbix fhilleadh a-steach gu furasta le tagraidhean treas-phàrtaidh.

Duktapes agus JavaScript

Carson a chaidh JavaScript agus Duktape a thaghadh? Chaidh beachdachadh air diofar roghainnean airson cànanan agus einnseanan:

  • Lua - Lua 5.1
  • Lua — LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python freumhaichte
  • Perl freumhaichte

B ’e na prìomh shlatan-tomhais taghaidh tricead, cho furasta‘ s a bha an einnsean a-steach don toradh, caitheamh ghoireasan ìosal agus coileanadh iomlan an einnsean, agus sàbhailteachd toirt a-steach còd sa chànan seo gu sgrùdadh. Stèidhichte air a’ mheasgachadh de chomharran, bhuannaich JavaScript air an einnsean Duktape.

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript

Slatan-tomhais taghaidh agus deuchainn coileanaidh

Feartan Duktape:

— Inbhe ECMAScript E5/E5.1
- Modalan Zabbix airson Duktape:

  • Zabbix.log () - a’ leigeil leat teachdaireachdan le diofar ìrean de mhion-fhiosrachadh a sgrìobhadh gu dìreach a-steach don loga Zabbix Server, a tha ga dhèanamh comasach mearachdan a cho-cheangal, mar eisimpleir, ann an Webhook, le staid an fhrithealaiche.
  • CurlHttpRequest() - a’ leigeil leat iarrtasan HTTP a dhèanamh chun lìonra, air a bheil cleachdadh Webhook stèidhichte.
  • atob () agus btoa () - a’ leigeil leat sreangan a chòdachadh agus a dhì-chòdachadh ann an cruth Base64.

FIOSRACHADH. Tha Duktape a’ cumail ri inbhean ACME. Bidh Zabbix a’ cleachdadh dreach 2015 den sgriobt. Tha atharrachaidhean às deidh sin beag, agus mar sin chan urrainnear an dearmad..

Javascript magic

Tha draoidheachd JavaScript gu lèir na laighe ann an clò-bhualadh fiùghantach agus tilgeadh seòrsa: sreang, àireamhach, agus boolean.

Tha seo a’ ciallachadh nach fheumar innse ro-làimh dè an seòrsa a bu chòir don chaochladair luach a thilleadh.

Ann an gnìomhachd matamataigeach, tha na luachan a thilleas gnìomhaichean gnìomh air an tionndadh gu àireamhan. Is e an eisgeachd a th’ ann an leithid de dh’ obair cur-ris, oir mas e sreang a th’ ann an co-dhiù aon de na teirmean, thèid tionndadh sreang a chuir an sàs anns a h-uile teirm.

FIOSRACHADH. Mar as trice bidh na dòighean a tha an urra ri na h-atharrachaidhean sin air an cur an gnìomh ann am prototypes pàrant an nì, luachOf и gu String. luachOf ris an canar rè tionndadh àireamhach agus an-còmhnaidh ron mhodh gu String. Dòigh-obrach luachOf feumaidh iad luachan prìomhadail a thilleadh, air neo cha tèid an toradh aige a leigeil seachad.

Canar modh air nì luachOF. Mura lorgar e no mura till e luach prìomhadail, canar am modh gu String. Ma tha an dòigh-obrach gu String chan fhaighear, lorg luachOf ann am prototype an nì, agus thèid a h-uile càil a-rithist gus an tèid giullachd an luach a chrìochnachadh agus gu bheil a h-uile luach san abairt air a thilgeil chun aon sheòrsa. Ma tha an nì a 'cur an gnìomh modh gu String, a thilleas luach prìomhadail, an uairsin is e sin a tha air a chleachdadh airson tionndadh sreang. Ach, chan eil toradh cleachdadh an dòigh seo gu riatanach mar shreang.

Mar eisimpleir, ma tha airson rud 'gearan' tha modh air a mhìneachadh gu String,

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

Dòigh gu String tillidh sinn sreang gu dìreach, agus nuair a chuireas sinn sreang ri àireamh, gheibh sinn sreang glued:

`obj + 1 // '2001'` 

`obj + 'a' // ‘200a'`

Ach ma nì thu ath-sgrìobhadh gu String, gus am bi am modh a’ tilleadh àireamh, nuair a thèid an nì a chur ris, thèid obrachadh matamataigeach le tionndadh àireamhach a dhèanamh agus gheibhear toradh cur-ris matamataigeach.

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

`obj + 1 // '2001'`

Anns a 'chùis seo, ma nì sinn cur-ris le sreang, thèid tionndadh sreang a dhèanamh, agus gheibh sinn sreang glued.

`obj + 'a' // ‘200a'`

Is e seo an adhbhar airson àireamh mhòr de mhearachdan le luchd-cleachdaidh ùr JavaScript.

An dòigh-obrach gu String faodaidh tu gnìomh a sgrìobhadh a mheudaicheas luach làithreach an nì le 1.

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript
Cur an gnìomh an sgriobt, fhad ‘s a tha an caochladair co-ionann ri 3, agus tha e cuideachd co-ionann ri 4.

An coimeas ri tilgeadh (==), thèid an dòigh a chuir an gnìomh gach turas gu String le gnìomh àrdachadh luach. Mar sin, le gach coimeas às deidh sin, bidh an luach ag àrdachadh. Faodar seo a sheachnadh le bhith a’ cleachdadh coimeas neo-thilgeadh (===).

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript
Coimeas gun seòrsa casting

FIOSRACHADH. Na cleachd Coimeas Cast gun fheum.

Airson sgriobtaichean iom-fhillte, leithid Webhooks le loidsig iom-fhillte, a dh ’fheumas coimeas a dhèanamh ri seòrsa tilgeadh, thathas a’ moladh sgrùdaidhean a sgrìobhadh ro-làimh airson na luachan a thilleas caochladairean agus a làimhsicheas neo-chunbhalachd agus mearachdan.

Meadhanan Lìn

Aig deireadh 2019 agus tràth ann an 2020, tha sgioba amalachaidh Zabbix air a bhith gu gnìomhach a’ leasachadh Webhooks agus aonachadh taobh a-muigh a’ bhogsa a thig le cuairteachadh Zabbix.

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript
Ceangal gu sgrìobhainnean

Ro-phròiseasadh

  • Le teachd ro-ghiollachd ann an JavaScript rinn e comasach a’ mhòr-chuid de sgriobtaichean bhon taobh a-muigh a thrèigsinn, agus an-dràsta ann an Zabbix gheibh thu luach sam bith agus a thionndadh gu luach gu tur eadar-dhealaichte.
  • Tha ro-phròiseasadh ann an Zabbix air a chuir an gnìomh le còd JavaScript, a tha, nuair a thèid a chur ri chèile ann am bytecode, air a thionndadh gu gnìomh a bheir aon luach mar pharamadair luach mar shreang (faodaidh an dà chuid figear agus àireamh a bhith ann an sreang).
  • Leis gur e gnìomh a th’ anns an toradh, tha feum air deireadh an sgriobt air ais.
  • Tha e comasach macros àbhaisteach a chleachdadh sa chòd.
  • Faodaidh goireasan a bhith cuibhrichte chan ann a-mhàin aig ìre an t-siostaim obrachaidh, ach cuideachd gu prògramach. Tha an ceum ro-ghiollachd air a thoirt seachad aig a’ char as àirde de 10 megabytes de RAM agus crìoch ùine ruith de 10 diogan.

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript

FIOSRACHADH. Tha luach ùine ùine 10 diogan gu math mòr, oir faodaidh cruinneachadh mìltean de stuthan dàta ann an 1 diog a rèir suidheachadh ro-ghiollachd caran “trom” Zabbix a dhèanamh nas slaodaiche. Mar sin, chan eilear a’ moladh ro-phròiseasadh a chleachdadh gus sgriobtaichean JavaScript làn-chuimseach a chuir an gnìomh tro na h-eileamaidean dàta sgàile (nithean meallta), a tha air an ruith a-mhàin gus ro-phròiseasadh a dhèanamh..

Faodaidh tu do chòd a sgrùdadh tro dheuchainn preprocessing no a 'cleachdadh a' ghoireas 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`

Gnìomhan practaigeach

Amas 1

Cuir an àite an nì àireamhaichte le ro-phròiseasadh.

Suidheachadh: Faigh an teòthachd ann am Fahrenheit bhon sensor gus a stòradh ann an Celsius.

Roimhe sin, chruthaicheadh ​​​​sinn rud a chruinnicheas an teòthachd ann an ceumannan Fahrenheit. Às deidh sin, nì dàta eile (àireamhaichte) a thionndaidheadh ​​Fahrenheit gu Celsius a’ cleachdadh foirmle.

Duilgheadasan:

  • Feumar eileamaidean dàta a dhùblachadh agus a h-uile luach a stòradh san stòr-dàta.
  • Feumaidh tu aontachadh air na h-amannan airson an nì dàta “pàrant” a tha air a thomhas agus air a chleachdadh san fhoirmle, agus airson an nì dàta àireamhaichte. Rud eile, faodaidh an nì àireamhaichte a dhol a-steach do staid gun taic no obrachadh a-mach luach roimhe, a bheir buaidh air earbsachd nan toraidhean sgrùdaidh.

B ’e aon fhuasgladh gluasad air falbh bho amannan sgrùdaidh sùbailte airson fàbhar amannan stèidhichte gus dèanamh cinnteach gu bheil an rud àireamhaichte air a mheasadh às deidh an rud a gheibh an dàta (anns a’ chùis againn, an teòthachd ann an ceumannan Fahrenheit).

Ach ma tha, mar eisimpleir, bidh sinn a 'cleachdadh an teamplaid gus sùil a thoirt air àireamh mhòr de innealan, agus thèid an t-seic a dhèanamh aon uair gach 30 diog, Zabbix "hacks" airson 29 diogan, agus aig an dàrna fear mu dheireadh bidh e a' tòiseachadh a 'sgrùdadh agus a' cunntadh. Bidh seo a’ cruthachadh ciudha agus a’ toirt buaidh air coileanadh. Mar sin, thathar a 'moladh a bhith a' cleachdadh amannan stèidhichte a-mhàin ma tha e dha-rìribh riatanach.

Anns an duilgheadas seo, is e am fuasgladh as fheàrr ro-phròiseas JavaScript aon-loidhne a thionndaidheas ceumannan Fahrenheit gu ceumannan Celsius:

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

Tha e luath agus furasta, chan fheum thu stuthan dàta neo-riatanach a chruthachadh agus eachdraidh a chumail orra, agus faodaidh tu cuideachd amannan sùbailte a chleachdadh airson sgrùdaidhean.

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript

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

Ach, ma tha e riatanach ann an suidheachadh beachd-bharail an eileamaid dàta a fhuaireadh a chur ris, mar eisimpleir, le cunbhalachd sam bith air a mhìneachadh sa macro, feumar aire a thoirt gu bheil am paramadair luach a 'leudachadh gu sreath. Ann an gnìomhachd cur-ris sreang, tha dà shreath dìreach air an cur còmhla ann an aon.

Bidh sinn a’ fuasgladh dhuilgheadasan practaigeach ann an Zabbix a’ cleachdadh JavaScript

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

Gus toradh gnìomhachd matamataigeach fhaighinn, feumar na seòrsaichean de na luachan a gheibhear a thionndadh gu cruth àireamhach. Airson seo faodaidh tu an gnìomh a chleachdadh parseInt(), a tha a 'cruthachadh iomlanachd, gnìomh parseFloat(), a bheir a-mach deicheach, no gnìomh àireamh, a tha a’ tilleadh iomlanachd no deicheach.

Tasg 2

Faigh an ùine ann an diogan gu deireadh an teisteanais.

Suidheachadh: bidh seirbheis a’ toirt a-mach ceann-latha crìochnachaidh teisteanais anns a’ chruth “Gearran 12 12:33:56 2022 GMT”.

Ann an ECMAScript5 ceann-latha.parse() a’ gabhail ri ceann-latha ann an cruth ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Feumar sreang a thilgeil thuige anns a’ chruth MMM DD BBBB HH:mm:ss ZZ

duilgheadas: Tha luach na mìos air a chuir an cèill mar theacsa, chan ann mar àireamh. Chan eil Duktape a’ gabhail ri dàta sa chruth seo.

Eisimpleir fuasglaidh:

  • An toiseach, thèid caochladair ainmeachadh a bheir luach (tha an sgriobt gu lèir na dhearbhadh air caochladairean a tha air an liostadh air an sgaradh le cromagan).

  • Anns a 'chiad loidhne gheibh sinn an ceann-latha anns a' pharamadair luach agus dealaich e le beàrnan a’ cleachdadh an dòigh sgaradh. Mar sin, gheibh sinn sreath, far a bheil gach eileamaid den raon, a’ tòiseachadh aig clàr-amais 0, a’ freagairt ri aon eileamaid ceann-latha ro agus às deidh àite. sgoltadh (0) - mìos, sgoltadh (1) - àireamh, sgoltadh (2) - sreang le ùine, msaa. Às deidh sin, faodar faighinn gu gach eileamaid den cheann-latha le clàr-amais san raon.

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

  • Bidh gach mìos (ann an òrdugh àraid) a 'freagairt ri clàr-amais a shuidheachadh anns an raon (bho 0 gu 11). Gus luach teacsa a thionndadh gu luach àireamhach, thèid aon a chur ri clàr-amais na mìos (seach gu bheil mìosan air an àireamhachadh a’ tòiseachadh aig 1). Anns a 'chùis seo, thèid an abairt le aon a chur ris a thoirt eadar camagan, oir air dhòigh eile gheibhear sreang, chan e àireamh. Aig an deireadh nì sinn sliseag() - gearraich an raon bhon deireadh gus dìreach dà charactar fhàgail (a tha cudromach airson mìosan le àireamh dà-fhigearach).

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

  • Bidh sinn a’ cruthachadh sreang ann an cruth ISO bho na luachan a gheibhear le bhith a’ cur sreathan àbhaisteach ris san òrdugh iomchaidh.

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

Tha an dàta ann an cruth toradh an àireamh de dhiog bho 1970 gu àm air choreigin san àm ri teachd. Tha e cha mhòr do-dhèanta dàta a chleachdadh anns a’ chruth a fhuaireadh ann an luchd-brosnachaidh, oir leigidh Zabbix leat obrachadh le macros a-mhàin {Ceann-latha} и {Ùine}, a thilleas an ceann-latha agus an uair ann an cruth a tha furasta a chleachdadh.

  • Is urrainn dhuinn an uairsin an ceann-latha làithreach fhaighinn ann an JavaScript ann an cruth Unix Timestamp agus a thoirt air falbh bhon cheann-latha crìochnachaidh an teisteanais a thig às gus an àireamh de mhillean-thiogaidean fhaighinn bho seo gus an tig an teisteanas gu crìch.

`now = Date.now();`

  • Bidh sinn a’ roinn an luach a fhuaireadh le mìle gus diogan fhaighinn ann an Zabbix.

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

Anns an inneal-brosnachaidh, faodaidh tu an abairt 'mu dheireadh' air a leantainn le seata àireamhan a fhreagras ris an àireamh dhiog anns an ùine a tha thu airson freagairt, mar eisimpleir, ann an seachdainean. Mar sin, bheir an inneal-brosnachaidh fios gu bheil an teisteanas a’ tighinn gu crìch ann an seachdain.

FIOSRACHADH. Thoir aire don chleachdadh parseInt() ann an gnìomh air aisgus an àireamh bloighteach a thig bho bhith a’ roinneadh milliseconds a thionndadh gu àireamh iomlan. Faodaidh tu cuideachd a chleachdadh parseFloat() agus stòradh dàta bloighteach.

Thoir sùil air an aithisg

Source: www.habr.com

Cuir beachd ann