Peb daws cov teeb meem hauv Zabbix siv JavaScript

Peb daws cov teeb meem hauv Zabbix siv JavaScript
Tikhon Uskov, Zabbix integration team engineer

Zabbix yog lub platform customizable uas yog siv los saib xyuas txhua yam ntaub ntawv. Txij li thaum ntxov versions ntawm Zabbix, saib xyuas cov thawj coj muaj peev xwm khiav ntau yam ntawv ntawm kev nqis tes ua rau kev txheeb xyuas ntawm lub hom phiaj network nodes. Nyob rau tib lub sijhawm, kev tshaj tawm cov ntawv sau ua rau muaj ntau yam teeb meem, suav nrog xws li kev xav tau los txhawb cov ntawv sau, lawv xa mus rau cov kev sib txuas lus thiab cov neeg sawv cev, nrog rau kev txhawb nqa rau cov ntawv sib txawv.

JavaScript rau Zabbix

Lub Plaub Hlis 2019, Zabbix 4.2 tau qhia nrog JavaScript ua ntej. Ntau tus neeg tau txais kev zoo siab rau lub tswv yim ntawm kev tso tseg cov ntawv sau uas muab cov ntaub ntawv nyob qhov twg, zom nws thiab muab nws ua ib hom ntawv uas Zabbix nkag siab, thiab ua cov kev kuaj xyuas yooj yim uas yuav tau txais cov ntaub ntawv uas tsis npaj rau kev khaws cia thiab ua tiav los ntawm Zabbix, thiab Tom qab ntawd ua cov ntaub ntawv no siv Zabbix thiab JavaScript cov cuab yeej. Ua ke nrog kev tshawb pom qis thiab cov khoom siv nyob hauv uas tau tshwm sim hauv Zabbix 3.4, peb tau txais lub tswv yim hloov tau yooj yim rau kev txheeb xyuas thiab tswj cov ntaub ntawv tau txais.

Nyob rau hauv Zabbix 4.4, raws li kev tshawb fawb txuas ntxiv ntawm kev ua ua ntej hauv JavaScript, txoj kev ceeb toom tshiab tau tshwm sim - Webhook, uas tuaj yeem siv tau yooj yim sib koom ua ke Zabbix cov ntawv ceeb toom nrog cov ntawv thov thib peb.

JavaScript thiab Duktapes

Vim li cas JavaScript thiab Duktape tau xaiv? Ntau yam kev xaiv rau hom lus thiab cav tau txiav txim siab:

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

Cov txheej txheem kev xaiv tseem ceeb yog kev nthuav dav, yooj yim ntawm kev sib koom ua ke ntawm lub cav rau hauv cov khoom, kev siv cov khoom siv tsawg thiab kev ua haujlwm tag nrho ntawm lub cav, thiab kev nyab xeeb ntawm kev qhia cov cai hauv cov lus no rau kev saib xyuas. Raws li kev sib xyaw ua ke ntawm cov ntsuas, JavaScript yeej ntawm Duktape lub cav.

Peb daws cov teeb meem hauv Zabbix siv JavaScript

Cov txheej txheem xaiv thiab kev ntsuas kev ua haujlwm

Feature ntawm Duktape:

- Txheem ECMAScript E5/E5.1
- Zabbix modules rau Duktape:

  • Zabbix.log() - tso cai rau koj sau cov lus nrog ntau theem ntawm kev nthuav dav ncaj qha rau hauv Zabbix Server cav, uas ua rau nws muaj peev xwm sib cuam tshuam qhov tsis raug, piv txwv li, hauv Webhook, nrog rau lub xeev server.
  • CurlHttpRequest() - tso cai rau koj ua HTTP thov rau lub network, uas siv Webhook raws li.
  • atob() thiab btoa() - tso cai rau koj mus encode thiab txiav txim siab cov hlua hauv Base64 hom.

CEEB TOOM. Duktape ua raws li ACME cov qauv. Zabbix siv 2015 version ntawm tsab ntawv. Cov kev hloov tom ntej yog me me, yog li lawv tuaj yeem tsis quav ntsej..

JavaScript khawv koob

Tag nrho cov khawv koob ntawm JavaScript nyob rau hauv dynamic typing thiab ntaus casting: hlua, zauv, thiab boolean.

Qhov no txhais tau hais tias nws tsis tas yuav tsum tshaj tawm ua ntej yam hom kev hloov pauv yuav tsum rov qab tus nqi.

Hauv kev ua lej, cov txiaj ntsig rov qab los ntawm cov neeg ua haujlwm ua haujlwm tau hloov mus rau cov lej. Qhov kev zam rau cov haujlwm no yog ntxiv, vim tias tsawg kawg yog ib qho ntawm cov ntsiab lus yog ib txoj hlua, txoj hlua hloov dua siab tshiab yog siv rau txhua nqe lus.

CEEB TOOM. Cov txheej txheem ua lub luag haujlwm rau cov kev hloov pauv no feem ntau yog siv hauv cov khoom niam txiv prototypes, tus nqiOf ΠΈ to. tus nqiOf hu thaum lub sij hawm tus lej hloov dua siab tshiab thiab ib txwm ua ntej txoj kev to. Txoj kev tus nqiOf yuav tsum xa rov qab qhov tseem ceeb, txwv tsis pub nws cov txiaj ntsig yog tsis quav ntsej.

Ib txoj kev hu ua ib yam khoom tus nqiOF. Yog tias nws tsis pom lossis tsis rov qab tus nqi qub, txoj kev hu ua to. Yog txoj kev to nrhiav tsis tau, nrhiav tus nqiOf nyob rau hauv cov qauv ntawm cov khoom, thiab txhua yam yog rov ua dua kom txog thaum kev ua tiav ntawm tus nqi thiab tag nrho cov txiaj ntsig hauv cov lus qhia raug muab pov rau tib yam.. Yog cov khoom siv ib txoj kev to, uas xa rov qab tus nqi qub, ces nws yog nws uas yog siv rau txoj hlua hloov dua siab tshiab. Txawm li cas los xij, qhov tshwm sim ntawm kev siv cov qauv no tsis tas yuav yog ib txoj hlua.

Piv txwv li, yog rau cov khoom 'ob' txoj kev yog txhais to,

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

Txoj kev to rov qab raws nraim ib txoj hlua, thiab thaum ntxiv ib txoj hlua nrog tus lej, peb tau txais ib txoj hlua khi:

`obj + 1 // '2001'` 

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

Tab sis yog tias koj rov sau dua to, yog li ntawd txoj kev xa rov qab tus lej, thaum qhov khoom ntxiv, kev ua lej nrog kev hloov pauv tus lej yuav raug ua thiab cov txiaj ntsig ntawm kev ua lej ntxiv yuav tau txais.

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

`obj + 1 // '2001'`

Nyob rau hauv rooj plaub no, yog tias peb ua ntxiv nrog ib txoj hlua, txoj hlua hloov dua siab tshiab tau ua, thiab peb tau txais ib txoj hlua khi.

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

Qhov no yog vim li cas rau ntau qhov yuam kev los ntawm cov neeg siv JavaScript novice.

Txoj kev to koj tuaj yeem sau ib txoj haujlwm uas yuav ua rau tus nqi tam sim no ntawm cov khoom los ntawm 1.

Peb daws cov teeb meem hauv Zabbix siv JavaScript
Kev ua tiav ntawm tsab ntawv, yog tias qhov sib txawv yog sib npaug rau 3, thiab nws kuj yog sib npaug rau 4.

Thaum muab piv nrog lub cam khwb cia (==), cov txheej txheem raug ua txhua zaus to nrog tus nqi nce ua haujlwm. Raws li, nrog rau txhua qhov sib piv tom qab, tus nqi nce. Qhov no tuaj yeem zam tau los ntawm kev siv qhov sib piv uas tsis yog-cam khwb cia (===).

Peb daws cov teeb meem hauv Zabbix siv JavaScript
Kev sib piv tsis muaj hom casting

CEEB TOOM. Tsis txhob siv Cast Comparison yam tsis tsim nyog.

Rau cov ntawv nyuaj, xws li Webhooks nrog cov logic nyuaj, uas xav tau kev sib piv nrog hom casting, nws raug nquahu kom sau ua ntej sau cov tshev rau qhov tseem ceeb uas xa rov qab hloov pauv thiab daws qhov tsis sib xws thiab ua yuam kev.

Webhook Media

Nyob rau thaum xaus ntawm 2019 thiab thaum ntxov 2020, Zabbix kev koom ua ke pab pawg tau nquag tsim Webhooks thiab kev sib koom ua ke tawm ntawm lub thawv uas tuaj nrog Zabbix faib.

Peb daws cov teeb meem hauv Zabbix siv JavaScript
Txuas rau cov ntaub ntawv

Npaj Ua Ntej

  • Qhov tshwm sim ntawm preprocessing nyob rau hauv JavaScript ua rau nws muaj peev xwm tso tseg feem ntau cov ntawv sab nraud, thiab tam sim no nyob rau hauv Zabbix koj tuaj yeem tau txais ib qho nqi thiab hloov nws mus rau qhov sib txawv kiag li.
  • Preprocessing nyob rau hauv Zabbix yog siv los ntawm JavaScript code, uas, thaum muab tso ua ke rau hauv bytecode, yog hloov dua siab tshiab rau hauv ib tug muaj nuj nqi uas yuav siv ib tug nqi raws li ib tug parameter. tus nqi raws li txoj hlua (ib txoj hlua tuaj yeem muaj tus lej thiab tus lej).
  • Txij li thaum cov zis yog ib qho haujlwm, qhov kawg ntawm tsab ntawv yuav tsum tau ua rov qab los.
  • Nws tuaj yeem siv kev cai macro hauv cov cai.
  • Cov peev txheej tuaj yeem txwv tsis yog nyob rau theem kev ua haujlwm nkaus xwb, tab sis kuj programmatically. Cov kauj ruam ua ntej yog faib qhov siab tshaj plaws ntawm 10 megabytes ntawm RAM thiab lub sijhawm khiav ntawm 10 vib nas this.

Peb daws cov teeb meem hauv Zabbix siv JavaScript

CEEB TOOM. Tus nqi sijhawm ntawm 10 vib nas this yog qhov ntau heev, vim tias kev sau ntau txhiab cov ntaub ntawv nyob rau hauv 1 thib ob raws li qhov "hnyav" ua ntej ua ntej tuaj yeem ua rau Zabbix qeeb. Yog li ntawd, nws tsis pom zoo kom siv preprocessing los ua kom tiav cov ntawv sau tag nrho ntawm JavaScript los ntawm qhov hu ua duab ntxoov ntxoo cov ntaub ntawv ntsiab lus (dummy khoom), uas tsuas yog ua haujlwm ua ntej..

Koj tuaj yeem tshawb xyuas koj cov cai los ntawm kev xeem ua ntej lossis siv cov khoom siv hluav taws xob 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`

Cov dej num ua tau zoo

Hom phiaj 1

Hloov cov khoom suav nrog preprocessing.

Mob: Tau qhov kub thiab txias hauv Fahrenheit los ntawm lub sensor khaws cia hauv Celsius.

Yav dhau los, peb yuav tsim ib yam khoom uas khaws cov kub hauv degrees Fahrenheit. Tom qab ntawd, lwm yam ntaub ntawv (xws li) uas yuav hloov Fahrenheit rau Celsius siv tus qauv.

Teeb meem:

  • Nws yog ib qho tsim nyog yuav tsum tau luam cov ntaub ntawv thiab khaws tag nrho cov txiaj ntsig hauv cov ntaub ntawv.
  • Koj yuav tsum pom zoo rau lub caij nyoog rau cov khoom "niam txiv" cov ntaub ntawv uas suav thiab siv hauv cov qauv, thiab rau cov khoom siv suav. Txwv tsis pub, cov khoom suav yuav nkag mus rau hauv lub xeev tsis muaj kev txhawb nqa lossis suav tus nqi yav dhau los, uas yuav cuam tshuam rau kev ntseeg tau ntawm kev soj ntsuam cov txiaj ntsig.

Ib qho kev daws teeb meem yog kom txav mus deb ntawm qhov hloov pauv hloov pauv nyob rau hauv kev pom zoo ntawm lub sijhawm ruaj khov kom ntseeg tau tias cov khoom suav tau raug ntsuas tom qab cov khoom uas tau txais cov ntaub ntawv (hauv peb qhov xwm txheej, qhov kub thiab txias hauv degrees Fahrenheit).

Tab sis yog tias, piv txwv li, peb siv cov qauv los kuaj xyuas cov khoom siv ntau, thiab daim tshev tau ua ib zaug txhua 30 vib nas this, Zabbix "hacks" rau 29 vib nas this, thiab thaum kawg thib ob nws pib tshawb xyuas thiab suav. Qhov no tsim ib kab thiab cuam tshuam kev ua haujlwm. Yog li ntawd, nws raug nquahu kom siv cov ntu ntu tsuas yog tias nws tsim nyog tiag tiag.

Hauv qhov teeb meem no, qhov kev daws teeb meem zoo tshaj plaws yog ib kab JavaScript ua ntej uas hloov cov degrees Fahrenheit rau degrees Celsius:

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

Nws yog qhov ceev thiab yooj yim, koj tsis tas yuav tsim cov ntaub ntawv tsis tsim nyog thiab khaws keeb kwm ntawm lawv, thiab koj tuaj yeem siv sijhawm hloov pauv rau kev kuaj xyuas.

Peb daws cov teeb meem hauv Zabbix siv JavaScript

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

Tab sis, yog hais tias nyob rau hauv ib tug hypothetical qhov teeb meem nws yog tsim nyog los ntxiv cov ntaub ntawv tau txais, piv txwv li, nrog ib tug tas mus li teev nyob rau hauv lub macro, nws yuav tsum tau muab coj mus rau hauv tus account tias parameter. tus nqi expands rau hauv ib txoj hlua. Nyob rau hauv ib txoj hlua ntxiv kev ua haujlwm, ob txoj hlua tsuas yog ua ke rau hauv ib qho.

Peb daws cov teeb meem hauv Zabbix siv JavaScript

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

Yuav kom tau txais cov txiaj ntsig ntawm kev ua lej, nws yog ib qho tsim nyog los hloov cov hom ntawm cov txiaj ntsig tau los ua tus lej. Rau qhov no koj tuaj yeem siv lub luag haujlwm parseInt(), uas tsim ib tug integer, muaj nuj nqi parseFloat(), uas ua rau tus lej, lossis ua haujlwm tooj, uas rov ua tus lej lossis lej.

Ua haujlwm 2

Tau txais lub sijhawm hauv vib nas this kom txog thaum kawg ntawm daim ntawv pov thawj.

Mob: ib qho kev pab cuam tawm hnub tas sij hawm daim ntawv pov thawj hauv hom "Feb 12 12:33:56 2022 GMT".

Hauv ECMAScript5 date.parse() lees txais hnub tim hauv ISO 8601 hom (YYYY-MM-DDTHH:mm:ss.sssZ). Nws yog tsim nyog los nrum ib txoj hlua rau nws nyob rau hauv hom MMM DD YYYY HH:mm:ss ZZ

teeb meem: Tus nqi hli yog qhia raws li cov ntawv nyeem, tsis yog tus lej. Cov ntaub ntawv hauv hom no tsis lees txais los ntawm Duktape.

Kev daws piv txwv:

  • Ua ntej tshaj plaws, qhov sib txawv tau tshaj tawm tias yuav siv tus nqi (tag nrho tsab ntawv yog ib qho kev tshaj tawm ntawm qhov sib txawv uas tau teev tseg sib cais los ntawm commas).

  • Hauv thawj kab peb tau txais hnub tim nyob rau hauv parameter tus nqi thiab cais nws nrog qhov chaw siv txoj kev cais. Yog li, peb tau txais ib qho array, qhov twg txhua lub ntsiab ntawm cov array, pib ntawm qhov ntsuas 0, sib raug rau ib hnub caij ua ntej thiab tom qab qhov chaw. faib (0) - hli, faib (1) - tus lej, faib (2) - ib txoj hlua nrog lub sijhawm, thiab lwm yam. Tom qab ntawd, txhua lub caij ntawm hnub tuaj yeem nkag tau los ntawm kev ntsuas hauv cov array.

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

  • Txhua lub hlis (nyob rau hauv chronological order) sib raug rau qhov Performance index ntawm nws txoj hauj lwm nyob rau hauv lub array (los ntawm 0 mus rau 11). Txhawm rau hloov tus nqi ntawv mus rau tus lej lej, ib qho ntxiv rau lub hli Performance index (vim lub hli raug suav txij li 1). Nyob rau hauv cov ntaub ntawv no, cov lus qhia nrog ntxiv ntawm ib tug yog coj nyob rau hauv brackets, vim hais tias txwv tsis pub ib txoj hlua yuav tau txais, tsis yog ib tug xov tooj. Thaum kawg peb ua hlais( ) - txiav cov array ntawm qhov kawg kom tawm tsuas yog ob lub cim (uas yog qhov tseem ceeb rau lub hlis nrog tus lej ob tus lej).

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

  • Peb tsim ib txoj hlua hauv ISO hom los ntawm qhov tau txais txiaj ntsig los ntawm kev sib ntxiv ntawm cov hlua ib txwm nyob rau hauv qhov kev txiav txim tsim nyog.

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

Cov ntaub ntawv nyob rau hauv lub resulting hom yog tus naj npawb ntawm vib nas this los ntawm 1970 mus rau ib co taw tes rau yav tom ntej. Nws yuav luag tsis yooj yim sua kom siv cov ntaub ntawv hauv cov ntawv tau txais hauv qhov tshwm sim, vim tias Zabbix tso cai rau koj ua haujlwm nrog macros nkaus xwb. {Hnub} ΠΈ {Lub Sijhawm}, uas rov qab hnub tim thiab lub sij hawm nyob rau hauv ib tug user-friendly hom ntawv.

  • Peb tuaj yeem tau txais hnub tam sim no hauv JavaScript hauv Unix Timestamp hom ntawv thiab rho tawm los ntawm daim ntawv pov thawj hnub tas sij hawm tau txais cov naj npawb milliseconds txij tam sim no mus txog rau thaum daim ntawv pov thawj tas sijhawm.

`now = Date.now();`

  • Peb faib tus nqi tau txais los ntawm ib txhiab kom tau txais vib nas this hauv Zabbix.

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

Nyob rau hauv qhov kev tshwm sim, koj tuaj yeem qhia qhov qhia 'kawg' ua raws li cov lej ntawm cov lej sib raug rau tus lej ntawm cov vib nas this hauv lub sijhawm uas koj xav teb, piv txwv li, hauv lub lis piam. Yog li, tus txhais yuav ceeb toom tias daim ntawv pov thawj tas sij hawm hauv ib lub lis piam.

CEEB TOOM. Them sai sai rau kev siv parseInt() hauv kev ua haujlwm rov qab loslos hloov cov zauv feem uas tshwm sim los ntawm kev faib milliseconds mus rau ib tug integer. Koj kuj siv tau parseFloat() thiab khaws cov ntaub ntawv fractional.

Saib daim ntawv qhia

Tau qhov twg los: www.hab.com

Ntxiv ib saib