Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript
Tikhon Uskov, injiniya wa gulu lophatikizana la Zabbix

Zabbix ndi nsanja yosinthika yomwe imagwiritsidwa ntchito kuyang'anira mtundu uliwonse wa data. Kuyambira m'matembenuzidwe akale a Zabbix, oyang'anira oyang'anira akhala ndi kuthekera koyendetsa zolemba zosiyanasiyana kudzera. Magawo kwa macheke pa chandamale network node. Panthawi imodzimodziyo, kukhazikitsidwa kwa malemba kunayambitsa zovuta zingapo, kuphatikizapo kufunikira kothandizira malemba, kutumiza kwawo ku ma node olankhulana ndi ma proxies, komanso kuthandizira matembenuzidwe osiyanasiyana.

JavaScript ya Zabbix

Mu Epulo 2019, Zabbix 4.2 idayambitsidwa ndi JavaScript preprocessing. Anthu ambiri adakondwera ndi lingaliro lakusiya zolemba zomwe zimatengera deta kwinakwake, kuzigaya ndikuzipereka mwanjira yomwe Zabbix amamvetsetsa, ndikuchita macheke osavuta omwe adzalandira deta yomwe sinakonzekere kusungidwa ndi kukonzedwa ndi Zabbix, ndi kenako sungani mayendedwe a datawa pogwiritsa ntchito zida za Zabbix ndi JavaScript. Mogwirizana ndi kupezeka kwapang'onopang'ono komanso zinthu zodalira zomwe zidawonekera mu Zabbix 3.4, tili ndi lingaliro losinthika losanja ndikuwongolera zomwe mwalandira.

Mu Zabbix 4.4, monga kupitiriza koyenera kwa kukonzekera mu JavaScript, njira yatsopano yodziwitsira yawonekera - Webhook, yomwe ingagwiritsidwe ntchito kuphatikizira mosavuta zidziwitso za Zabbix ndi mapulogalamu a chipani chachitatu.

JavaScript ndi Duktapes

Chifukwa chiyani JavaScript ndi Duktape adasankhidwa? Zosankha zosiyanasiyana za zilankhulo ndi injini zidaganiziridwa:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python Yophatikizidwa
  • Ophatikizidwa Perl

Zosankha zazikuluzikulu zosankhidwa zinali kufalikira, kumasuka kwa kuphatikizika kwa injini muzogulitsa, kugwiritsira ntchito kachipangizo kakang'ono ndi ntchito yonse ya injini, ndi chitetezo choyambitsa kachidindo m'chinenerochi poyang'anira. Kutengera kuphatikiza kwa zizindikiro, JavaScript idapambana pa injini ya Duktape.

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript

Zosankha zosankhidwa ndi kuyezetsa ntchito

Mawonekedwe a Duktape:

- Wokhazikika ECMAScript E5/E5.1
- Ma module a Zabbix a Duktape:

  • Zabbix.log () - imakulolani kuti mulembe mauthenga omwe ali ndi tsatanetsatane wosiyanasiyana mwachindunji mu chipika cha Zabbix Server, zomwe zimapangitsa kuti zikhale zotheka kugwirizanitsa zolakwika, mwachitsanzo, mu Webhook, ndi seva ya seva.
  • CurlHttpRequest () - imakulolani kuti mupange zopempha za HTTP ku intaneti, zomwe kugwiritsa ntchito kwa Webhook kumachokera.
  • atob() ndi btoa() - imakupatsani mwayi kuti mulembe ndikutsitsa zingwe mumtundu wa Base64.

Zindikirani. Duktape imagwirizana ndi miyezo ya ACME. Zabbix amagwiritsa ntchito script ya 2015. Zosintha zotsatila zimakhala zazing'ono, kotero zikhoza kunyalanyazidwa..

Matsenga a JavaScript

Matsenga onse a JavaScript ali pakulemba kwamphamvu ndi kuyika mitundu: zingwe, manambala, ndi boolean.

Izi zikutanthauza kuti sikofunikira kulengeza pasadakhale mtundu wanji womwe uyenera kubweza mtengo.

M'masamu, zikhalidwe zobwezeredwa ndi ogwira ntchito zimasinthidwa kukhala manambala. Kupatulapo pazochitika zoterezi ndizowonjezera, chifukwa ngati chimodzi mwa mawuwo ndi chingwe, kutembenuka kwa chingwe kumagwiritsidwa ntchito pa mawu onse.

Zindikirani. Njira zomwe zimapangitsa kusintha kotereku nthawi zambiri zimatsatiridwa m'ma prototypes a chinthucho, kufunikaOf ΠΈ kuString. kufunikaOf kuyitanidwa pa kutembenuka kwa manambala ndipo nthawi zonse isanachitike njira kuString. Njira kufunikaOf iyenera kubweza zikhalidwe zakale, apo ayi zotsatira zake sizinyalanyazidwa.

Njira imatchedwa pa chinthu mtengoOF. Ngati sichinapezeke kapena sichikubwezera mtengo wakale, njirayo imatchedwa kuString. Ngati njira kuString sanapezeke, akufufuza kufunikaOf mu prototype ya chinthucho, ndipo zonse zimabwerezedwa mpaka kukonzedwa kwa mtengowo kumalizidwa ndipo zonse zomwe zili m'mawuwo zimaponyedwa kumtundu womwewo.. Ngati chinthucho chikugwiritsa ntchito njira kuString, yomwe imabweretsa mtengo wakale, ndiye kuti imagwiritsidwa ntchito potembenuza zingwe. Komabe, zotsatira za kugwiritsa ntchito njirayi sikutanthauza chingwe.

Mwachitsanzo, ngati kwa chinthu 'kukhala' njira ikufotokozedwa kuString,

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

Njira kuString imabweretsanso chingwe, ndipo powonjezera chingwe ndi nambala, timapeza chingwe chomata:

`obj + 1 // '2001'` 

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

Koma ngati mulembanso kuString, kotero kuti njirayo ibweretsenso nambala, chinthucho chikawonjezedwa, ntchito ya masamu yokhala ndi kutembenuka kwa chiwerengero idzachitidwa ndipo zotsatira za kuwonjezereka kwa masamu zidzapezedwa.

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

`obj + 1 // '2001'`

Pankhaniyi, ngati tichita kuwonjezera ndi chingwe, kutembenuka kwa chingwe kumachitika, ndipo timapeza chingwe chomata.

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

Ichi ndi chifukwa cha kuchuluka kwa zolakwika za ogwiritsa ntchito novice JavaScript.

Njira kuString mutha kulemba ntchito yomwe ingawonjezere mtengo wa chinthucho ndi 1.

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript
Kukonzekera kwa script, malinga ngati kusinthaku kuli kofanana ndi 3, komanso kuli kofanana ndi 4.

Poyerekeza ndi kuponya (==), njirayo imachitidwa nthawi iliyonse kuString ndi ntchito yowonjezereka. Chifukwa chake, pakuyerekeza kulikonse kotsatira, mtengowo ukuwonjezeka. Izi zitha kupewedwa pogwiritsa ntchito kufananitsa kosatulutsa (===).

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript
Kufananiza popanda mtundu kuponyera

Zindikirani. Osagwiritsa Ntchito Kuyerekezera Mosafunikira.

Pazolemba zovuta, monga ma Webhook okhala ndi malingaliro ovuta, omwe amafunikira kufananiza ndi kuyika kwamtundu, tikulimbikitsidwa kuti mulembetu macheke azinthu zomwe zimabwezeretsa zosinthika ndikuthana ndi zosagwirizana ndi zolakwika.

Webhook Media

Chakumapeto kwa chaka cha 2019 komanso koyambirira kwa 2020, gulu lophatikizana la Zabbix lakhala likupanga ma Webhooks ndi zophatikizira kunja kwa bokosi zomwe zimabwera ndi kugawa kwa Zabbix.

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript
Lumikizani ku zolemba

Kukonzekera

  • Kubwera kwa preprocessing mu JavaScript kunapangitsa kuti zitheke kusiya zolemba zambiri zakunja, ndipo pakadali pano ku Zabbix mutha kupeza mtengo uliwonse ndikusinthira kukhala mtengo wosiyana.
  • Kukonzekera mu Zabbix kumayendetsedwa ndi JavaScript code, yomwe, ikapangidwa kukhala bytecode, imasinthidwa kukhala ntchito yomwe imatenga mtengo umodzi ngati parameter. mtengo ngati chingwe (chingwe chikhoza kukhala ndi manambala ndi nambala).
  • Popeza zotsatira zake ndi ntchito, kumapeto kwa script kumafunika obwereza.
  • Ndikotheka kugwiritsa ntchito ma macros mu code.
  • Zothandizira zitha kuchepetsedwa osati pamlingo wamakina ogwiritsira ntchito, komanso mwadongosolo. Gawo lokonzekera limapatsidwa ma megabytes 10 a RAM ndi nthawi yothamanga ya masekondi 10.

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript

Zindikirani. Mtengo wanthawi yomaliza wa masekondi 10 ndiwochuluka, chifukwa kusonkhanitsa zinthu masauzande ambiri mu sekondi imodzi molingana ndi "zolemetsa" zotsogola zitha kuchedwetsa Zabbix. Chifukwa chake, sikovomerezeka kugwiritsa ntchito preprocessing kuti mupange zolemba zonse za JavaScript kudzera muzinthu zotchedwa shadow data element (dummy zinthu), zomwe zimayendetsedwa kokha kuti zitheke..

Mutha kuyang'ana khodi yanu pogwiritsa ntchito mayeso oyambira kapena kugwiritsa ntchito 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`

Ntchito zothandiza

Cholinga 1

M'malo mwa chinthu chowerengeka ndikuchikonza.

Mkhalidwe: Pezani kutentha mu Fahrenheit kuchokera ku sensa kuti musunge mu Celsius.

M'mbuyomu, tinkapanga chinthu chomwe chimasonkhanitsa kutentha mu madigiri Fahrenheit. Pambuyo pake, chinthu china cha data (chowerengeredwa) chomwe chingasinthe Fahrenheit kukhala Celsius pogwiritsa ntchito fomula.

Mavuto:

  • Ndikofunikira kubwereza zinthu za data ndikusunga zonse zomwe zili mu database.
  • Muyenera kuvomereza pazigawo za data ya "makolo" yomwe imawerengeredwa ndikugwiritsidwa ntchito munjira, komanso pazinthu zowerengera. Apo ayi, chinthu chowerengedweracho chikhoza kupita kumalo osagwiritsidwa ntchito kapena kuwerengera mtengo wam'mbuyo, zomwe zingakhudze kudalirika kwa zotsatira zowunikira.

Njira imodzi inali kuchoka pazigawo zosinthika za cheke pofuna kuonetsetsa kuti chinthu chowerengera chikuwunikidwa pambuyo pa chinthu chomwe chimalandira deta (kwa ife, kutentha kwa madigiri Fahrenheit).

Koma ngati, mwachitsanzo, timagwiritsa ntchito template kuti tiyang'ane zida zambiri, ndipo cheke imachitika kamodzi pa masekondi 30, Zabbix "hacks" kwa masekondi 29, ndipo pamapeto achiwiri akuyamba kufufuza ndi kuwerengera. Izi zimapanga mzere ndikusokoneza magwiridwe antchito. Choncho, tikulimbikitsidwa kugwiritsa ntchito nthawi zokhazikika pokhapokha ngati kuli kofunikira.

Muvutoli, yankho labwino kwambiri ndikusintha kwa JavaScript kwa mzere umodzi womwe umasintha madigiri Fahrenheit kukhala madigiri Celsius:

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

Ndizofulumira komanso zosavuta, simuyenera kupanga zinthu zosafunikira ndikusunga mbiri, komanso mutha kugwiritsa ntchito macheke osinthika.

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript

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

Koma, ngati muzochitika zongopeka ndikofunikira kuwonjezera zomwe zalandilidwa, mwachitsanzo, ndi zomwe zimatanthauzidwa nthawi zonse mu macro, ziyenera kuganiziridwa kuti parameter. mtengo amakula kukhala chingwe. Powonjezera zingwe, zingwe ziwiri zimangophatikizidwa kukhala chimodzi.

Timathetsa mavuto mu Zabbix pogwiritsa ntchito JavaScript

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

Kuti mupeze zotsatira za ntchito ya masamu, ndikofunikira kusintha mitundu yazomwe mwapeza kukhala manambala. Kwa izi mungagwiritse ntchito parseInt(), yomwe imapanga chiwerengero chokwanira, ntchito paseFloat (), yomwe imapanga decimal, kapena ntchito nambala, yomwe imabweretsa nambala kapena decimal.

Ntchito 2

Pezani nthawi mumasekondi mpaka kumapeto kwa satifiketi.

Mkhalidwe: ntchito ikupereka deti lotha ntchito ya satifiketi mumtundu wa "Feb 12 12:33:56 2022 GMT".

Mu ECMAScript5 date.parse() amavomereza deti mumtundu wa ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Ndikofunikira kuyiyikapo chingwe mumtundu wa MMM DD YYYY HH:mm:ss ZZ

vuto: Mtengo wa mwezi umawonetsedwa ngati mawu, osati ngati nambala. Zomwe zili mumtundu uwu sizivomerezedwa ndi Duktape.

Yankho Chitsanzo:

  • Choyamba, chosinthika chimalengezedwa chomwe chimatenga mtengo (cholemba chonsecho ndi chilengezo cha zosintha zomwe zalembedwa zolekanitsidwa ndi koma).

  • Mu mzere woyamba timapeza tsiku mu parameter mtengo ndi kulilekanitsa ndi mipata pogwiritsa ntchito njira Gawa. Chifukwa chake, timapeza mndandanda, pomwe gawo lililonse la gululo, kuyambira pa index 0, limagwirizana ndi tsiku limodzi lisanachitike komanso pambuyo pa danga. kugawanika (0) -mwezi, kugawanika (1) - nambala, kugawanika (2) - chingwe chokhala ndi nthawi, ndi zina zotero. Pambuyo pake, chinthu chilichonse cha tsikuli chikhoza kupezedwa ndi ndondomeko mumagulu.

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

  • Mwezi uliwonse (motsatira nthawi) umafanana ndi ndondomeko ya malo ake mumagulu (kuyambira 0 mpaka 11). Kuti mutembenuzire mtengo wa malemba kukhala nambala, imodzi imawonjezeredwa ku ndondomeko ya mwezi (chifukwa miyezi imawerengedwa kuyambira pa 1). Pachifukwa ichi, mawu omwe ali ndi kuwonjezera chimodzi amatengedwa m'mabokosi, chifukwa mwinamwake chingwe chidzapezedwa, osati chiwerengero. Pamapeto timachita chidutswa () - dulani mndandanda kuchokera kumapeto kuti musiye zilembo ziwiri zokha (zomwe ndi zofunika kwa miyezi yokhala ndi nambala ziwiri).

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

  • Timapanga zingwe mumtundu wa ISO kuchokera pazomwe timapeza powonjezera zingwe mwadongosolo loyenera.

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

Zomwe zili mumtundu wotsatira ndi chiwerengero cha masekondi kuchokera ku 1970 mpaka mtsogolo. Ndikosatheka kugwiritsa ntchito zomwe mwalandira muzoyambitsa, chifukwa Zabbix imakulolani kuti mugwiritse ntchito ma macros okha. {Tsiku} ΠΈ {Nthawi}, zomwe zimabwezera tsiku ndi nthawi mumpangidwe wosavuta kugwiritsa ntchito.

  • Titha kupeza tsiku lomwe lilipo mu JavaScript mu mtundu wa Unix Timestamp ndikuchotsa patsiku lotha ntchito ya satifiketi kuti tipeze ma milliseconds kuyambira pano mpaka satifiketi itatha.

`now = Date.now();`

  • Timagawanitsa mtengo womwe talandira ndi chikwi kuti tipeze masekondi mu Zabbix.

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

Mu trigger, mukhoza kufotokoza mawu akuti 'otsiriza' kutsatiridwa ndi manambala omwe amafanana ndi kuchuluka kwa masekondi mu nthawi yomwe mukufuna kuyankha, mwachitsanzo, m'masabata. Chifukwa chake, choyambitsacho chidzadziwitsa kuti satifiketiyo imatha pakatha sabata.

Zindikirani. Samalani kugwiritsa ntchito parseInt() mu ntchito obwerezakuti mutembenuzire chiwerengero cha magawo omwe amachokera kugawidwa kwa mamilliseconds kukhala chiwerengero chokwanira. Mukhozanso kugwiritsa ntchito paseFloat () ndikusunga zidziwitso zamagawo.

Onerani lipoti

Source: www.habr.com

Kuwonjezera ndemanga