Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript
Tikhon Uskov, Zabbix integration otu injinia

Zabbix bụ ikpo okwu nwere ike ịhazi nke a na-eji nyochaa ụdị data ọ bụla. Kemgbe ụdị mbụ nke Zabbix, ndị na-ahụ maka nleba anya nwere ike iji scripts dị iche iche mee ihe omume maka nlele anya na oghere netwọkụ ezubere iche. N'otu oge ahụ, mmalite nke edemede mere ka ọtụtụ ihe isi ike, gụnyere dị ka mkpa ịkwado edemede, nnyefe ha na nodes nkwurịta okwu na proxies, yana nkwado maka nsụgharị dị iche iche.

Javascript maka Zabbix

N'April 2019, ewebata Zabbix 4.2 na nhazi Javascript. Ọtụtụ ndị nwere obi ụtọ banyere echiche ịhapụ ederede ederede na-ewe data ebe, gbarie ya ma nye ya n'ụdị nke Zabbix ghọtara, ma mee nyocha dị mfe nke ga-enweta data nke na-adịghị njikere maka nchekwa na nhazi site na Zabbix, na wee hazie iyi data a site na iji ngwaọrụ Zabbix na JavaScript. Na njikọ na nchọpụta dị ala yana ihe dabere na pụtara na Zabbix 3.4, anyị nwetara echiche na-agbanwe agbanwe maka nhazi na ijikwa data natara.

Na Zabbix 4.4, dị ka ezi uche na-aga n'ihu nke tupu nhazi na Javascript, usoro ngosi ọhụrụ apụtala - Webhook, nke enwere ike iji mee ka ozi Zabbix dị mfe na ngwa ndị ọzọ.

Javascript na Duktapes

Kedu ihe kpatara eji họrọ JavaScript na Duktape? A tụlere nhọrọ dị iche iche maka asụsụ na injin:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Edebere Python
  • agbakwunyere Perl

Isi nhọrọ nhọrọ bụ njupụta, ịdị mfe nke ntinye nke injin n'ime ngwaahịa ahụ, obere ihe oriri na arụ ọrụ nke injin ahụ, yana nchekwa nke iwebata koodu n'asụsụ a n'ime nlekota oru. Dabere na nchikota nke ihe ngosi, Javascript meriri na injin Duktape.

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript

Nhọrọ nhọrọ na ule arụmọrụ

Atụmatụ Duktape:

- Ọkọlọtọ ECMAScript E5/E5.1
- Modul Zabbix maka Duktape:

  • Zabbix.log () - na-enye gị ohere ide ozi nwere ọkwa dị iche iche nke nkọwa ozugbo n'ime ndekọ nke Zabbix Server, nke na-eme ka o kwe omume ịmekọrịta njehie, dịka ọmụmaatụ, na Webhook, na steeti sava.
  • CurlHttpRequest() - na-enye gị ohere ịrịọ arịrịọ HTTP na netwọkụ, nke ejiri Webhook dabere na ya.
  • atob() na btoa() - na-enye gị ohere itinye koodu na decode eriri n'ụdị Base64.

MARA. Duktape na-akwado ụkpụrụ ACME. Zabbix na-eji ụdị edemede 2015. Mgbanwe ndị na-esote dị obere, yabụ enwere ike ileghara ha anya..

Javascript anwansi

Anwansi niile nke Javascript dabere na mpịnye ike na ụdị nkedo: eriri, ọnụọgụ, na boolean.

Nke a pụtara na ọ dịghị mkpa ikwupụta tupu oge eruo ụdị mgbanwe kwesịrị iweghachi uru.

N'ime mgbakọ na mwepụ, a na-atụgharị ụkpụrụ nke ndị na-arụ ọrụ na-eweghachi na ọnụọgụ. Ewezuga ọrụ ndị dị otú ahụ bụ mgbakwunye, n'ihi na ọ bụrụ na ọ dịkarịa ala otu n'ime okwu ahụ bụ eriri, ntụgharị eriri na-etinye aka na usoro niile.

MARA. A na-etinyekarị usoro ndị na-akpata mgbanwe ndị dị otú ahụ n'ụdị nne na nna ihe ahụ, bara uru и tostring. bara uru a na-akpọ n'oge ntụgharị ọnụọgụgụ na mgbe niile tupu usoro ahụ tostring. Usoro bara uru ga-eweghachite ụkpụrụ mbụ, ma ọ bụghị ya, a na-eleghara nsonaazụ ya anya.

A na-akpọ usoro na ihe uruOF. Ọ bụrụ na ahụghị ya ma ọ bụ na ọ naghị eweghachi uru mbụ, a na-akpọ usoro ahụ tostring. Ọ bụrụ na usoro tostring ahụghị, na-achọ bara uru na prototype nke ihe ahụ, a na-emeghachi ihe niile ruo mgbe nhazi nke uru ahụ gwụchara na ụkpụrụ niile dị na okwu ahụ na-atụgharị n'otu ụdị.. Ọ bụrụ na ihe ahụ na-eme usoro tostring, nke na-eweghachi uru mbụ, mgbe ahụ ọ bụ ya ka a na-eji maka ntụgharị eriri. Agbanyeghị, nsonaazụ nke itinye usoro a abụghị naanị eriri.

Dịka ọmụmaatụ, ọ bụrụ maka ihe 'ihe' a kọwara usoro tostring,

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

usoro tostring na-eweghachite otu eriri ozugbo, mgbe ị na-agbakwunye eriri nwere nọmba, anyị na-enweta eriri glued:

`obj + 1 // '2001'` 

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

Ma ọ bụrụ na ị degharịa tostring, nke mere na usoro ahụ weghachi nọmba, mgbe agbakwunyere ihe ahụ, a ga-arụ ọrụ mgbakọ na mwepụ na ngbanwe ọnụọgụ ma nweta nsonaazụ nke mgbakwunye mgbakọ na mwepụ.

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

`obj + 1 // '2001'`

N'okwu a, ọ bụrụ na anyị na-eme mgbakwunye na eriri, a na-eme ntụgharị ntụgharị, anyị na-enwetakwa eriri glued.

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

Nke a bụ ihe kpatara ọnụ ọgụgụ buru ibu nke mmejọ site n'aka ndị ọrụ Javascript novice.

Usoro tostring ị nwere ike dee ọrụ ga-abawanye uru ihe dị ugbu a site na 1.

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript
Mmezu nke edemede ahụ, ma ọ bụrụhaala na mgbanwe ahụ hà nhata na 3, ọ bụkwa 4.

Ọ bụrụ na atụnyere nkedo (==), a na-eme usoro a oge ọ bụla tostring na uru mmụba ọrụ. N'ihi ya, na ntụnyere nke ọ bụla na-esote, uru na-abawanye. Enwere ike zere nke a site na iji ntụnyere enweghị nkedo (===).

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript
Ntụnyere na-enweghị ụdị nkedo

MARA. Ejila ntụle nkedo eme ihe na-enweghị isi.

Maka ederede dị mgbagwoju anya, dị ka Webhooks nwere mgbagha mgbagwoju anya, nke chọrọ iji tụnyere ụdị nkedo, a na-atụ aro ka ị dee akwụkwọ ndenye maka ụkpụrụ na-eweghachite mgbanwe ma na-edozi esemokwu na njehie.

Mgbasa ozi Webhook

N'ọgwụgwụ 2019 na mmalite 2020, ndị otu njikọta Zabbix na-arụsi ọrụ ike na-emepe Webhooks na ntinye nke igbe na-abịa na nkesa Zabbix.

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript
Njikọ na akwụkwọ

Na-ebu ụzọ

  • Ọbịbịa nke preprocessing na Javascript mere ka o kwe omume ịhapụ ọtụtụ ederede mpụga, ma ugbu a na Zabbix ị nwere ike nweta uru ọ bụla wee gbanwee ya na uru dị iche iche.
  • A na-eji koodu Javascript arụ ọrụ na Zabbix, nke, mgbe a chịkọtara ya na bytecode, a na-atụgharị ka ọ bụrụ ọrụ na-ewe otu uru dị ka paramita. uru dị ka eriri (ụdọ nwere ike ịnwe ma ọnụọgụ na ọnụọgụ).
  • Ebe ọ bụ na mmepụta bụ ọrụ, na njedebe nke edemede achọrọ nloghachi.
  • Enwere ike iji macros omenala na koodu.
  • Enwere ike ịbelata akụrụngwa ọ bụghị naanị na ọkwa sistemụ arụmọrụ, kamakwa na mmemme. A na-ekenye usoro nhazi ụzọ kacha nke megabytes 10 nke RAM yana oge ịgba ọsọ nke sekọnd 10.

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript

MARA. Uru oge nkwụsị nke 10 sekọnd dị nnọọ ukwuu, n'ihi na ịnakọta puku kwuru puku ihe data n'ime 1 sekọnd dị ka ihe ngosi "dị arọ" nke na-ebute ụzọ nwere ike belata Zabbix. Ya mere, a naghị atụ aro ka iji preprocessing mee ihe ederede Javascript zuru oke site na ihe a na-akpọ shadow data element (ihe ndị na-ekpo ọkụ), nke a na-agba naanị iji rụọ ọrụ nhazi..

Ị nwere ike ịlele koodu gị site na ule nhazi mbụ ma ọ bụ jiri ngwa 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`

Ọrụ bara uru

Ebumnuche 1

Dochie ihe agbakọrọ na nhazi ụzọ.

Ọnọdụ: Nweta okpomọkụ na Fahrenheit site na ihe mmetụta iji chekwaa na Celsius.

Na mbụ, anyị ga-emepụta ihe na-anakọta okpomọkụ na ogo Fahrenheit. Mgbe nke ahụ gasịrị, ihe data ọzọ (gbakọọ) nke ga-agbanwe Fahrenheit na Celsius site na iji usoro.

Nsogbu:

  • Ọ dị mkpa ịmegharị ihe data ma chekwaa ụkpụrụ niile na nchekwa data.
  • Ị ga-ekwenyerịrị na etiti oge maka ihe data "nne na nna" nke agbakọrọ ma jiri ya mee ihe na usoro, yana maka ihe data gbakọrọ. Ma ọ bụghị ya, ihe agbakọtara nwere ike ịbanye na steeti na-akwadoghị ma ọ bụ gbakọọ uru gara aga, nke ga-emetụta ntụkwasị obi nke nsonaazụ nlekota.

Otu ihe ngwọta bụ ịpụ na oge nlele na-agbanwe agbanwe iji kwado oge a kapịrị ọnụ iji hụ na a na-enyocha ihe agbakọtara mgbe ihe ahụ natara data (n'ọnọdụ anyị, okpomọkụ dị na degrees Fahrenheit).

Ma ọ bụrụ na, dịka ọmụmaatụ, anyị na-eji template iji lelee ọnụ ọgụgụ dị ukwuu nke ngwaọrụ, na nlele na-eme otu ugboro kwa 30 sekọnd, Zabbix "hacks" maka 29 sekọnd, na nke ikpeazụ nke abụọ ọ na-amalite ịlele na ịgbakọ. Nke a na-emepụta kwụ n'ahịrị ma na-emetụta arụmọrụ. Ya mere, a na-atụ aro ka iji oge nkwụsịtụ naanị ma ọ bụrụ na ọ dị mkpa n'ezie.

N'ime nsogbu a, ihe ngwọta kachasị mma bụ nhazi Javascript nke na-agbanwe ogo Fahrenheit na degrees Celsius:

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

Ọ dị ngwa ma dị mfe, ọ dịghị mkpa ka ịmepụta ihe data na-adịghị mkpa ma debe akụkọ ihe mere eme na ha, ị nwekwara ike iji oge na-agbanwe agbanwe maka nlele.

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript

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

Ma, ọ bụrụ na n'ọnọdụ echiche, ọ dị mkpa ịgbakwunye ihe data natara, dịka ọmụmaatụ, na-akọwapụta mgbe niile na nnukwu macro, a ghaghị iburu n'uche na paramita ahụ. uru gbasaa n'ime eriri. Na ọrụ mgbakwunye eriri, a na-ejikọta eriri abụọ n'otu n'otu.

Anyị na-edozi nsogbu ndị bara uru na Zabbix site na iji Javascript

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

Iji nweta nsonaazụ nke ọrụ mgbakọ na mwepụ, ọ dị mkpa ịgbanwe ụdị ụkpụrụ enwetara na usoro ọnụọgụ. Maka nke a ị nwere ike iji ọrụ ahụ parseInt(), nke na-emepụta ọnụọgụgụ, ọrụ parseFloat(), nke na-emepụta mkpụrụ irighiri, ma ọ bụ ọrụ ọnụ ọgụgụ, nke na-eweghachite integer ma ọ bụ decimal.

Ọrụ 2

Nweta oge na sekọnd ruo ọgwụgwụ nke akwụkwọ.

Ọnọdụ: otu ọrụ na-enye ụbọchị ngwụcha akwụkwọ n'ụdị "Feb 12 12:33:56 2022 GMT".

Na ECMAScript5 date.parse() na-anabata ụbọchị n'ụdị ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Ọ dị mkpa ka a tụbara ya eriri n'ụdị MMM DD YYYY HH:mm:ss ZZ

nsogbu: A na-egosipụta uru ọnwa dị ka ederede, ọ bụghị dị ka nọmba. Duktape anabataghị data n'ụdị a.

Ihe atụ ngwọta:

  • Nke mbụ, a na-ekwupụta mgbanwe nke na-ewe uru (edemede dum bụ nkwupụta nke mgbanwe ndị e depụtara site na rịkọm).

  • N'ahịrị nke mbụ anyị na-enweta ụbọchị na paramita uru ma kewaa ya na oghere site na iji usoro Kewaa. Ya mere, anyị na-enweta nhazi, ebe ihe ọ bụla nke nhazi ahụ, malite na index 0, kwekọrọ na otu ụbọchị tupu na mgbe oghere gasịrị. nkewa (0) - ọnwa, nkewa (1) - nọmba, nkewa (2) - eriri nwere oge, wdg. Mgbe nke ahụ gasịrị, enwere ike ịnweta ihe ọ bụla nke ụbọchị site na index na n'usoro.

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

  • Ọnwa ọ bụla (n'usoro usoro oge) dabara na ndeksi nke ọnọdụ ya n'usoro (site na 0 ruo 11). Iji tọghata uru ederede ka ọ bụrụ uru ọnụọgụgụ, a na-agbakwunye otu na ndeksi ọnwa (n'ihi na a na-agụ ọnwa malite na 1). N'okwu a, a na-ewere okwu ahụ na mgbakwunye nke otu na brackets, n'ihi na ma ọ bụghị ya, a ga-enweta eriri, ọ bụghị nọmba. Na njedebe anyị na-eme iberi() - bechapụ usoro ahụ site na njedebe ka ịhapụ naanị mkpụrụedemede abụọ (nke dị mkpa maka ọnwa na ọnụọgụ ọnụọgụ abụọ).

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

  • Anyị na-etolite eriri na usoro ISO site na ụkpụrụ enwetara site na mgbakwunye nke eriri na mbụ n'usoro kwesịrị ekwesị.

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

Ihe data dị n'ụdị a ga-esi na ya pụta bụ ọnụọgụ nke sekọnd site na 1970 ruo oge ụfọdụ n'ọdịnihu. Ọ fọrọ nke nta ka ọ bụrụ na ọ gaghị ekwe omume iji data na usoro natara na ndị na-akpali akpali, n'ihi na Zabbix na-enye gị ohere iji naanị macro rụọ ọrụ {}Bọchị} и {Oge}, nke na-eweghachi ụbọchị na oge n'ụdị enyi na enyi.

  • Anyị nwere ike nweta ụbọchị dị ugbu a na Javascript n'ụdị Unix Timestamp wee wepụ ya na njedebe akwụkwọ njedebe iji nweta ọnụọgụ milliseconds site ugbu a ruo mgbe asambodo ahụ ga-agwụ.

`now = Date.now();`

  • Anyị na-eke uru natara site na otu puku iji nweta sekọnd na Zabbix.

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

Na mkpalite, ị nwere ike dee okwu 'ikpeazụ' sochiri otu nkeji nke dabara na ọnụọgụ nke sekọnd n'ime oge ịchọrọ ịzaghachi, dịka ọmụmaatụ, n'ime izu. N'ihi ya, ihe na-akpalite ga-agwa na akwụkwọ ahụ agwụ n'ime otu izu.

MARA. Lezienụ anya maka ojiji parseInt() na ọrụ nloghachika ịgbanwee ọnụọgụ irighiri nke sitere na nkewa nke milliseconds ka ọ bụrụ integer. Ị nwekwara ike iji parseFloat() ma chekwaa data pere mpe.

Lelee akụkọ

isi: www.habr.com

Tinye a comment