Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay
Tikhon Uskov, Zabbix integration team engineer

Zabbix dia sehatra azo zahana ampiasaina hanaraha-maso ny angon-drakitra rehetra. Hatramin'ny dikan-teny voalohany amin'ny Zabbix, ny mpitantana ny fanaraha-maso dia nanana fahafahana mampandeha script isan-karazany amin'ny alàlan'ny Actions ho an'ny fanamarinana ny node tambajotra kendrena. Nandritra izany fotoana izany, ny fandefasana script dia nitarika fahasahiranana maro, anisan'izany ny ilaina hanohanana ny script, ny fandefasana azy ireo amin'ny node sy ny proxy, ary koa ny fanohanana ny dikan-teny samihafa.

JavaScript ho an'ny Zabbix

Tamin'ny Aprily 2019, Zabbix 4.2 dia nampidirina miaraka amin'ny fampiasa mialoha ny fanodinana JavaScript. Maro ny olona no tonga amin'ny hevitra ny hiala amin'ny fanoratana script izay maka angon-drakitra any ho any, mandevona azy io ary manome azy amin'ny endrika takatry ny Zabbix, fa kosa manao fisavana tsotra izay hahazo angona izay tsy vonona ho an'ny fitehirizana sy ny fanodinana. Zabbix, ary asio ity fikorianan'ny data ity amin'ny alàlan'ny fitaovana Zabbix sy JavaScript. Miaraka amin'ny fikarohana ambany sy singa miankina amin'ny angon-drakitra, izay niseho tao amin'ny Zabbix 3.4, ny vokatra dia foto-kevitra mora azo amin'ny fanasokajiana sy fitantanana ny angona voaray.

Ao amin'ny Zabbix 4.4, ho fanohizana lojika amin'ny fanodinana amin'ny JavaScript, dia nisy fomba fampandrenesana vaovao niseho - Webhook, izay azo ampiasaina mba hampidirana mora foana ny fampandrenesana Zabbix amin'ny fampiharana an'ny antoko fahatelo.

JavaScript sy Duktape

Nahoana no nofidina ny JavaScript sy Duktape? Safidy isan-karazany ho an'ny fiteny sy motera no nodinihina:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • JavaScript - JerryScript
  • Python embedded
  • Perl napetraka

Ny fepetra fisafidianana lehibe dia ny fihanaky ny aretina, ny fanamorana ny fampidirana ny motera amin'ny vokatra, ny fanjifana loharanon-karena ambany ary ny fahombiazan'ny motera amin'ny ankapobeny, ary ny fiarovana ny fampiharana ny fehezan-dalàna amin'ity fiteny ity amin'ny fanaraha-maso. Miorina amin'ny fitambaran'ny tondro dia nandresy ny JavaScript amin'ny motera Duktape.

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay

Fepetra fifantenana sy fitsapana fahombiazana

Toetran'ny Duktape:

— Manara-penitra ECMAScript E5/E5.1
- Zabbix modules ho an'ny Duktape:

  • Zabbix.log() - mamela anao hanoratra hafatra amin'ny ambaratonga samihafa amin'ny antsipiriany mivantana ao amin'ny Zabbix Server log, izay ahafahana mampitaha lesoka, ohatra, ao amin'ny Webhook amin'ny fanjakana server.
  • CurlHttpRequest() - mamela anao hanao fangatahana HTTP amin'ny tambajotra, izay iorenan'ny Webhook.
  • atob() sy btoa() - ahafahanao manidy sy mamadika tady amin'ny endrika Base64.

FANAMARIHANA. Duktape dia manaraka ny fenitra ACME. Zabbix dia mampiasa ny dikan-teny 2015 amin'ny script. Ny fiovana manaraka dia kely ary azo atao tsinontsinona.

Ny majika JavaScript

Ny majika rehetra amin'ny JavaScript dia mipetraka amin'ny fanoratana mavitrika sy karazana fanariana: string, numeric ary boolean.

Midika izany fa tsy ilaina ny manambara mialoha ny karazana tokony haverin'ilay variable.

Amin'ny asa matematika, ny soatoavina naverin'ny mpandraharaha miasa dia avadika ho isa. Ny singa iray amin'ny asa toy izany dia ny fanampim-panampiana, satria raha farafaharatsiny ny iray amin'ireo teny dia tady, ny fiovam-pony dia ampiharina amin'ny teny rehetra.

FANAMARIHANA. Ny fomba tompon'andraikitra amin'ny fanovana toy izany dia matetika ampiharina amin'ny prototypes object parent, valueOf и toString. valueOf antsoina mandritra ny fiovam-po amin'ny isa ary alohan'ny fomba toString. FOMBA valueOf tsy maintsy mamerina ny soatoavina primitive, raha tsy izany dia tsy raharahaina ny vokany.

Ny fomba iray dia antsoina amin'ny zavatra iray valueOF. Raha tsy hita na tsy mamerina sanda primitive dia antsoina ny fomba toString. Raha ny fomba toString tsy hita, mitady valueOf ao amin'ny prototype an'ilay zavatra, ary averina daholo ny zava-drehetra mandra-pihodina ny sanda ary ny soatoavina rehetra ao amin'ny fitenenana dia alefa amin'ny karazana mitovy. Raha manana fomba fampiharana ilay zavatra toString, izay mamerina sanda primitive, dia ampiasaina amin'ny fiovam-pony. Na izany aza, ny vokatry ny fampiasana io fomba io dia tsy voatery ho tady.

Ohatra, raha ho an'ny zavatra 'zavatra' nofaritana ny fomba toString,

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

fomba toString mamerina ny tady, ary rehefa manampy ny tady miaraka amin'ny isa dia mahazo ny tady mitambatra:

`obj + 1 // '2001'` 

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

Fa raha manoratra indray ianao toStringMba hahafahan'ny fomba hamerenana isa, rehefa manampy zavatra iray, dia hisy hetsika matematika misy fiovam-po amin'ny isa ary ho azo ny vokatry ny fanampiana matematika.

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

`obj + 1 // '2001'`

Ankoatra izany, raha manao fanampim-panampiana amin'ny tady iray isika, dia misy fiovam-po amin'ny tady ary mahazo tady mitambatra.

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

Izany indrindra no antony mahatonga ny fahadisoana marobe nataon'ireo mpampiasa JavaScript vaovao.

Ny fomba toString Azonao atao ny mampiditra asa izay hampitombo ny sandan'ny zavatra amin'izao fotoana izao amin'ny 1.

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay
Ny fanatanterahana ny script raha toa ka mitovy amin'ny 3 ny variable, ary mitovy amin'ny 4 ihany koa.

Raha ampitahaina amin'ny karazana fanariana (==), ny fomba dia tanterahina isaky ny mandeha toString miaraka amin'ny asa mampitombo ny sanda. Araka izany, isaky ny fampitahana manaraka dia mitombo ny sandany. Azo alaina izany amin'ny fampiasana fampitahana tsy misy karazana fanariana (===).

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay
Fampitahana tsy misy karazana fanariana

FANAMARIHANA. Aza mampiasa fampitahana cast amin'ny tsy ilaina.

Ho an'ny sora-baventy sarotra, toy ny Webhook miaraka amin'ny lojika sarotra, izay ilaina ny fampitahana amin'ny karazana cast, dia asaina manoratra mialoha ny fisavana ny soatoavina izay miverina sy mitantana ny tsy fitovian-kevitra sy ny lesoka.

Webhook Media

Tamin'ny faran'ny taona 2019 sy ny fiandohan'ny taona 2020, ny ekipa fampidirana Zabbix dia nazoto namolavola ny Webhooks sy ny fampidirana ivelan'ny boaty izay miaraka amin'ny fizarana Zabbix.

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay
Rohy mankany tahirin-kevitra

Preprocessing

  • Ny fahatongavan'ny preprocessing amin'ny JavaScript dia nahafahana nandao ny ankamaroan'ny script ivelany, ary amin'izao fotoana izao ao amin'ny Zabbix dia afaka maka ny sanda rehetra ianao ary manova azy ho sanda hafa tanteraka.
  • Ny preprocessing ao amin'ny Zabbix dia ampiharina amin'ny code JavaScript, izay, rehefa natambatra ho bytecode, dia avadika ho asa izay maka sanda tokana ho paramètre. sarobidy toy ny tady (mety misy isa sy isa ny tady).
  • Satria ny vokatra dia asa, amin'ny faran'ny script dia ilaina izany hiverina.
  • Azo atao ny mampiasa macro mahazatra amin'ny kaody.
  • Ny loharanon-karena dia azo ferana tsy amin'ny ambaratongan'ny rafitra miasa, fa amin'ny programa ihany koa. Ny dingana mialoha ny fanodinana dia omena 10 megabytes RAM faratampony ary fe-potoana 10 segondra.

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay

FANAMARIHANA. Ny sandan'ny fe-potoana 10 segondra dia tena lehibe, satria ny fanangonana singa an'arivony ao anatin'ny 1 segondra amin'ny fampiasana toe-javatra mialoha ny fanodinana "mavesatra" dia mety hampiadana an'i Zabbix. Noho izany, tsy soso-kevitra ny hampiasa mialoha ny fanatanterahana ny script JavaScript feno amin'ny alàlan'ny antsoina hoe singa angon-drakitra aloka (zavatra dummy), izay natomboka fotsiny mba hanatanterahana mialoha..

Azonao atao ny manamarina ny kaodinao amin'ny alàlan'ny fitsapana mialoha na amin'ny fampiasana ny fitaovana 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`

Olana azo ampiharina

asa 1

Soloy amin'ny préprocessing ny singa angona kajy.

toe-javatra: Raiso ny mari-pana amin'ny mari-pahaizana Fahrenheit avy amin'ny sensor mba hitahiry ao amin'ny mari-pahaizana Celsius.

Teo aloha dia namorona singa angon-drakitra izahay izay nanangona ny mari-pana amin'ny mari-pahaizana Fahrenheit. Aorian'izay, misy singa iray hafa momba ny angona (kajy) izay hampiasa raikipohy hamadika Fahrenheit ho Celsius.

olana:

  • Ilaina ny mandika ny singa data ary mitahiry ny soatoavina rehetra ao anaty angon-drakitra.
  • Tsy maintsy manaiky ny elanelam-potoana ho an'ny zavatra angon-drakitra "ray aman-dreny" izay kajy sy ampiasaina ao amin'ny formula sy ny singa data kajy ianao. Raha tsy izany dia mety hiditra amin'ny fanjakana tsy tohanana na hanisa ny sanda teo aloha ny singa angon-drakitra kajy, izay hisy fiantraikany amin'ny fahatokisan'ny valin'ny fanaraha-maso.

Vahaolana iray dia ny miala amin'ny elanelana fanaraha-maso mora azo hanohanana ny elanelana raikitra mba hahazoana antoka fa kajy ny zavatra angon-drakitra kajy aorian'ny zavatra angon-drakitra fandraisana (raha ny eto amintsika, ny mari-pana amin'ny degre Fahrenheit).

Fa raha, ohatra, mampiasa môdely mba hanamarinana fitaovana be dia be, ary ny fanamarinana dia atao indray mandeha isaky ny 30 segondra, Zabbix "slack" nandritra ny 29 segondra, ary amin'ny segondra farany dia manomboka manamarina sy manao kajy. Mamorona filaharana izany ary misy fiantraikany amin'ny fampisehoana. Noho izany, dia soso-kevitra ny mampiasa elanelam-potoana raikitra ihany raha tena ilaina.

Ho an'ity olana ity, ny vahaolana tsara indrindra dia ny fanodinana JavaScript tokana izay mamadika Fahrenheit ho Celsius:

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

Haingana sy tsotra izany, tsy mila mamorona singa angon-drakitra tsy ilaina ianao ary mitahiry tantara ao aminy, ary azonao atao koa ny mampiasa elanelam-potoana miovaova ho an'ny fisavana.

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay

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

Saingy, raha ao anatin'ny toe-javatra mipoitra dia ilaina ny manampy ny singa angona vokatra, ohatra, miaraka amin'ny tsy tapaka voafaritra amin'ny macro, dia ilaina ny mitadidy fa ny parameter sarobidy mivelatra ho andalana. Amin'ny asa fanampin'ny tady dia atambatra ho iray fotsiny ny tady roa.

Mamaha olana azo ampiharina amin'ny Zabbix mampiasa JavaScript izahay

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

Mba hahazoana ny vokatry ny asa matematika dia ilaina ny mamadika ireo karazana soatoavina azo ho endrika isa. Mba hanaovana izany, dia afaka mampiasa ny asa parseInt(), izay mamokatra integer, asa parseFloat(), izay mamokatra ampahany, na asa isa, izay mamokatra integer na ampahany desimal.

Asa 2

Raiso ny fotoana ao anatin'ny segondra mandra-pahatapitry ny taratasy fanamarinana.

toe-javatra: misy serivisy iray mamoaka ny daty lany daty fanamarinana amin'ny endrika "12 Feb 12:33:56 2022 GMT".

Ao amin'ny ECMAScript5 date.parse() manaiky daty amin'ny endrika ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Mila avadika ho tady amin'ny endrika MMM DD YYYY HH:mm:ss ZZ

olana: Ny sandan'ny volana dia aseho amin'ny soratra fa tsy amin'ny isa. Ny angona amin'ity endrika ity dia tsy eken'i Duktape.

Vahaolana ohatra:

  • Voalohany indrindra, ambara ny fari-piainana iray izay maka sandany (ny script iray manontolo dia fanambarana ny fari-piainana izay voatanisa misaraka amin'ny faingo).

  • Ao amin'ny andalana voalohany dia mahazo ny daty ao amin'ny parameter sarobidy ary saraho amin'ny habaka mampiasa ny fomba Saraho. Noho izany dia mahazo array isika izay ahitana singa tsirairay amin'ny array, manomboka amin'ny index 0, mifanitsy amin'ny singa daty iray mialoha sy aorian'ny habaka. mizara (0) - volana, mizara (1) - laharana, mizara (2) - tady misy fotoana, sns. Aorian'io, ny singa daty tsirairay dia azo idirana amin'ny alàlan'ny fanondroana ao amin'ny array.

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

  • Ny volana tsirairay (amin'ny filaharan'ny fotoana) dia mifanandrify amin'ny fanondroan'ny toerana misy azy ao amin'ny laharan-tariby (manomboka amin'ny 0 ka hatramin'ny 11). Raha hanova ny sandan'ny lahatsoratra ho sanda isa dia ampiana iray amin'ny tondro volana (satria manomboka amin'ny 1 ny laharan'ny volana). Amin'ity tranga ity, ny fitenenana miaraka amin'ny fanampiana iray dia raisina anaty fononteny, satria raha tsy izany dia ho tady ny vokatra fa tsy isa. Amin'ny farany dia manao fampisehoana izahay slice () - tapaho ny laharan-tariby avy any amin'ny farany mba tsy hamela afa-tsy tarehintsoratra roa (izay zava-dehibe mandritra ny volana maromaro misy isa roa).

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

  • Manangana tady amin'ny endrika ISO izahay avy amin'ny sanda azo amin'ny alàlan'ny fampidirana fotsiny ny tady amin'ny filaharana mety.

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

Ny angon-drakitra amin'ny endrika vokatra dia ny isan'ny segondra nanomboka tamin'ny 1970 ka hatramin'ny fotoana ho avy. Saika tsy azo atao ny mampiasa angon-drakitra amin'ny endrika vokatra amin'ny trigger, satria ny Zabbix dia mamela anao hiasa amin'ny macros ihany. {Daty} и {Fotoana}, izay mamerina ny daty sy ora amin'ny endrika mora vakiana.

  • Afaka maka ny daty amin'izao fotoana izao amin'ny JavaScript amin'ny endrika Unix Timestamp isika ary manaisotra izany amin'ny datin'ny fahataperan'ny taratasy fanamarinana mba hahazoana ny isan'ny milisegondra manomboka izao mandra-pahatapitry ny taratasy fanamarinana.

`now = Date.now();`

  • Zarainay amin'ny arivo ny sanda vokarina mba hahazoana segondra amin'ny Zabbix.

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

Amin'ny trigger dia azonao atao ny mamaritra ny teny hoe 'FARANY' ary andiana isa mifanandrify amin'ny isan'ny segondra amin'ny fe-potoana tokony hihetsika, ohatra, ao anatin'ny herinandro. Noho izany, ny trigger dia hampahafantatra fa ny taratasy fanamarinana dia tapitra ao anatin'ny herinandro.

FANAMARIHANA. Tandremo ny fampiasana parseInt() in function hiverinahanova ny isa fractional vokatry ny fizarana milliseconds ho integer. Azonao ampiasaina koa parseFloat() ary mitahiry angona fractional.

Jereo ny tatitra

Source: www.habr.com

Add a comment