Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript
Tikhon Uskov, Zabbix yekubatanidza timu injiniya

Zabbix ipuratifomu inogoneka iyo inoshandiswa kutarisa chero rudzi rwe data. Kubva mavhezheni ekutanga eZabbix, vatariri vekutarisa vakave nekwaniso yekumhanyisa zvinyorwa zvakasiyana kuburikidza. Actions cheki pane chinongedzo network node. Panguva imwecheteyo, kutangwa kwezvinyorwa kwakatungamirira kumatambudziko akawanda, kusanganisira sekudiwa kwekutsigira zvinyorwa, kuendeswa kwavo kune node dzekukurukurirana uye proxies, pamwe nekutsigirwa kweshanduro dzakasiyana.

JavaScript yeZabbix

Muna Kubvumbi 2019, Zabbix 4.2 yakaunzwa neJavaScript preprocessing. Vanhu vazhinji vakafara nezve zano rekusiya zvinyorwa zvekunyora zvinotora data kumwe kunhu, vorigaya voripa nenzira inonzwisiswa naZabbix, uye voita macheki akareruka anogashira data risati ragadzirira kuchengetwa nekugadziriswa neZabbix, uye wobva wagadzirisa iyi data rwizi uchishandisa Zabbix uye JavaScript zvishandiso. Mukubatana nekuwanikwa kwakaderera uye zvinhu zvinotsamira zvakaonekwa muZabbix 3.4, takawana pfungwa inoshanduka-shanduka yekugadzirisa nekugadzirisa data rakagamuchirwa.

MuZabbix 4.4, sekuenderera mberi kunonzwisisika kwe pre-processing muJavaScript, nzira itsva yekuzivisa yakaonekwa - Webhook, iyo inogona kushandiswa kubatanidza nyore nyore zviziviso zveZabbix nevechitatu-party application.

JavaScript uye Duktapes

Sei JavaScript neDuktape zvakasarudzwa? Sarudzo dzakasiyana dzemitauro uye injini dzakatariswa:

  • Rua - Rua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Embedded Python
  • Embedded Perl

Mamiriro makuru ekusarudza aive kuwanda, kuve nyore kwekubatanidza injini muchigadzirwa, kuderera kwekushandisa zviwanikwa uye kuita kwese kweinjini, uye kuchengetedzwa kwekuunza kodhi mumutauro uyu mukutarisisa. Zvichienderana nekubatanidzwa kwezviratidzo, JavaScript yakakunda paDuktape injini.

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript

Sarudzo maitiro uye bvunzo dzekuita

Duktape Features:

- Standard ECMAScript E5/E5.1
- Zabbix modules yeDuktape:

  • Zabbix.log () - inokubvumira kunyora mameseji ane mazinga akasiyana-siyana zvakananga muZabbix Server log, iyo inoita kuti zvikwanisike kuwirirana zvikanganiso, semuenzaniso, muWebhook, ine server state.
  • CurlHttpRequest () - inokubvumira kuti uite zvikumbiro zveHTTP kune network, iyo kushandiswa kweWebhook kwakavakirwa.
  • atob () uye btoa () - inokutendera kuti uvhare uye decode tambo muBase64 fomati.

ONA. Duktape inotevedzera ACME zviyero. Zabbix inoshandisa 2015 vhezheni yechinyorwa. Shanduko dzinotevera idiki, saka dzinogona kufuratirwa..

JavaScript magic

Ese mashiripiti eJavaScript ari mukutaipa uye kutaipa kwemhando: tambo, nhamba, uye boolean.

Izvi zvinoreva kuti hazvifanirwe kuzivisa pachine nguva kuti rudzii runofanira kudzorera kukosha.

Mukushanda kwemasvomhu, kukosha kwakadzoserwa nevashandisi vebasa kunoshandurwa kuita manhamba. Kusarudzika kune mashandiro akadaro ndeyekuwedzera, nekuti kana imwe yematemu iri tambo, tambo shanduko inoshandiswa kune ese mazwi.

ONA. Iyo nzira dzinokonzeresa shanduko dzakadai dzinowanzo itwa mune chinhu chevabereki prototypes, kukoshaOf ΠΈ toString. kukoshaOf inodanwa panguva yekutendeuka kwenhamba uye nguva dzose pamberi penzira toString. Nzira kukoshaOf inofanira kudzosa tsika dzechinyakare, zvikasadaro mhedzisiro yacho inofuratirwa.

Nzira inodaidzwa pachinhu valueOF. Kana iyo isingawanikwe kana isingadzore kukosha kwepakutanga, iyo nzira inonzi toString. Kana nzira toString haina kuwanikwa, ichitsvaga kukoshaOf mune prototype yechinhu, uye zvese zvinodzokororwa kudzamara kugadzirisa kukosha kwapera uye kukosha kwese mukutaura kunokandwa kune imwechete mhando.. Kana chinhu chinoshandisa nzira toString, iyo inodzosa kukosha kwekare, zvino ndiyo inoshandiswa kushandura tambo. Zvisinei, chigumisiro chekushandisa nzira iyi haisi iyo tambo.

Semuenzaniso, kana yechinhu 'object' nzira inotsanangurwa toString,

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

nzira toString inodzorera tambo chaiyo, uye kana tichiwedzera tambo ine nhamba, tinowana tambo yakanamatira:

`obj + 1 // '2001'` 

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

Asi kana ukanyorazve toString, kuitira kuti nzira idzorere nhamba, kana chinhu chacho chawedzerwa, kushanda kwemasvomhu nenhamba yekushandura kuchaitwa uye mugumisiro wekuwedzera kwemasvomhu uchawanikwa.

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

`obj + 1 // '2001'`

Muchiitiko ichi, kana tikaita kuwedzera netambo, kutendeuka kwetambo kunoitwa, uye tinowana tambo yakanamatira.

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

Ichi ndicho chikonzero chehuwandu hukuru hwekukanganisa nevanovice JavaScript vashandisi.

Nzira toString unogona kunyora basa rinowedzera kukosha kwazvino kwechinhu ne1.

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript
Kuitwa kwechinyorwa, chero shanduko yakaenzana ne3, uye zvakare yakaenzana na4.

Kana ichienzaniswa nekukandwa (==), iyo nzira inoitwa nguva yega yega toString nebasa rekuwedzera kukosha. Saizvozvowo, nekuenzanisa kwega kwega kunotevera, kukosha kunowedzera. Izvi zvinogona kudzivirirwa nekushandisa isiri-cast kuenzanisa (===).

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript
Kuenzanisa pasina mhando yekukanda

ONA. Usashandise Cast Comparison Zvisina Kufanira.

Kune zvinyorwa zvakaoma, senge Webhooks ane logic yakaoma, inoda kuenzanisa nemhando yekukanda, zvinokurudzirwa kufanonyora cheki yehukoshero inodzosa madhiri uye kubata kusawirirana uye kukanganisa.

Webhook Media

Mukupera kwa2019 uye kutanga kwa2020, timu yekubatanidza yeZabbix yanga ichishingairira kugadzira Webhooks uye kunze-kwe-kwe-bhokisi kubatanidzwa kunouya nekugoverwa kweZabbix.

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript
Batanidza ne zvinyorwa

Kugadzirira

  • Kuuya kwepreprocessing muJavaScript kwakaita kuti zvikwanise kusiya zvinyorwa zvekunze zvakawanda, uye parizvino muZabbix unogona kuwana chero kukosha uye kuchishandura kune kukosha kwakasiyana zvachose.
  • Kufanotungamira muZabbix kunoitwa neJavaScript kodhi, iyo, kana yaunganidzwa kuita bytecode, inoshandurwa kuita basa rinotora kukosha kumwe chete separameter. ukoshi setambo (tambo inogona kuva nedhijiti nenhamba).
  • Sezvo zvakabuda ibasa, pamagumo echinyorwa chinodiwa dzokera.
  • Zvinokwanisika kushandisa tsika macros mukodhi.
  • Zviwanikwa zvinogona kuganhurirwa kwete chete padanho rekushandisa system, asiwo nehurongwa. Danho rekutanga reprocessing rinopihwa huwandu hwegumi megabytes ye RAM uye yekumhanya nguva yegumi masekonzi.

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript

ONA. Iko kukosha kwekufamba kwemasekonzi gumi kwakawanda, nekuti kuunganidza zviuru zvezvinhu zve data musekondi imwe zvinoenderana ne "inorema" preprocessing scenario inogona kuderedza Zabbix. Naizvozvo, hazvikurudzirwe kushandisa preprocessing kuita yakazara-yakazara JavaScript zvinyorwa kuburikidza neanonzi mumvuri data zvinhu (dummy zvinhu), izvo zvinomhanya chete kuita preprocessing..

Iwe unogona kutarisa kodhi yako kuburikidza ne preprocessing bvunzo kana kushandisa 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`

Mabasa anoshanda

Basa 1

Tsiva chinhu chakaverengerwa nepreprocessing.

Mamiriro: Tora tembiricha muFahrenheit kubva kune sensor kuti uchengete muCelsius.

Pakutanga, taigadzira chinhu chinounganidza tembiricha mumadhigirii Fahrenheit. Mushure meizvozvo, chimwe chinhu che data (chakaverengerwa) chinoshandura Fahrenheit kuenda kuCelsius uchishandisa fomula.

Matambudziko:

  • Izvo zvinodikanwa kudzokorora zvinhu zve data uye kuchengetedza zvese zvakakosha mudhatabhesi.
  • Iwe unofanirwa kubvumirana pamusoro penguva dze "mubereki" data chinhu chakaverengerwa uye chinoshandiswa mufomula, uye kune yakaverengerwa data chinhu. Zvikasadaro, chinhu chakaverengerwa chinogona kuenda kumamiriro asina kutsigirwa kana kuverenga kukosha kwapfuura, izvo zvinokanganisa kuvimbika kwemhedzisiro yekutarisisa.

Imwe mhinduro yaive yekubva pane inochinjika cheki nguva uchifarira nguva dzakatarwa kuti ive nechokwadi chekuti chinhu chakaverengerwa chinoongororwa mushure mechinhu chinogamuchira data (munyaya yedu, tembiricha mumadhigirii Fahrenheit).

Asi kana, semuenzaniso, isu tinoshandisa template kuti titarise nhamba huru yezvishandiso, uye cheki inoitwa kamwe chete mumasekonzi makumi matatu, Zabbix "hacks" kwemasekonzi makumi maviri nemapfumbamwe, uye pasekondi yekupedzisira inotanga kutarisa uye kuverenga. Izvi zvinogadzira mutsara uye zvinokanganisa maitiro. Nokudaro, zvinokurudzirwa kushandisa nguva dzakagadziriswa chete kana zvichinyatsodiwa.

Mune dambudziko iri, mhinduro yakakwana ndeye-mutsetse JavaScript preprocessing inoshandura madhigirii Fahrenheit kuita madhigirii Celsius:

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

Inokurumidza uye iri nyore, haufanire kugadzira zvisingakoshi zve data zvinhu uye kuchengeta nhoroondo pazviri, uye iwe unogona zvakare kushandisa inoshanduka nguva yekutarisa.

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript

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

Asi, kana mumamiriro ekufungidzira zvakakosha kuwedzera iyo yakagamuchirwa data element, semuenzaniso, chero inogara ichitsanangurwa mu macro, inofanirwa kuverengerwa kuti parameter. ukoshi inowedzera kuita tambo. Mukushanda kwekuwedzera tambo, tambo mbiri dzinongobatanidzwa kuita imwe.

Isu tinogadzirisa matambudziko anoshanda muZabbix tichishandisa JavaScript

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

Kuti uwane mhedzisiro yekushanda kwemasvomhu, zvinodikanwa kushandura mhando dzeiyo yakawanikwa kukosha kune nhamba fomati. Nokuda kweizvi unogona kushandisa basa parseInt(), iyo inoburitsa nhamba yakazara, basa parseFloat(), iyo inoburitsa decimal, kana basa nhamba, iyo inodzosa nhamba kana desimali.

Basa 2

Wana nguva mumasekonzi kusvika pakupera kwechitupa.

Mamiriro: sevhisi inoburitsa zuva rekupera kwechitupa mufomati "Feb 12 12:33:56 2022 GMT".

MuECMAScript5 date.parse() inogamuchira zuva riri mu ISO 8601 fomati (YYYY-MM-DDTHH:mm:ss.sssZ). Izvo zvinodiwa kukanda tambo kwairi muchimiro MMM DD YYYY HH:mm:ss ZZ.

dambudziko: Kukosha kwemwedzi kunoratidzwa semavara, kwete senhamba. Mashoko ari mufomati iyi haagamuchirwe naDuktape.

Solution Muenzaniso:

  • Chekutanga pane zvese, shanduko inoziviswa inotora kukosha (iyo yese script iziviso yezvakasiyana zvakanyorwa zvakapatsanurwa nemakoma).

  • Mumutsara wekutanga tinowana zuva muparameter ukoshi woiparadzanisa nenzvimbo uchishandisa nzira split. Nokudaro, tinowana mutsara, apo chimwe nechimwe chechikamu, kutanga pa index 0, chinoenderana nechinhu chimwe chezuva pamberi uye shure kwenzvimbo. kupatsanura (0) - mwedzi, kupatsanura (1) -nhamba, kupatsanura (2) - tambo ine nguva, nezvimwewo Mushure meizvi, chimwe nechimwe chezuva chinogona kuwanikwa nendekisi muhurongwa.

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

  • Mwedzi wega wega (mukurongeka kwenguva) unoenderana nendekisi yenzvimbo yayo muhurongwa (kubva pa0 kusvika pa11). Kushandura kukosha kwemavara kune nhamba yenhamba, imwe inowedzerwa kumwedzi index (nokuti mwedzi inoverengwa kutanga pa1). Muchiitiko ichi, kutaura nekuwedzera kweimwe kunotorwa mumabhuraketi, nokuti kana zvisina kudaro tambo ichawanikwa, kwete nhamba. Pakupedzisira tinoita chidimbu () - cheka mutsara kubva kumagumo kuti usiye mavara maviri chete (izvo zvakakosha kwemwedzi ine nhamba-maviri).

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

  • Isu tinogadzira tambo mune ISO fomati kubva kune yakawanikwa kukosha neyakajairwa yekuwedzera tambo muhurongwa hwakakodzera.

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

Iyo data mune inoguma fomati ndiyo nhamba yemasekonzi kubva 1970 kune imwe nguva mune ramangwana. Zvinenge zvisingaite kushandisa data mune yakagamuchirwa fomati mune zvinokonzeresa, nekuti Zabbix inobvumidza iwe kushanda chete nema macros. {Zuva} ΠΈ {Nguva}, iyo inodzorera zuva uye nguva mumutauro-ushamwari.

  • Tinogona kuzowana zuva razvino muJavaScript muUnix Timestamp fomati uye tobvisa kubva pane inoguma chitupa zuva rekupera kuti tiwane nhamba yemamilliseconds kubva zvino kusvika chitupa chapera.

`now = Date.now();`

  • Isu tinogovanisa kukosha kwakagamuchirwa nechuru kuti tiwane masekonzi muZabbix.

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

Mune inokonzeresa, unogona kudoma izwi rekuti 'yekupedzisira' inoteverwa neseti yemanhamba inoenderana nehuwandu hwemasekonzi panguva yaunoda kupindura, semuenzaniso, mumavhiki. Nekudaro, iyo inokonzeresa ichazivisa kuti chitupa chinopera muvhiki.

ONA. Teerera kune iko kushandisa parseInt() mubasa dzokerakushandura nhamba yezvikamu zvinobva pakupatsanurwa kwemamilliseconds kuita nhamba yakazara. Unogonawo kushandisa parseFloat() uye chengetedza data rechikamu.

Watch report

Source: www.habr.com

Voeg