Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript
Tikhon Uskov, Zabbix integration team engineer

Ko te Zabbix he papa taapiri e whakamahia ana hei aro turuki i nga momo raraunga. Mai i nga putanga tuatahi o Zabbix, kua whai mana nga kaiwhakahaere aroturuki ki te whakahaere i nga momo tuhinga ma te Hohenga mo nga arowhai i runga i nga pona whatunga kua whakaritea. I te wa ano, ko te whakarewatanga o nga tuhinga tuhi i arahi ki te maha o nga uaua, tae atu ki te hiahia ki te tautoko i nga tuhinga tuhi, i to raatau tuku ki nga waahanga korero me nga kaitautoko, me te tautoko mo nga momo putanga.

JavaScript mo Zabbix

I te Paenga-whāwhā 2019, i whakauruhia a Zabbix 4.2 me te tukatuka JavaScript. He maha nga tangata i harikoa ki te whakaaro ki te whakarere i nga tuhinga tuhi ka mau i nga raraunga ki tetahi waahi, ka keri me te whakarato i roto i te whakatakotoranga e marama ana a Zabbix, me te mahi i nga arowhai ngawari ka whiwhi raraunga kaore i te rite mo te rokiroki me te tukatuka e Zabbix, a ka tukatuka i tenei awa raraunga ma te whakamahi i nga taputapu Zabbix me JavaScript. I te taha o te kitenga taumata-iti me nga mea whakawhirinaki i puta mai i te Zabbix 3.4, i whiwhi tatou i tetahi ariā ngawari mo te tohatoha me te whakahaere i nga raraunga kua riro mai.

I roto i te Zabbix 4.4, hei mahinga arorau o mua i te tukatuka i roto i te JavaScript, kua puta he tikanga whakamohiotanga hou - Webhook, ka taea te whakamahi ki te whakauru ngawari i nga whakamohiotanga a Zabbix me nga tono tuatoru.

JavaScript me Duktapes

He aha i whiriwhiria ai a JavaScript me Duktape? He maha nga whiringa mo nga reo me nga miihini i whakaarohia:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python tāmau
  • Perl tāmau

Ko nga paearu whiriwhiri matua ko te whanuitanga, te ngawari o te whakaurunga o te miihini ki roto i te hua, te iti o te kohi rauemi me te mahi katoa o te miihini, me te haumaru o te whakauru i te waehere i roto i tenei reo ki te aro turuki. I runga i te huinga o nga tohu, i toa a JavaScript i runga i te miihini Duktape.

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript

Paearu whiriwhiri me te whakamatautau mahi

Nga ahuatanga o Duktape:

— Paerewa ECMAKripituhi E5/E5.1
— Zabbix modules mo Duktape:

  • Zabbix.log() - ka taea e koe te tuhi i nga karere me nga taumata rereke rereke ki roto i te raarangi a Zabbix Server, e taea ai te hono i nga hapa, hei tauira, i roto i te Webhook, me te ahua o te tūmau.
  • CurlHttpRequest() - ka taea e koe te tuku tono HTTP ki te whatunga, kei runga te whakamahi i te Webhook.
  • atob() me te btoa() - ka taea e koe te whakawaehere me te wetewete aho i te whakatakotoranga Base64.

FAKATOKANGA. Ka tutuki a Duktape ki nga paerewa ACME. Ka whakamahi a Zabbix i te putanga 2015 o te tuhinga. He iti noa nga huringa o muri mai, na reira ka kore e arohia..

JavaScript Magic

Ko nga mahi makutu katoa o JavaScript kei roto i te tuhi hihiri me te maka momo: aho, tau, me te boolean.

Ko te tikanga kaore e tika te whakaatu i mua he aha te momo me whakahoki mai e te taurangi he uara.

I roto i nga mahi pangarau, ko nga uara i whakahokia mai e nga kaiwhakahaere mahi ka huri ki nga tau. Ko te rereke ki enei mahi he taapiri, na te mea mena he aho tetahi o nga kupu, ka whakamahia te hurihanga aho ki nga kupu katoa.

FAKATOKANGA. Ko nga tikanga e tika ana mo enei huringa ka whakamahia i roto i nga tauira matua o te ahanoa, Tuhinga o mua и kiToko. Tuhinga o mua ka karangahia i roto i te hurihanga tau me nga wa katoa i mua i te tikanga kiToko. Tikanga Tuhinga o mua me whakahoki mai nga uara o mua, ki te kore e arohia ana hua.

Ka karangahia he tikanga i runga i tetahi mea uaraOF. Mena kaore i kitea, kaore ranei e hoki mai he uara taketake, ka kiia te tikanga kiToko. Mena ko te tikanga kiToko kahore i kitea, e rapu ana Tuhinga o mua i roto i te tauira o te ahanoa, ka hoki ano nga mea katoa kia oti ra ano te tukatuka o te uara me nga uara katoa i roto i te korero ka maka ki te momo kotahi. Mena ka whakatinanahia e te ahanoa tetahi tikanga kiToko, ka whakahoki mai i te uara tuatahi, katahi ka whakamahia mo te hurihanga aho. Heoi, ko te hua o te whakamahi i tenei tikanga ehara i te mea he aho.

Hei tauira, mena mo te ahanoa 'obj' kua tautuhia te tikanga kiToko,

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

Tikanga kiToko ka whakahoki mai i tetahi aho, a, ka taapirihia he aho ki te tau, ka whiwhi tatou i te aho kapia:

`obj + 1 // '2001'` 

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

Engari ki te tuhi ano koe kiToko, kia whakahokia mai he nama e te tikanga, ina tapirihia te ahanoa, ka mahia he mahi pangarau me te hurihanga tau, ka puta te hua o te taapiri pangarau.

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

`obj + 1 // '2001'`

I roto i tenei take, ki te mahia e tatou te taapiri me te aho, ka mahia he huringa aho, ka whiwhi tatou i te aho kapia.

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

Koinei te take mo te maha o nga hapa a nga kaiwhakamahi JavaScript hou.

Ko te tikanga kiToko Ka taea e koe te tuhi i tetahi mahi hei whakanui ake i te uara o naianei o te ahanoa ma te 1.

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript
Te whakatinanatanga o te tuhinga, mena he rite te taurangi ki te 3, me te rite ano ki te 4.

Ina whakaritea ki te maka (==), ka mahia te tikanga i ia wa kiToko me te mahi whakanui uara. Na reira, me ia whakataurite ka whai ake, ka piki te uara. Ka taea te karo i tenei ma te whakamahi i te whakataurite kore-maka (===).

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript
Whakataurite kore momo makanga

FAKATOKANGA. Kaua e Whakamahia te Whakataurite Maka.

Mo nga tuhinga uaua, penei i te Webhooks me te arorau uaua, me whakataurite ki te momo makanga, e taunaki ana kia tuhi i mua i nga arowhai mo nga uara e whakahoki mai ana i nga taurangi me te hapai i nga rereketanga me nga hapa.

Tukutuku Media

I te mutunga o te tau 2019 me te timatanga o te tau 2020, kua kaha te mahi a te roopu whakauru Zabbix ki te whakawhanake i nga Webhooks me nga whakaurunga o waho o te pouaka ka haere mai me te tohatoha Zabbix.

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript
Hono ki te tuhinga

Tuhinga o mua

  • Ko te taenga mai o te tukatuka i roto i te JavaScript ka taea te whakarere i te nuinga o nga tuhinga o waho, a i tenei wa kei Zabbix ka taea e koe te tiki uara me te huri ki tetahi uara rereke.
  • Ko te tukatuka i roto i te Zabbix ka whakatinanahia e te waehere JavaScript, ka whakahiatohia ki te bytecode, ka huri hei mahi e mau ana i te uara kotahi hei tawhā. uara hei aho (kei roto i te aho he mati me te tau).
  • I te mea he mahi te putanga, i te mutunga o te tuhinga ka hiahiatia hoki.
  • Ka taea te whakamahi tonotono ritenga i roto i te waehere.
  • Ka taea te whakawhäiti i ngä rauemi ehara i te taumata pünaha whakahaere anake, engari i runga i te hötaka. Ko te mahinga o mua ka tohatohahia te 10 megabytes o te RAM me te tepe o te wa oma mo te 10 hēkona.

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript

FAKATOKANGA. He nui te uara o te 10 hēkona, na te mea ko te kohikohi i nga mano tini o nga taonga raraunga i roto i te 1 hēkona i runga i te ahua "taimaha" i mua i te tukatuka ka taea te whakaroa i a Zabbix. No reira, kaore i te tūtohutia kia whakamahi i te tukatuka o mua ki te whakahaere i nga tuhinga JavaScript katoa na roto i nga mea e kiia nei ko nga huānga raraunga atarangi (tuemi hangarua), ka whakahaerehia hei mahi i mua i te tukatuka..

Ka taea e koe te tirotiro i to waehere ma te whakamatautau i mua i te tukatuka, ma te whakamahi ranei i te taputapu 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`

Nga mahi mahi

Whāinga 1

Whakakapihia te mea tatau ki te tukatuka o mua.

Tikanga: Tikina te pāmahana i roto i te Fahrenheit mai i te pūoko ki te rokiroki i roto i te Celsius.

I mua, ka hangahia e matou he taonga hei kohi i te pāmahana ki nga nekehanga Fahrenheit. Whai muri i tera, ko tetahi atu mea raraunga (kua tatauhia) ka huri i te Fahrenheit ki te Celsius ma te whakamahi i tetahi tauira.

Nga raruraru:

  • He mea tika ki te taapiri i nga huānga raraunga me te penapena i nga uara katoa i roto i te papanga raraunga.
  • Me whakaae koe ki nga waahi mo te "maatua" tuemi raraunga e tatauhia ana, e whakamahia ana i roto i te tauira, me te taonga raraunga tatau. Ki te kore, ka uru pea te mea kua oti te tatau ki te ahua kore tautoko, ki te tatau ranei i tetahi uara o mua, ka pa ki te pono o nga hua o te aroturuki.

Ko tetahi otinga ko te neke atu i nga waahi arowhai ngawari ki te aro ki nga waahi kua whakaritea hei whakarite kia arotakehia te mea kua oti te tatau i muri i te taonga ka whiwhi raraunga (i a maatau, ko te pāmahana i nga nekehanga Fahrenheit).

Engari ki te mea, hei tauira, ka whakamahia e matou te tauira ki te tirotiro i te maha o nga taputapu, a ka mahia te haki i ia 30 hēkona, ka "hacks" a Zabbix mo te 29 hēkona, a i te tuarua whakamutunga ka timata te tirotiro me te tatau. Ka hangaia he rarangi ka pa ki te mahi. Na reira, e taunaki ana kia whakamahia nga waahi kua whakaritea mena he tino tika.

I roto i tenei raruraru, ko te otinga tino pai ko te raina-kotahi te tukatuka JavaScript e huri ana i nga nekehanga Fahrenheit ki nga nekehanga Celsius:

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

He tere me te ngawari, kaore koe e hiahia ki te hanga i nga taonga raraunga kore me te pupuri i tetahi hitori ki runga, ka taea hoki e koe te whakamahi i nga waahi ngawari mo nga arowhai.

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript

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

Engari, ki te mea i roto i tetahi ahuatanga whakapae he mea tika ki te taapiri i te huānga raraunga kua riro mai, hei tauira, me te tautuhi tonu i roto i te tonotono, me whai whakaaro ko te tawhā. uara ka roha hei aho. I roto i te mahi taapiri aho, ka hono noa nga aho e rua ki te kotahi.

Ka whakatauhia e matou nga raruraru whaitake i Zabbix ma te whakamahi i te JavaScript

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

Ki te whiwhi i te hua o te mahi pangarau, me huri nga momo o nga uara kua riro ki te whakatakotoranga tau. Mo tenei ka taea e koe te whakamahi i te mahi parseInt(), ka puta he tauoti, he mahi parseFloat(), ka whakaputa i te ira, i te mahi ranei tau, ka whakahoki i te tauoti, ira-ira ranei.

Mahi 2

Tikina te wa i roto i nga hēkona tae noa ki te mutunga o te tiwhikete.

Tikanga: ka tukuna e te ratonga he ra paunga tiwhikete ki te whakatakotoranga "Feb 12 12:33:56 2022 GMT".

I roto i te ECMAScript5 date.parse() ka whakaaehia he ra i roto i te whakatakotoranga ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Me maka he aho ki roto i te whakatakotoranga MMM DD YYYY HH:mm:ss ZZ

raruraru: Ko te uara o te marama ka whakaatuhia hei kuputuhi, kaua hei tau. Ko nga raraunga kei tenei whakatakotoranga kaore e whakaaetia e Duktape.

Tauira Otinga:

  • Tuatahi, ka whakapuakihia he taurangi e mau ana i te uara (ko te tuhinga katoa he whakapuakanga o nga taurangi kua whakarārangihia kua wehea e te piko).

  • I te rarangi tuatahi ka whiwhi tatou i te ra i roto i te tawhā uara ka wehea ki nga waahi ma te whakamahi i te tikanga ritua. No reira, ka whiwhi tatou i te huānga, ko ia huānga o te huānga, timata mai i te taupū 0, e hāngai ana ki tetahi huānga rā i mua i muri i te mokowā. wehe(0) - marama, wehe(1) - tau, wehe(2) - he aho whai wa, me etahi atu. Whai muri i tera, ka taea te uru atu ki ia huānga o te ra ma te taurangi o te huinga.

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

  • Ia marama (i roto i te raupapa o nga wa) e rite ana ki te taurangi o tona turanga i roto i te rarangi (mai i te 0 ki te 11). Hei huri i te uara kupu ki te uara tau, ka tapirihia tetahi ki te taurangi marama (na te mea ka tatauhia nga marama ka timata i te 1). I tenei keehi, ko te korero me te taapiri o te kotahi ka mau ki roto i nga taiapa, na te mea ka kore he aho ka whiwhi, ehara i te tau. I te mutunga ka mahi matou poro() - tapahia te huinga mai i te pito ka waiho kia rua noa nga tohu (he mea nui mo nga marama me te tau mati-rua).

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

  • Ka hangaia e matou he aho i roto i te whakatakotoranga ISO mai i nga uara kua riro mai ma te taapiri o nga aho i roto i te raupapa tika.

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

Ko nga raraunga kei roto i te whakatakotoranga ka puta ko te maha o nga hēkona mai i te tau 1970 ki etahi wa kei te heke mai. Kaore e taea te whakamahi i nga raraunga i roto i te whakatakotoranga kua riro mai i roto i nga kaitao, na te mea ka taea e Zabbix te mahi me nga tonotono anake {Rangi} и {Wā}, e whakahoki ana i te ra me te wa i roto i te whakatakotoranga ratarata-kaiwhakamahi.

  • Ka taea e tatou te tiki i te ra o naianei i roto i te JavaScript i roto i te whakatakotoranga Unix Timestamp me te tango mai i te ra paunga o te tiwhikete kia whiwhi i te maha o nga manomano mai i naianei tae noa ki te paunga o te tiwhikete.

`now = Date.now();`

  • Ka wehea e matou te uara kua riro mai ma te kotahi mano ki te tiki hēkona i Zabbix.

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

I roto i te keu, ka taea e koe te whakapūtā te kīanga 'whakamutunga' ka whai i te huinga mati e rite ana ki te maha o nga hēkona i roto i te waa e hiahia ana koe ki te whakautu, hei tauira, i nga wiki. No reira, ka whakamohio atu te keu ka pau te tiwhikete i roto i te wiki.

FAKATOKANGA. Kia tupato ki te whakamahinga parseInt() i roto i te mahi hokiki te huri i te tau hautau ka puta mai i te wehenga o nga manomano ki te tauoti. Ka taea hoki e koe te whakamahi parseFloat() me te rokiroki raraunga hautau.

Tirohia te purongo

Source: will.com

Tāpiri i te kōrero