Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript
Tikhon Uskov, Zabbix integration team engineer

Zabbix o se faʻasalalauga faʻapitoa e faʻaaogaina e mataʻituina soʻo se ituaiga faʻamatalaga. Talu mai le ulua'i fa'aliliuga o le Zabbix, ua i ai i le au pulega mata'ituina le tomai e fa'atautaia ai tusitusiga eseese e ala i gaoioiga mo su'esu'ega i nodes o feso'otaiga fa'atatau. I le taimi lava e tasi, o le faʻalauiloaina o tusitusiga na taʻitaʻia ai le tele o faʻafitauli, e aofia ai le manaʻomia o le lagolagoina o tusitusiga, o latou tuʻuina atu i nodes fesoʻotaʻiga ma sui, faʻapea foʻi ma le lagolago mo lomiga eseese.

JavaScript mo Zabbix

Ia Aperila 2019, na faʻaalia ai le Zabbix 4.2 ma le JavaScript preprocessing. O le toʻatele o tagata na fiafia i le manatu o le lafoaʻia o tusitusiga tusitusi e ave faʻamaumauga i se mea, eli ma tuʻuina atu i se faatulagaga e malamalama ai Zabbix, ma faia ni siaki faigofie o le a maua ai faʻamatalaga e le o saunia mo le teuina ma le gaosiga e Zabbix, ma ona fa'agasolo lea o fa'amaumauga fa'amaumauga e fa'aaoga ai meafaigaluega a le Zabbix ma le JavaScript. I le faʻatasi ai ma suʻesuʻega maualalo ma mea faʻalagolago na faʻaalia i le Zabbix 3.4, na matou maua ai se manatu faʻafetaui lelei mo le faʻavasegaina ma le puleaina o faʻamaumauga maua.

I le Zabbix 4.4, i le avea ai o se faʻaauau pea o le faʻagasologa muamua i le JavaScript, ua faʻaalia se auala faʻalauiloa fou - Webhook, lea e mafai ona faʻaaogaina e faigofie ai ona tuʻufaʻatasia faʻamatalaga a Zabbix ma faʻamatalaga lona tolu.

JavaScript ma Duktapes

Aisea na filifilia ai le JavaScript ma Duktape? O filifiliga eseese mo gagana ma afi na iloiloina:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python fa'apipi'i
  • Fa'amauina Perl

O ta'iala autu o filifiliga o le fa'asalalauina, faigofie o le tu'ufa'atasia o le afi i totonu o le oloa, maualalo le fa'aogaina o punaoa ma le fa'atinoga atoa o le afi, ma le saogalemu o le fa'aofiina o code i lenei gagana i le mata'ituina. Faʻavae i luga o le tuʻufaʻatasia o faʻailoga, ua manumalo le JavaScript i luga o le masini Duktape.

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript

Tulaga filifilia ma su'ega fa'atinoga

Fa'ailoga o Duktape:

— Tulaga ECMAScript E5/E5.1
- Zabbix modules mo Duktape:

  • Zabbix.log() - e mafai ai ona e tusia ni fe'au ma tulaga eseese o fa'amatalaga sa'o i totonu o le log o le Zabbix Server, lea e mafai ai ona fa'amaopoopo mea sese, mo se fa'ata'ita'iga, i totonu o le Webhook, fa'atasi ai ma le tulaga o le server.
  • CurlHttpRequest() - fa'atagaina oe e fai talosaga HTTP i le feso'ota'iga, lea e fa'avae ai le fa'aogaina o Webhook.
  • atob() ma le btoa() - fa'atagaina oe e fa'asolo ma fa'asolo laina i le Base64 format.

FAʻAALIGA. O le Duktape o loʻo tausisia tulaga ACME. Fa'aaoga e Zabbix le 2015 version of the script. O suiga mulimuli ane e laiti, o lea e mafai ona le amanaiaina..

JavaScript togafiti

O togafiti fa'amaneta uma o le JavaScript o lo'o taoto i le ta'i ma le fa'amomoli fa'aigoa: manoa, numera, ma le boolean.

O lona uiga e le mana'omia le fa'ailoa muamua po'o le a le ituaiga e tatau ona toe fa'afo'i ai e le fesuiaiga se tau.

I fa'agaioiga o le matematika, o tau na toe fa'afo'i mai e tagata fa'atino galuega e liua i numera. O le tuusaunoaga i ia gaioiga o le faʻaopoopoga, aua afai o se tasi o faʻamatalaga o se manoa, o le liua o manoa e faʻaoga i faaupuga uma.

FAʻAALIGA. O metotia e nafa ma ia suiga e masani ona faʻatinoina i faʻataʻitaʻiga matua o le mea, taua и toString. taua valaau i le taimi o le liua numera ma i taimi uma i luma o le metotia toString. Metotia taua e tatau ona toe fa'afo'i fa'atatau muamua, a leai e le amana'ia lona taunu'uga.

E ta'ua se metotia i luga o se mea tauaOF. Afai e le maua pe le toe faʻafoʻisia se tau muamua, e taʻua le metotia toString. Afai o le auala toString le maua, saili taua i le faʻataʻitaʻiga o le mea faitino, ma o mea uma e toe fai seʻia maeʻa le faʻagasologa o le tau ma o mea taua uma i le faʻamatalaga e lafo i le ituaiga tutusa. Afai o le mea faitino e faʻaaogaina se metotia toString, lea e toe faʻafoʻi mai ai se tau muamua, ona faʻaaogaina lea mo le liua o manoa. Ae ui i lea, o le taunuuga o le faʻaaogaina o lenei metotia e le o se manoa.

Mo se faʻataʻitaʻiga, afai mo le mea faitino 'mea faitino' auala ua faamatalaina toString,

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

metotia toString toe faafoi tonu se manoa, ma pe a faaopoopo se manoa ma se numera, matou te maua se manoa faʻapipiʻi:

`obj + 1 // '2001'` 

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

Ae afai e te toe tusi toString, ina ia toe faʻafoʻi mai e le metotia se numera, pe a faʻaopoopo le mea, o le a faia se faʻagaioiga faʻa-matematika ma se faʻaliliuga numera ma o le a maua ai le iʻuga o le faʻaopoopoga o le matematika.

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

`obj + 1 // '2001'`

I lenei tulaga, afai tatou te faia le faʻaopoopoga i se manoa, e faia se faʻaliliuga manoa, ma maua ai se manoa faʻapipiʻi.

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

O le mafuaʻaga lea o le tele o mea sese a tagata faʻaoga JavaScript.

Le auala toString e mafai ona e tusia se galuega e faʻateleina ai le tau o loʻo iai nei i le 1.

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript
Fa'atinoina o le tusitusiga, pe a fa'apea o le fesuiaiga e tutusa ma le 3, ma e tutusa fo'i ma le 4.

Pe a faʻatusatusa i se lafo (==), o le metotia e faʻatinoina i taimi taʻitasi toString fa'atasi ai ma galuega fa'atuputeleina tau. E tusa ai, ma faʻatusatusaga taʻitasi mulimuli ane, e faʻateleina le tau. E mafai ona aloese mai lenei mea e ala i le faʻaaogaina o faʻatusatusaga e le faʻasalalau (===).

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript
Fa'atusatusaga e aunoa ma le fa'amomoli ituaiga

FAʻAALIGA. Aua le Fa'aaogaina Fa'atusa Fa'ata'ita'i.

Mo faʻamatalaga lavelave, e pei o Webhooks ma faʻalavelave faʻapitoa, e manaʻomia le faʻatusatusaina ma le tuʻuina o ituaiga, e fautuaina e muaʻi tusi siaki mo tau e toe faʻafoʻi ai fesuiaiga ma taulimaina mea le tutusa ma mea sese.

Webhook Media

I le faaiuga o le 2019 ma le amataga o le 2020, o le Zabbix integration team o loʻo faʻamalosia le atinaʻeina o Webhooks ma fafo atu o le pusa tuʻufaʻatasiga e sau ma le tufatufaina o Zabbix.

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript
Link e fa'amaumauga

Faʻagasologa

  • O le oʻo mai o le muaʻi faʻaogaina i le JavaScript na mafai ai ona lafoaʻia le tele o tusitusiga i fafo, ma i le taimi nei i Zabbix e mafai ona e mauaina soʻo se tau ma liliu i se tau e matua ese lava.
  • Preprocessing i Zabbix o loʻo faʻatinoina e le JavaScript code, lea, pe a tuʻufaʻatasia i le bytecode, ua liua i se galuega e manaʻomia ai se tau e tasi e fai ma parakalafa. tāua e pei o se manoa (o se manoa e mafai ona aofia uma ai se numera ma se numera).
  • Talu ai o le gaioiga o se galuega, i le pito o le tusitusiga e manaʻomia foʻi.
  • E mafai ona fa'aogaina macros masani i le code.
  • O punaoa e mafai ona faʻatapulaʻaina e le gata i le faʻaogaina o faiga faʻaoga, ae faʻapea foʻi i polokalame. O le la'asaga muamua e tu'uina atu i le maualuga o le 10 megabytes o le RAM ma le taimi fa'atapula'a o le 10 sekone.

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript

FAʻAALIGA. Ole tau ole taimi ole 10 sekone e tele naua, aua o le aoina o le faitau afe o mea faʻamaumauga ile 1 sekone e tusa ai ma se faʻataʻitaʻiga "mamafa" muamua e mafai ona faʻagesegese ai Zabbix. O le mea lea, e le fautuaina le faʻaogaina o le muaʻi faʻaogaina e faʻatino ai faʻamaumauga JavaScript atoatoa e ala i mea e taʻua o elemene ata ata (mea dummy), ia e faʻatautaia naʻo le faʻatinoina o le faʻasologa..

E mafai ona e siaki lau code e ala i le suʻega muamua poʻo le faʻaaogaina o le aoga 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`

Galuega fa'atino

Faamoemoega 1

Sui mea ua fuafuaina i le mua'i fa'agaioiga.

Tulaga: Maua le vevela ile Fahrenheit mai le masini e teu ile Celsius.

I le taimi muamua, matou te faia se mea e aoina ai le vevela i tikeri Fahrenheit. A maeʻa lena, o le isi mea faʻamaumauga (faʻatusatusaina) e faʻaliliu ai le Fahrenheit i le Celsius e faʻaaoga ai se fua faʻatatau.

Faʻafitauli:

  • E manaʻomia le faʻaluaina o elemene faʻamaumauga ma teu uma tulaga taua i totonu o faʻamaumauga.
  • E tatau ona e malilie i taimi mo le "matua" mea faʻamaumauga o loʻo faʻatatauina ma faʻaaogaina i le fua faʻatatau, ma mo le mea faʻamaumauga fuafuaina. A leai, e mafai ona alu le mea fa'akomepiuta i se tulaga e le'i lagolagoina pe fa'atatau se tau muamua, lea o le a a'afia ai le fa'amaoni o taunu'uga mata'ituina.

O le tasi fofo o le alu ese mai taimi siaki fetuutuunai e fiafia i taimi tumau ina ia mautinoa o le mea faʻatusatusa e iloilo pe a maeʻa le mea e maua ai faʻamatalaga (i le matou tulaga, o le vevela i tikeri Fahrenheit).

Ae afai, mo se faʻataʻitaʻiga, matou te faʻaogaina le faʻataʻitaʻiga e siaki ai se numera tele o masini, ma o le siaki e faia i le tasi taimi i le 30 sekone, Zabbix "hacks" mo le 29 sekone, ma i le lona lua mulimuli e amata siaki ma fuafua. Ole mea lea e tupu ai se laina ma afaina ai le faatinoga. O le mea lea, e fautuaina e faʻaaoga taimi tumau pe a manaʻomia.

I lenei faʻafitauli, o le fofo sili ona lelei o se laina muamua JavaScript e faʻaliliuina tikeri Fahrenheit i tikeri Celsius:

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

E vave ma faigofie, e te le manaʻomia le fatuina o mea faʻamaumauga e le manaʻomia ma teu ai se tala faʻasolopito i luga oi latou, ma e mafai foi ona e faʻaogaina taimi fetuutuunai mo siaki.

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript

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

Ae, afai i se tulaga faʻapitoa e manaʻomia le faʻaopoopoina o le elemene faʻamaumauga na maua, mo se faʻataʻitaʻiga, faʻatasi ai ma soʻo se faʻamatalaga faifaipea i le macro, e tatau ona amanaia o le parakalafa. tāua fa'alautele i se manoa. I se fa'agaioiga fa'aopoopoina manoa, e lua lava manoa e tu'ufa'atasia i le tasi.

Matou te foia faʻafitauli faʻapitoa i Zabbix e faʻaaoga ai le JavaScript

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

Ina ia maua le faʻaiʻuga o le faʻaogaina o le matematika, e manaʻomia le faʻaliliuina o ituaiga o tau maua i se numera numera. Mo lenei mea e mafai ona e faʻaogaina le gaioiga parseInt(), lea e maua ai se integer, se galuega parseFloat(), lea e maua ai se tesimale, po o se galuega nūmera, lea e toe fa'afo'i ai le numera atoa po'o le tesimale.

Galuega 2

Maua le taimi i sekone seia oo i le faaiuga o le tusi faamaonia.

Tulaga: o se auaunaga e tuʻuina atu se aso e muta ai tusi faamaonia i le faatulagaga "Feb 12 12:33:56 2022 GMT".

I le ECMAScript5 date.parse() talia se aso ile ISO 8601 faatulagaga (YYYY-MM-DDTHH:mm:ss.sssZ). E tatau ona lafo i ai se manoa i le faatulagaga MMM DD YYYY HH:mm:ss ZZ

faafitauli: O le tau o le masina o loʻo faʻaalia o se tusitusiga, ae le o se numera. O faʻamatalaga i lenei faatulagaga e le taliaina e Duktape.

Fa'ata'ita'iga fofo:

  • Muamua, o se fesuiaiga e faʻaalia e manaʻomia ai se tau (o le tusitusiga atoa o se taʻutinoga o fesuiaiga o loʻo lisiina e vavaeeseina e koma).

  • I le laina muamua tatou te maua le aso i le parakalafa tāua ma tuueseese i avanoa e faaaoga ai le auala vaelua. O le mea lea, matou te maua se laina, lea o elemene taʻitasi o le faʻasologa, amata i le index 0, e fetaui ma le tasi aso elemene i luma ma pe a uma se avanoa. vaelua(0) - masina, vaelua(1) - numera, vaelua(2) - o se manoa ma le taimi, ma isi. A maeʻa lena, o elemene taʻitasi o le aso e mafai ona faʻaogaina e ala i le faasino igoa i le laina.

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

  • O masina taʻitasi (i le faʻasologa o taimi) e fetaui ma le faʻailoga o lona tulaga i le faʻasologa (mai le 0 i le 11). Ina ia faaliliu se tau o tusitusiga i se tau numera, e faaopoopo le tasi i le faasinoupu o le masina (ona o masina e faanumera amata i le 1). I lenei tulaga, o le faʻamatalaga ma le faʻaopoopoga o le tasi e ave i puipui, aua a leai o le a maua se manoa, ae le o se numera. I le faaiuga tatou te faia tipi() - tipi le laina mai le pito e tuʻu ai naʻo le lua mataitusi (lea e taua mo masina ma se numera lua-numera).

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

  • Matou te faia se manoa i le ISO format mai tau na maua e ala i le faʻaopoopoga masani o manoa i le faasologa talafeagai.

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

O faʻamaumauga i le faʻatulagaina o le numera o sekone mai le 1970 i se taimi i le lumanaʻi. E toetoe lava a le mafai ona faʻaogaina faʻamatalaga i le faʻatulagaina na maua i faʻaoso, aua o le Zabbix e faʻatagaina oe e faʻaogaina naʻo macros. {Aso} и {Taimi}, lea e toe fa'afo'i le aso ma le taimi i se faiga fa'aoga-fa'aoga.

  • Ona mafai lea ona tatou maua le aso nei i le JavaScript i le Unix Timestamp format ma toesea mai le aso e muta ai le tusi faamaonia e maua ai le numera o milliseconds mai le taimi nei seia maeʻa le tusi faamaonia.

`now = Date.now();`

  • Matou te vaevaeina le tau na maua i le afe e maua ai sekone i Zabbix.

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

I le faʻaoso, e mafai ona e faʻamaonia le faʻamatalaga 'mulimuli' sosoo ai ma se seti o numera e fetaui ma le numera o sekone i le vaitau e te manaʻo e tali atu ai, mo se faʻataʻitaʻiga, i vaiaso. O le mea lea, o le a logoina e le faʻaoso o le tusi faamaonia e muta i le vaiaso.

FAʻAALIGA. Faalogo ile faʻaaogaina parseInt() i galuega foʻie faaliliu ai le numera vaevaega e mafua mai i le vaevaeina o milliseconds i se numera atoa. E mafai foi ona e faʻaaogaina parseFloat() ma teu fa'amatalaga ninii.

Matamata lipoti

puna: www.habr.com

Faaopoopo i ai se faamatalaga