Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript
Tikhon Uskov, moenjiniere oa sehlopha sa kopano ea Zabbix

Zabbix ke sethala se ka khonehang se sebelisetsoang ho lekola mofuta ofe kapa ofe oa data. Ho tloha liphetolelong tsa khale tsa Zabbix, batsamaisi ba behang leihlo ba bile le bokhoni ba ho tsamaisa mangolo a fapaneng liketso bakeng sa licheke ho li-node tsa marang-rang tse shebiloeng. Ka nako e ts'oanang, ho qalisoa ha mangolo ho ile ha lebisa mathateng a mangata, ho kenyelletsa le tlhokahalo ea ho tšehetsa mangolo, ho fana ka li-node tsa puisano le li-proxies, hammoho le tšehetso ea liphetolelo tse fapaneng.

JavaScript bakeng sa Zabbix

Ka Mmesa 2019, Zabbix 4.2 e ile ea hlahisoa ka JavaScript preprocessing. Batho ba bangata ba ile ba thabela mohopolo oa ho lahla mangolo a nkang data kae-kae, ho e cheka le ho e fana ka mokhoa oo Zabbix a o utloisisang, le ho etsa licheke tse bonolo tse tla amohela data e seng e loketse ho bolokoa le ho sebetsoa ke Zabbix, le ebe o sebetsana le phallo ena ea data o sebelisa lisebelisoa tsa Zabbix le JavaScript. Ka kopanelo le ho sibolloa ha maemo a tlase le lintho tse itšetlehileng ka tsona tse hlahileng ho Zabbix 3.4, re na le mohopolo o feto-fetohang oa ho hlophisa le ho laola lintlha tse amoheloang.

Ho Zabbix 4.4, e le ts'ebetso e utloahalang ea ts'ebetso ea pele ho JavaScript, mokhoa o mocha oa tsebiso o hlahile - Webhook, e ka sebelisoang ho kopanya habonolo litsebiso tsa Zabbix le lits'ebetso tsa motho oa boraro.

JavaScript le Duktapes

Hobaneng ho ile ha khethoa JavaScript le Duktape? Ho ne ho nahanoa likhetho tse fapaneng tsa lipuo le lienjineri:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python e kentsoeng
  • Perl e kentsoeng

Mekhoa e meholo ea khetho e ne e le ho ata, boiketlo ba ho kopanngoa ha enjene sehlahisoa, tšebeliso e tlaase ea lisebelisoa le ts'ebetso ea kakaretso ea enjene, le polokeho ea ho hlahisa khoutu ka puo ena ho beha leihlo. Ho ipapisitsoe le motsoako oa matšoao, JavaScript e hapile enjene ea Duktape.

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript

Mekhoa ea khetho le tlhahlobo ea ts'ebetso

Likarolo tsa Duktape:

- E tloaelehileng ECMAScript E5/E5.1
- Li-module tsa Zabbix bakeng sa Duktape:

  • Zabbix.log () - e u lumella ho ngola melaetsa e nang le lintlha tse fapaneng ka ho toba ho log ea Zabbix Server, e leng se etsang hore ho khonehe ho hokahanya liphoso, mohlala, ho Webhook, le boemo ba seva.
  • CurlHttpRequest () - e u lumella ho etsa likopo tsa HTTP ho marang-rang, moo tšebeliso ea Webhook e thehiloeng ho eona.
  • atob() le btoa() - e o lumella ho khouta le ho khetholla likhoele ka sebopeho sa Base64.

TIISETSO. Duktape e latela maemo a ACME. Zabbix e sebelisa mofuta oa 2015 oa mongolo. Liphetoho tse latelang ke tse nyane, kahoo li ka hlokomolohuoa..

JavaScript Magic

Boselamose bohle ba JavaScript bo ka har'a ho thaepa ka matla le ho thaepa: khoele, linomoro, le boolean.

Sena se bolela hore ha ho hlokahale ho bolela esale pele hore na mofuta o tla khutlisa boleng ba mofuta ofe.

Ts'ebetsong ea lipalo, litekanyetso tse khutlisitsoeng ke basebelisi ba ts'ebetso li fetoloa ho ba linomoro. Mokhelo ho ts'ebetso e joalo ke tlatsetso, hobane haeba bonyane e 'ngoe ea mantsoe e le khoele, phetoho ea likhoele e sebelisoa ho mantsoe ohle.

TIISETSO. Mekhoa e ikarabellang bakeng sa liphetoho tse joalo hangata e sebelisoa ho prototypes ea motsoali oa ntho eo, bolengOf и hoString. bolengOf bitsoa nakong ea ho sokoloha ha lipalo le kamehla pele ho mokhoa hoString. Mokhoa bolengOf e tlameha ho khutlisa boleng ba khale, ho seng joalo sephetho sa eona se hlokomolohuoe.

Mokhoa o bitsoa holim'a ntho bolengOF. Haeba e sa fumanoe kapa e sa khutlise boleng ba khale, mokhoa o bitsoa hoString. Haeba mokhoa hoString ha e fumanehe, e batla bolengOf setšoantšong sa ntho, 'me ntho e' ngoe le e 'ngoe e phetoa ho fihlela ts'ebetso ea boleng e phethiloe 'me litekanyetso tsohle tsa polelo li lahleloa mofuteng o le mong.. Haeba ntho e sebelisa mokhoa hoString, e khutlisetsang boleng ba khale, ebe ke eona e sebelisetsoang ho fetola likhoele. Leha ho le joalo, sephetho sa ho sebelisa mokhoa ona ha se hakaalo hore ke khoele.

Ka mohlala, haeba bakeng sa ntho 'sepheo' mokhoa o hlalosoa hoString,

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

Mokhoa hoString e khutlisetsa khoele hantle, 'me ha re eketsa khoele ka palo, re fumana khoele e khomaretsoeng:

`obj + 1 // '2001'` 

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

Empa haeba u ngola hape hoString, e le hore mokhoa o khutlise palo, ha ntho e kenyelletsoa, ​​ts'ebetso ea lipalo e nang le phetoho ea linomoro e tla etsoa 'me phello ea ho eketsa lipalo e tla fumanoa.

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

`obj + 1 // '2001'`

Tabeng ena, haeba re etsa tlatsetso ka khoele, ho etsoa phetoho ea khoele, 'me re fumana khoele e khomaretsoeng.

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

Lena ke lebaka la liphoso tse ngata tse entsoeng ke basebelisi ba JavaScript ba qalang.

Mokhoa hoString o ka ngola mosebetsi o tla eketsa boleng ba hona joale ba ntho ka 1.

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript
Phethahatso ea mongolo, ha feela phapang e lekana le 3, hape e lekana le 4.

Ha ho bapisoa le samente (==), mokhoa ona o etsoa nako le nako hoString ka mosebetsi oa ho eketsa boleng. Ka hona, ka papiso ka 'ngoe e latelang, boleng bo eketseha. Sena se ka qojoa ka ho sebelisa papiso eo e seng ea li-cast (===).

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript
Papiso ntle le mofuta oa ho lahla

TIISETSO. U se ke ua Sebelisa Papiso ea Cast ho sa hlokahale.

Bakeng sa lingoloa tse rarahaneng, joalo ka li-Webhooks tse nang le menahano e rarahaneng, e hlokang ho bapisoa le mofuta oa mofuta, ho khothaletsoa ho ngola licheke pele bakeng sa boleng bo khutlisetsang mefuta e fapaneng le ho sebetsana le ho se lumellane le liphoso.

Webhook Media

Qetellong ea 2019 le mathoasong a 2020, sehlopha sa kopanyo sa Zabbix se ntse se tsoela pele ho nts'etsapele li-Webhooks le likhokahano tse tsoang kantle ho lebokose tse tlang le kabo ea Zabbix.

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript
Khokahano ho litokomane

Tsoelo-pele

  • Ho fihla ha preprocessing ho JavaScript ho entse hore ho khonehe ho lahla mangolo a mangata a ka ntle, 'me hona joale ho Zabbix u ka fumana boleng leha e le bofe' me ua bo fetolela ho boleng bo fapaneng ka ho feletseng.
  • Preprocessing in Zabbix e kenngwa tshebetsong ke JavaScript khoutu, eo, ha e hlophisitsoe ka bytecode, e fetoloa mosebetsi o nkang boleng bo le bong e le parameter. boleng joalo ka khoele (khoele e ka ba le linomoro le nomoro).
  • Kaha tlhahiso ke mosebetsi, qetellong ea script ho hlokahala khutlele.
  • Hoa khoneha ho sebelisa li-macros tse tloaelehileng ka khoutu.
  • Lisebelisoa li ka fokotsoa eseng feela boemong ba tsamaiso ea ts'ebetso, empa hape le ka lenaneo. Mohato oa pele oa ho sebetsa o abetsoe boholo ba megabyte ea 10 ea RAM le moeli oa nako oa metsotsoana ea 10.

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript

TIISETSO. Theko ea nako ea metsotsoana e 10 e ngata haholo, hobane ho bokella likete-kete tsa lintlha tsa data ka motsotsoana o le mong ho latela boemo bo "boima" ba pele ho ka fokotsa Zabbix. Ka hona, ha ho khothalletsoe ho sebelisa preprocessing ho etsa litokomane tsa JavaScript tse felletseng ka seo ho thoeng ke likarolo tsa data tsa moriti (lintho tsa dummy), tse tsamaisoang feela ho etsa preprocessing..

U ka hlahloba khoutu ea hau ka tlhahlobo ea preprocessing kapa u sebelisa lisebelisoa 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`

Mesebetsi e sebetsang

Sepheo 1

Tlosa ntho e baliloeng ka ho e lokisa pele.

Boemo: Fumana mocheso ka Fahrenheit ho tloha ho sensor ho e boloka ka Celsius.

Pele, re ne re etsa ntho e bokellang mocheso ka likhato tsa Fahrenheit. Ka mor'a moo, ntho e 'ngoe ea data (e baloang) e neng e tla fetolela Fahrenheit ho Celsius ho sebelisa foromo.

Mathata:

  • Hoa hlokahala ho qopitsa likarolo tsa data le ho boloka boleng bohle ho database.
  • O tlameha ho lumellana ka linako tsa nako ea "motsoali" ea data e baloang le ho sebelisoa foromong, le bakeng sa lintlha tse baloang. Ho seng joalo, ntho e khomphuthang e ka ea boemong bo sa tšehetsoeng kapa ea bala boleng bo fetileng, e leng se tla ama ho tšepahala ha liphetho tsa tlhahlobo.

Tharollo e 'ngoe e ne e le ho tloha linakong tse feto-fetohang tsa tlhahlobo molemong oa linako tse tsitsitseng ho etsa bonnete ba hore ntho e baloang e hlahlojoa ka mor'a ntho e amohelang data (ho rona, mocheso ka likhato tsa Fahrenheit).

Empa haeba, ka mohlala, re sebelisa template ho hlahloba palo e kholo ea lisebelisoa, 'me cheke e etsoa hang ka mor'a metsotsoana e meng le e meng ea 30, Zabbix "hacks" bakeng sa metsotsoana ea 29,' me motsotsoana oa ho qetela e qala ho hlahloba le ho bala. Sena se theha mokoloko 'me se ama ts'ebetso. Ka hona, ho kgothaletswa ho sebelisa nako e tsitsitseng feela haeba ho hlile ho hlokahala.

Bothateng bona, tharollo e nepahetseng ke mokhoa o le mong oa JavaScript o fetolelang likhato tsa Fahrenheit ho likhato tsa Celsius:

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

E potlakile ebile e bonolo, ha ho hlokahale hore u thehe lintho tse sa hlokahaleng tsa data le ho boloka nalane ho tsona, hape u ka sebelisa linako tse feto-fetohang bakeng sa licheke.

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript

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

Empa, haeba maemong a inahaneloang hoa hlokahala ho kenyelletsa karolo ea data e amohetseng, mohlala, ka ntho efe kapa efe e hlalosoang ka linako tsohle ho macro, ho tlameha ho nahanoa hore parameter. boleng e atoloha ho ba khoele. Ts'ebetsong ea ho kenyelletsa likhoele, likhoele tse peli li kopanngoa feela hore e be e le 'ngoe.

Re rarolla mathata a sebetsang ho Zabbix re sebelisa JavaScript

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

Ho fumana sephetho sa ts'ebetso ea lipalo, hoa hlokahala ho fetolela mefuta ea boleng bo fumanoeng hore e be sebopeho sa linomoro. Ho etsa sena, o ka sebelisa sesebelisoa parseInt(), e hlahisang palo e feletseng, mosebetsi ParseFloat(), e hlahisang decimal, kapa mosebetsi palo, e khutlisetsang palo e felletseng kapa decimal.

Mosebetsi oa 2

Fumana nako ka metsotsoana ho fihlela qetellong ea setifikeiti.

Boemo: tšebeletso e fana ka letsatsi la ho fela ha setifikeiti ka mokhoa oa "Feb 12 12:33:56 2022 GMT".

Ho ECMAScript5 date.parse() e amohela letsatsi ka sebopeho sa ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Hoa hlokahala ho kenya khoele ho eona ka mokhoa oa MMM DD YYYY HH:mm:ss ZZ

bothata: Theko ea khoeli e hlahisoa e le mongolo, eseng joalo ka nomoro. Lintlha tsa sebopeho sena ha li amoheloe ke Duktape.

Mohlala oa tharollo:

  • Pele ho tsohle, ho phatlalatsoa phapang e nkang boleng (sengoloa kaofela ke phatlalatso ea mefuta e thathamisitsoeng e arotsoe ke lifeheloa).

  • Moleng oa pele re fumana letsatsi ka parameter boleng le ho e arola ka libaka ka ho sebelisa mokhoa Arohane. Kahoo, re fumana lethathamo, moo karolo ka 'ngoe ea sehlopha, ho qala ho index 0, e tsamaellanang le karolo e le 'ngoe ea letsatsi pele le kamora sebaka. karohano(0) - khoeli, karohano(1) - nomoro, karohano(2) - khoele e nang le nako, joalo-joalo Ka mor'a moo, karolo e 'ngoe le e' ngoe ea letsatsi e ka fumanoa ka index ka lihlopha.

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

  • Khoeli e 'ngoe le e 'ngoe (ka tatellano ea liketsahalo) e lumellana le index ea boemo ba eona ka lihlopha (ho tloha ho 0 ho ea ho 11). Ho fetolela boleng ba mongolo ho boleng ba linomoro, e 'ngoe e kenyelletsoa ho index ea khoeli (hobane likhoeli li baloa ho qala ho 1). Tabeng ena, polelo e nang le ho eketsoa ha e 'ngoe e nkoa ka masakaneng, hobane ho seng joalo khoele e tla fumanoa, eseng palo. Qetellong re etsa joalo selae() - khaola sehlopha ho tloha qetellong ho siea litlhaku tse peli feela (tse bohlokoa bakeng sa likhoeli tse nang le nomoro ea linomoro tse peli).

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

  • Re theha khoele ka sebopeho sa ISO ho tsoa ho boleng bo fumanoeng ka kenyelletso e tloaelehileng ea likhoele ka tatellano e nepahetseng.

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

Lintlha ka sebopeho se hlahisoang ke palo ea metsotsoana ho tloha 1970 ho isa nakong e tlang. Ho batla ho sa khonehe ho sebelisa data ka mokhoa o amoheloang ka li-trigger, hobane Zabbix e u lumella ho sebetsa feela ka li-macros. {Letsatsi} и {Nako}, e khutlisetsang letsatsi le nako ka mokhoa o bonolo oa basebelisi.

  • Joale re ka fumana letsatsi la hajoale ho JavaScript ka sebopeho sa Unix Timestamp mme re e tlose ho tloha letsatsing la ho felloa ke nako ha setifikeiti ho fumana palo ea li-milliseconds ho tloha joale ho fihlela setifikeiti se felloa ke nako.

`now = Date.now();`

  • Re arola boleng bo amoheloang ka sekete ho fumana metsotsoana ho Zabbix.

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

Ho trigger, o ka hlakisa polelo 'ho qetela' e lateloa ke lenane la linomoro tse tsamaellanang le palo ea metsotsoana nakong eo u batlang ho arabela ka eona, mohlala, ka libeke. Kahoo, sesosa se tla tsebisa hore setifikeiti se fela ka beke.

TIISETSO. Ela hloko tšebeliso parseInt() mosebetsing khutleleho fetolela palo ea palo e bakoang ke karohano ea milliseconds ho ea ho palo e felletseng. U ka boela ua sebelisa ParseFloat() le ho boloka data ea likaroloana.

Shebella tlaleho

Source: www.habr.com

Eketsa ka tlhaloso