Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript
ʻO Tikhon Uskov, 'enekinia hui hui hui Zabbix

ʻO Zabbix kahi kahua maʻamau i hoʻohana ʻia e nānā i kekahi ʻano ʻikepili. Mai nā mana mua loa o Zabbix, ua hiki i nā luna hoʻomalu ke holo i nā palapala like ʻole ma o hana no ka nānā ʻana i nā pūnaewele pūnaewele. I ka manawa like, ua alakaʻi ka hoʻomaka ʻana o nā palapala i nā pilikia he nui, e like me ka pono e kākoʻo i nā palapala, kā lākou hāʻawi ʻana i nā nodes kamaʻilio a me nā proxies, a me ke kākoʻo no nā ʻano like ʻole.

JavaScript no Zabbix

I ʻApelila 2019, ua hoʻokomo ʻia ʻo Zabbix 4.2 me ka hoʻomaka mua o JavaScript. Nui ka poʻe i hauʻoli i ka manaʻo o ka haʻalele ʻana i nā palapala kākau e lawe i ka ʻikepili i kahi wahi, e ʻeli a hāʻawi iā ia ma kahi ʻano i hoʻomaopopo ʻia e Zabbix, a hana i nā loiloi maʻalahi e loaʻa ai ka ʻikepili i mākaukau ʻole no ka mālama ʻana a me ka hana ʻana e Zabbix, a a laila e hana i kēia kahawai ʻikepili me ka hoʻohana ʻana i nā mea hana Zabbix a me JavaScript. I ka hui pū ʻana me ka ʻike haʻahaʻa haʻahaʻa a me nā mea hilinaʻi i ʻike ʻia ma Zabbix 3.4, loaʻa iā mākou kahi manaʻo maʻalahi no ka ʻohi ʻana a me ka mālama ʻana i ka ʻikepili i loaʻa.

Ma Zabbix 4.4, ma ke ʻano he hoʻomau kūpono o ka hana mua ʻana ma JavaScript, ua ʻike ʻia kahi ala hoʻolaha hou - Webhook, hiki ke hoʻohana maʻalahi i ka hoʻohui ʻana i nā leka Zabbix me nā noi ʻaoʻao ʻekolu.

JavaScript a me Duktapes

No ke aha i koho ʻia ai ʻo JavaScript a me Duktape? Ua noʻonoʻo ʻia nā koho like ʻole no nā ʻōlelo a me nā mīkini:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python i hoʻokomo ʻia
  • Hoʻokomo ʻia ʻo Perl

ʻO nā pae koho nui ka laha, ka maʻalahi o ka hoʻohui ʻana o ka mīkini i loko o ka huahana, ka hoʻohana haʻahaʻa haʻahaʻa a me ka hana holoʻokoʻa o ka mīkini, a me ka palekana o ka hoʻokomo ʻana i nā code ma kēia ʻōlelo i ka nānā ʻana. Ma muli o ka hui pū ʻana o nā hōʻailona, ​​ua lanakila ʻo JavaScript ma ka mīkini Duktape.

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript

Nā pae koho a me ka ho'āʻo hana

Nā hiʻohiʻona o Duktape:

— Kūlana ECMAScript E5/E5.1
- Nā modula Zabbix no Duktape:

  • Zabbix.log () - hiki iā ʻoe ke kākau i nā memo me nā pae kikoʻī like ʻole i loko o ka log Zabbix Server, kahi e hiki ai ke hoʻoponopono i nā hewa, no ka laʻana, ma kahi Webhook, me ka mokuʻāina kikowaena.
  • CurlHttpRequest() - hiki iā ʻoe ke hana i nā noi HTTP i ka pūnaewele, e pili ana i ka hoʻohana ʻana iā Webhook.
  • atob () a me btoa () - hiki iā ʻoe ke hoʻopaʻa a hoʻokaʻawale i nā kaula ma ka ʻano Base64.

PAPA. Hoʻopili ʻo Duktape i nā kūlana ACME. Hoʻohana ʻo Zabbix i ka mana 2015 o ka palapala. He mea liʻiliʻi nā hoʻololi hope, no laila hiki ke nānā ʻole ʻia..

JavaScript Magic

Aia nā mea kilokilo a pau o JavaScript i ka paʻi ʻana a me ka hoʻolei ʻana: string, numeric, a me boolean.

'O ia ho'i, 'a'ole pono e ha'i mua i ke 'ano o ka ho'ololi e ho'iho'i i ka waiwai.

Ma nā hana makemakika, ua hoʻololi ʻia nā waiwai i hoʻihoʻi ʻia e nā mea hana hana i nā helu. ʻO ka ʻokoʻa o ia mau hana he hoʻohui, no ka mea, inā he kaula ka liʻiliʻi o kekahi o nā huaʻōlelo, hoʻohana ʻia ka hoʻololi ʻana i ke kaula i nā huaʻōlelo a pau.

PAPA. Hoʻokomo pinepine ʻia nā ʻano hana no ia hoʻololi i nā prototypes makua o ka mea, waiwaiOf и Kukunahele. waiwaiOf kāhea ʻia i ka wā o ka hoʻololi ʻana i ka helu a ma mua o ke ʻano Kukunahele. ʻano hana waiwaiOf pono e hoʻihoʻi i nā waiwai primitive, i ʻole e nānā ʻia kona hopena.

Kāhea ʻia kahi ʻano ma luna o kahi mea waiwaiOF. Inā ʻaʻole ʻike ʻia a ʻaʻole hoʻi e hoʻihoʻi i kahi waiwai primitive, ua kapa ʻia ke ʻano Kukunahele. Inā ʻo ke ʻano Kukunahele aole loaa, imi waiwaiOf i ka prototype o ka mea, a ua hana hou ʻia nā mea a pau a hiki i ka pau ʻana o ka hana ʻana o ka waiwai a hoʻolei ʻia nā waiwai āpau i ka ʻōlelo i ka ʻano like.. Inā hoʻokō ka mea i kahi ʻano Kukunahele, ka mea e hoʻihoʻi i kahi waiwai primitive, a laila ʻo ia ka mea i hoʻohana ʻia no ka hoʻololi ʻana i ke kaula. Eia naʻe, ʻo ka hopena o ka hoʻohana ʻana i kēia ʻano hana ʻaʻole ia he kaula.

No ka laʻana, inā no ka mea 'mea hoʻopaʻapaʻa' wehewehe ʻia ke ʻano Kukunahele,

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

Ke Kumu Kukunahele hoʻihoʻi pololei i kahi kaula, a i ka hoʻohui ʻana i kahi kaula me kahi helu, loaʻa iā mākou kahi kaula glued:

`obj + 1 // '2001'` 

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

Akā inā kākau hou ʻoe Kukunahele, no laila e hoʻihoʻi ke ʻano i kahi helu, ke hoʻohui ʻia ka mea, e hana ʻia kahi hana makemakika me ka hoʻololi helu a loaʻa ka hopena o ka hoʻohui makemakika.

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

`obj + 1 // '2001'`

I kēia hihia, inā mākou e hana i ka hoʻohui me kahi kaula, e hana ʻia kahi hoʻololi ʻana i ke kaula, a loaʻa iā mākou kahi kaula glued.

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

ʻO kēia ke kumu o ka nui o nā hewa e nā mea hoʻohana JavaScript hou.

ʻO keʻano Kukunahele hiki iā ʻoe ke kākau i kahi hana e hoʻonui ai i ka waiwai o kēia manawa e 1.

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript
Ka hoʻokō ʻana i ka palapala, inā ua like ka hoʻololi me 3, a ua like pū me 4.

Ke hoʻohālikelike ʻia me kahi kiola (==), hoʻokō ʻia ke ʻano i kēlā me kēia manawa Kukunahele me ka hana hoʻonui waiwai. No laila, me kēlā me kēia hoʻohālikelike hope, piʻi ka waiwai. Hiki ke pale ʻia kēia ma ka hoʻohana ʻana i ka hoʻohālikelike hoʻolei ʻole (===).

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript
Hoʻohālikelike me ke ʻano hoʻolei ʻole

PAPA. Mai hoʻohana i ka hoʻohālikelike hoʻolei me ka pono ʻole.

No nā palapala paʻakikī, e like me Webhooks me ka loiloi paʻakikī, e koi ana i ka hoʻohālikelike ʻana me ke ʻano hoʻolei ʻana, pono e kākau mua i nā loiloi no nā waiwai e hoʻihoʻi i nā ʻano like ʻole a mālama i nā kūlike a me nā hewa.

Pāpaho Pūnaewele

I ka hopena o 2019 a me ka hoʻomaka ʻana o 2020, ua hoʻomohala ikaika ka hui hoʻohui Zabbix i nā Webhooks a me nā hoʻohui i waho o ka pahu e hele mai me ka hāʻawi ʻana iā Zabbix.

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript
Ka pilina palapala

Hoʻomākaukau mua

  • ʻO ka hiki ʻana mai o ka preprocessing ma JavaScript ua hiki ke haʻalele i ka hapa nui o nā palapala waho, a i kēia manawa ma Zabbix hiki iā ʻoe ke loaʻa i kekahi waiwai a hoʻololi iā ia i kahi waiwai ʻokoʻa.
  • Hoʻokomo ʻia ka preprocessing ma Zabbix e ka code JavaScript, i ka wā i hoʻohui ʻia i ka bytecode, ua hoʻololi ʻia i kahi hana e lawe i hoʻokahi waiwai ma ke ʻano he ʻāpana. waiwai ma ke ʻano he kaula (hiki i ke kaula ke loaʻa kahi huahelu a me kahi helu).
  • No ka mea he hana ka puka, ma ka hope o ka palapala e koi ʻia hoi mai.
  • Hiki ke hoʻohana i nā macro maʻamau i ke code.
  • Hiki ke kaupalena ʻia nā kumuwaiwai ʻaʻole wale ma ka pae ʻōnaehana hana, akā ma ka papahana pū kekahi. Hāʻawi ʻia ka hana preprocessing i ka nui o 10 megabytes o RAM a me ka palena manawa holo o 10 kekona.

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript

PAPA. ʻOi aku ka nui o ka manawa pau o 10 kekona, no ka mea, ʻo ka hōʻiliʻili ʻana i nā tausani o nā mea ʻikepili i ka 1 kekona e like me ke ʻano "kaumaha" preprocessing scenario hiki ke hoʻolōʻihi iā Zabbix. No laila, ʻaʻole i ʻōlelo ʻia e hoʻohana i ka preprocessing e hoʻokō i nā palapala JavaScript piha ma o nā mea i kapa ʻia ʻo shadow data elements (dummy items), i holo wale ʻia e hana preprocessing..

Hiki iā ʻoe ke nānā i kāu code ma o ka hoʻāʻo preprocessing a i ʻole ka hoʻohana ʻana i ka pono 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`

Nā hana maʻamau

Nń Pahuhopu 1

Hoʻololi i ka mea i helu ʻia me ka hana mua.

Kūlana: E kiʻi i ka mahana ma Fahrenheit mai ka mea ʻike e mālama i Celsius.

Ma mua, hana mākou i mea e hōʻiliʻili ai i ka mahana ma nā degere Fahrenheit. Ma hope o kēlā, he mea ʻikepili ʻē aʻe (heluhelu ʻia) e hoʻololi i ka Fahrenheit i Celsius me ka hoʻohana ʻana i kahi ʻano.

Nā pilikia:

  • Pono e hoʻokaʻawale i nā mea ʻikepili a mālama i nā waiwai āpau i ka waihona.
  • Pono ʻoe e ʻae i nā wā āpau no ka ʻikepili "makua" i helu ʻia a hoʻohana ʻia ma ke ʻano, a no ka ʻikepili helu helu. A i ʻole, hiki i ka mea i helu ʻia ke hele i kahi kūlana ʻaʻole kākoʻo ʻia a i ʻole e helu i kahi waiwai mua, e pili ana i ka hilinaʻi o nā hopena nānā.

ʻO kahi hoʻonā ka neʻe ʻana mai nā wā nānā maʻalahi e makemake i nā wā paʻa e hōʻoia i ka loiloi ʻia ʻana o ka mea i helu ʻia ma hope o ka mea i loaʻa ka ʻikepili (i kā mākou hihia, ʻo ka mahana ma nā degere Fahrenheit).

Akā inā, no ka laʻana, hoʻohana mākou i ka template no ka nānā ʻana i ka nui o nā mea hana, a hana ʻia ka māka i hoʻokahi manawa i kēlā me kēia 30 kekona, Zabbix "hacks" no 29 kekona, a ma ke kekona hope e hoʻomaka ai e nānā a helu. Hoʻokumu kēia i kahi laina a pili i ka hana. No laila, ʻōlelo ʻia e hoʻohana i nā manawa paʻa wale nō inā pono maoli ia.

I loko o kēia pilikia, ʻo ka hopena maikaʻi loa ʻo ia ka hoʻoponopono mua ʻana i ka JavaScript e hoʻololi i nā degere Fahrenheit i nā degere Celsius:

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

He wikiwiki a maʻalahi, ʻaʻole pono ʻoe e hana i nā mea ʻikepili pono ʻole a mālama i kahi mōʻaukala ma luna o lākou, a hiki nō hoʻi iā ʻoe ke hoʻohana i nā manawa maʻalahi no nā loiloi.

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript

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

Akā, inā i loko o kahi kūlana hypothetical pono e hoʻohui i ka ʻikepili i loaʻa, no ka laʻana, me ka wehewehe mau ʻana i ka macro, pono e noʻonoʻo ʻia ka ʻāpana. waiwai hoʻonui i ke kaula. Ma kahi hana hoʻohui kaula, ua hui wale ʻia ʻelua kaula i hoʻokahi.

Hoʻoponopono mākou i nā pilikia kūpono ma Zabbix me ka hoʻohana ʻana i ka JavaScript

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

No ka loaʻa ʻana o ka hopena o kahi hana makemakika, pono e hoʻololi i nā ʻano o nā waiwai i loaʻa i kahi ʻano helu. No kēia hiki iā ʻoe ke hoʻohana i ka hana parseInt(), ka mea e hoʻopuka ai i ka integer, kahi hana parseFloat(), ka mea e hoʻopuka ai i kahi decimal, a i ʻole kahi hana helu, ka mea e hoʻihoʻi i ka helu helu a i ʻole decimal.

Hana 2

E kiʻi i ka manawa i kekona a hiki i ka pau ʻana o ka palapala hōʻoia.

Kūlana: hāʻawi kahi lawelawe i ka lā pau o ka palapala hōʻoia ma ke ʻano "Feb 12 12:33:56 2022 GMT".

Ma ECMAScript5 lā.parse() ʻae i ka lā ma ka hōʻano ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Pono e hoʻolei i kahi kaula iā ia ma ke ʻano MMM DD YYYY HH:mm:ss ZZ

pilikia: Hōʻike ʻia ka waiwai o ka mahina ma ke ʻano he kikokikona, ʻaʻole ma ke ʻano he helu. ʻAʻole ʻae ʻia ka ʻikepili i kēia ʻano e Duktape.

Laʻana hoʻonā:

  • ʻO ka mea mua, hōʻike ʻia kahi ʻano hoʻololi e lawe i kahi waiwai (ʻo ka palapala holoʻokoʻa he hōʻike o nā mea hoʻololi i hoʻokaʻawale ʻia e nā koma).

  • Ma ka laina mua loaʻa iā mākou ka lā ma ka palena waiwai a hoʻokaʻawale iā ia me nā hakahaka me ke ʻano hoʻokaʻawale. No laila, loaʻa iā mākou kahi array, kahi e pili ai kēlā me kēia mea o ka array, e hoʻomaka ana i ka index 0, me kahi mea lā ma mua a ma hope o kahi ākea. mahele(0) - mahina, mahele(1) - helu, mahele(2) - he kaula me ka manawa, a pēlā aku. Ma hope o kēlā, hiki ke komo i kēlā me kēia mea o ka lā e ka index i ka array.

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

  • ʻO kēlā me kēia mahina (ma ka chronological order) e pili ana i ka index o kona kūlana i ka laha (mai ka 0 a hiki i ka 11). No ka hoʻololi ʻana i ka waiwai kikokikona i ka waiwai helu, hoʻohui ʻia kekahi i ka helu mahina (no ka mea, helu ʻia nā mahina e hoʻomaka ana ma 1). I kēia hihia, lawe ʻia ka ʻōlelo me ka hoʻohui ʻana o kekahi i nā brackets, no ka mea inā ʻaʻole e loaʻa kahi kaula, ʻaʻole kahi helu. I ka hope hana mākou ʻāpana () - ʻoki i ka laha mai ka hopena e waiho i ʻelua mau huaʻōlelo (he mea nui ia no nā mahina me kahi helu helu ʻelua).

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

  • Hoʻokumu mākou i kahi kaula i ka format ISO mai nā waiwai i loaʻa e ka hoʻohui maʻamau o nā kaula i ke ʻano kūpono.

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

ʻO ka ʻikepili i ka ʻano hopena ka helu o nā kekona mai 1970 a i kekahi manawa i ka wā e hiki mai ana. Aneane hiki ʻole ke hoʻohana i ka ʻikepili i ka format i loaʻa i nā triggers, no ka mea hiki iā Zabbix ke hana me nā macros wale nō. {Lā} и {Ka manawa}, e hoʻihoʻi i ka lā a me ka manawa ma kahi ʻano hoʻohana.

  • A laila hiki iā mākou ke kiʻi i ka lā i kēia manawa ma JavaScript ma ka Unix Timestamp format a unuhi iā ia mai ka hopena o ka lā hoʻopau palapala e loaʻa ai ka helu o nā milliseconds mai kēia manawa a hiki i ka pau ʻana o ka palapala.

`now = Date.now();`

  • Māhele mākou i ka waiwai i loaʻa i hoʻokahi tausani e loaʻa kekona ma Zabbix.

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

I ka trigger, hiki iā ʻoe ke kuhikuhi i ka huaʻōlelo 'hope loa' ukali ʻia e kahi pūʻulu o nā huahelu e pili ana i ka helu o kekona i ka manawa āu e makemake ai e pane, no ka laʻana, i nā pule. No laila, e haʻi aku ka mea hoʻomaka e pau ka palapala hōʻoia i hoʻokahi pule.

PAPA. E nānā i ka hoʻohana parseInt() ma ka hana hoi maie hoʻololi i ka helu hakina i loaʻa mai ka mahele ʻana o nā milliseconds i ka integer. Hiki iā ʻoe ke hoʻohana parseFloat() a mālama i ka ʻikepili hakina.

Nānā i ka hōʻike

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka