Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript
Tikhon Uskov, Injiniyan ƙungiyar haɗin gwiwar Zabbix

Zabbix wani dandali ne wanda za'a iya daidaita shi wanda ake amfani dashi don saka idanu kowane irin bayanai. Tun daga farkon nau'ikan Zabbix, masu kula da kulawa sun sami ikon gudanar da rubutun daban-daban ta hanyar Actions don bincika kan nodes na cibiyar sadarwa da aka yi niyya. A lokaci guda kuma ƙaddamar da rubutun ya haifar da matsaloli da dama, ciki har da buƙatar tallafawa rubutun, isar da su zuwa nodes na sadarwa da proxies, da kuma tallafi ga nau'i daban-daban.

JavaScript don Zabbix

A cikin Afrilu 2019, Zabbix 4.2 an gabatar da shi tare da aiwatarwa na JavaScript. Mutane da yawa sun yi farin ciki da ra'ayin barin rubuta rubutun da ke ɗaukar bayanai a wani wuri, narke shi kuma samar da shi a cikin tsarin da Zabbix ya fahimta, da kuma yin bincike mai sauƙi wanda zai karbi bayanan da ba a shirya don ajiya da sarrafawa ta Zabbix ba, kuma sannan aiwatar da wannan bayanan ta amfani da kayan aikin Zabbix da JavaScript. A haɗe tare da gano ƙananan matakai da abubuwan dogaro waɗanda suka bayyana a cikin Zabbix 3.4, mun sami daidaitaccen ra'ayi don rarrabewa da sarrafa bayanan da aka karɓa.

A cikin Zabbix 4.4, a matsayin ci gaba mai ma'ana na aiwatarwa a cikin JavaScript, sabuwar hanyar sanarwa ta bayyana - Webhook, wanda za'a iya amfani dashi don haɗa sanarwar Zabbix cikin sauƙi tare da aikace-aikacen ɓangare na uku.

JavaScript da Duktapes

Me yasa aka zaɓi JavaScript da Duktape? An yi la'akari da zaɓuɓɓuka daban-daban don harsuna da injuna:

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

Babban ma'auni na zaɓi shine yaduwa, sauƙi na haɗa injin a cikin samfurin, ƙarancin amfani da albarkatu da aikin injin gabaɗaya, da amincin shigar da lambar a cikin wannan harshe cikin sa ido. Dangane da haɗuwa da alamomi, JavaScript ya ci nasara akan injin Duktape.

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript

Ma'aunin zaɓi da gwajin aiki

Siffofin Duktape:

- Standard ECMAScript E5/E5.1
- Zabbix modules na Duktape:

  • Zabbix.log() - yana ba ku damar rubuta saƙonni tare da matakai daban-daban na daki-daki kai tsaye a cikin log ɗin Zabbix Server, wanda ke ba ku damar daidaita kurakurai, misali, a cikin Webhook, tare da jihar uwar garken.
  • CurlHttpRequest() - yana ba ku damar yin buƙatun HTTP zuwa hanyar sadarwar, wanda aka dogara da amfani da Webhook.
  • atob() da btoa() - ba ka damar rufaffiyar da yanke kirtani a tsarin Base64.

NOTE. Duktape ya bi ka'idodin ACME. Zabbix yana amfani da sigar 2015 na rubutun. Canje-canje na gaba kaɗan ne, don haka ana iya yin watsi da su..

JavaScript Magic

Duk sihirin JavaScript ya ta'allaka ne a cikin bugu mai ƙarfi da nau'in simintin gyare-gyare: kirtani, lambobi, da boolean.

Wannan yana nufin cewa ba lallai ba ne a bayyana a gaba wane nau'in mai canzawa ya kamata ya dawo da ƙima.

A cikin ayyukan lissafi, ƙimar da masu aiki da ayyuka ke mayarwa ana canza su zuwa lambobi. Banda irin waɗannan ayyuka shine ƙari, saboda idan aƙalla ɗaya daga cikin sharuɗɗan shine kirtani, ana amfani da jujjuya kirtani akan duk sharuɗɗan.

NOTE. Hanyoyin da ke da alhakin irin waɗannan sauye-sauye yawanci ana aiwatar da su a cikin samfuran iyayen abu, darajarOf и zuwa String. darajarOf ake kira a lokacin jujjuya lambobi kuma koyaushe kafin hanyar zuwa String. Hanya darajarOf dole ne ya dawo da ƙima na farko, in ba haka ba a yi watsi da sakamakonsa.

Ana kiran hanya akan abu darajarOF. Idan ba a samo shi ba ko bai dawo da ƙima na farko ba, ana kiran hanyar zuwa String. Idan hanyar zuwa String ba a same shi ba, yana nema darajarOf a cikin samfurin abu, kuma duk abin da aka maimaita har sai an kammala sarrafa darajar kuma duk dabi'un da ke cikin magana an jefa su zuwa nau'i ɗaya.. Idan abu ya aiwatar da hanya zuwa String, wanda ke dawo da ƙima na farko, to shine ake amfani da shi don juyar da kirtani. Duk da haka, sakamakon yin amfani da wannan hanya ba dole ba ne kirtani.

Misali, idan don abu'abu' Hanyar da aka bayyana zuwa String,

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

Hanyar zuwa String ya dawo daidai kirtani, kuma lokacin ƙara kirtani tare da lamba, muna samun kirtani mai mannewa:

`obj + 1 // '2001'` 

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

Amma idan ka sake rubutawa zuwa String, ta yadda hanyar ta dawo da lamba, idan an ƙara abu, za a yi aikin lissafi tare da jujjuya lambobi kuma za a sami sakamakon ƙari na lissafi.

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

`obj + 1 // '2001'`

A wannan yanayin, idan muka yi ƙari tare da kirtani, ana yin jujjuya kirtani, kuma muna samun kirtani mai manne.

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

Wannan shine dalilin ɗimbin kurakurai na masu amfani da JavaScript na novice.

Hanyar zuwa String za ka iya rubuta aikin da zai ƙara darajar abin da ke yanzu da 1.

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript
Aiwatar da rubutun, in dai mai canzawa ya yi daidai da 3, kuma yana daidai da 4.

Idan aka kwatanta da simintin gyare-gyare (==), ana aiwatar da hanyar kowane lokaci zuwa String tare da aikin haɓaka darajar. Dangane da haka, tare da kowane kwatancen na gaba, ƙimar yana ƙaruwa. Ana iya guje wa wannan ta amfani da kwatancen da ba simintin ba (===).

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript
Kwatanta ba tare da nau'in simintin gyaran kafa ba

NOTE. Kar a Yi Amfani da Kwatancen Cast Ba dole ba.

Don hadaddun rubutun, kamar Webhooks tare da ma'ana mai rikitarwa, waɗanda ke buƙatar kwatanta da nau'in simintin gyare-gyare, ana ba da shawarar yin riga-kafi don ƙididdige ƙimar da ke dawo da masu canji da kuma magance rashin daidaituwa da kurakurai.

Webhook Media

A ƙarshen 2019 da farkon 2020, ƙungiyar haɗin gwiwar Zabbix ta kasance tana haɓaka Webhooks da haɗin kai na waje waɗanda suka zo tare da rarrabawar Zabbix.

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript
Haɗi zuwa takardun shaida

Gabatarwa

  • Zuwan preprocessing a cikin JavaScript ya ba da damar yin watsi da yawancin rubutun waje, kuma a halin yanzu a cikin Zabbix za ku iya samun kowane ƙima kuma ku canza shi zuwa ƙima daban-daban.
  • Preprocessing a Zabbix ana aiwatar da shi ta hanyar lambar JavaScript, wanda, lokacin da aka haɗa shi zuwa bytecode, ana canza shi zuwa aikin da ke ɗaukar ƙima ɗaya a matsayin ma'auni. darajar a matsayin kirtani (kirtani na iya ƙunsar duka lambobi da lamba).
  • Tun da fitarwa aiki ne, a ƙarshen rubutun ana buƙatar samu.
  • Yana yiwuwa a yi amfani da macros na al'ada a cikin lambar.
  • Ana iya iyakance albarkatun ba kawai a matakin tsarin aiki ba, har ma da shirye-shirye. Matakin da aka riga aka tsara an kasafta madaidaicin megabyte 10 na RAM da iyakar lokacin gudu na daƙiƙa 10.

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript

NOTE. Ƙimar ƙarewar lokaci na daƙiƙa 10 yana da yawa sosai, saboda tattara dubunnan abubuwan bayanai na sharaɗi a cikin daƙiƙa 1 bisa ga yanayin “nauyi” na farko na iya rage saurin Zabbix. Saboda haka, ba a ba da shawarar yin amfani da preprocessing don aiwatar da cikakkun rubutun JavaScript ta hanyar abin da ake kira abubuwan bayanan inuwa (abubuwan da ba a taɓa gani ba), waɗanda ake gudanar da su kawai don aiwatarwa..

Kuna iya bincika lambar ku ta hanyar gwajin riga-kafi ko amfani da kayan aiki 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`

Ayyuka masu amfani

Manufar 1

Sauya abin ƙididdigewa tare da aiwatarwa.

Yanayi: Sami zafin jiki a Fahrenheit daga firikwensin don adanawa a Celsius.

A baya can, za mu ƙirƙiri wani abu wanda ke tattara zafin jiki a cikin digiri Fahrenheit. Bayan haka, wani abu na bayanai (ƙididdiga) wanda zai canza Fahrenheit zuwa Celsius ta amfani da dabara.

Matsalolin:

  • Wajibi ne a kwafi abubuwan bayanan da adana duk dabi'u a cikin bayanan.
  • Dole ne ku yarda a kan tazarar abubuwan bayanan "iyaye" waɗanda aka ƙididdige su kuma aka yi amfani da su a cikin dabarar, da kuma abin ƙididdiga. In ba haka ba, abin da aka lissafta na iya shiga cikin yanayin mara tallafi ko ƙididdige ƙimar da ta gabata, wanda zai shafi amincin sakamakon sa ido.

Ɗaya daga cikin mafita ita ce matsawa daga tazara mai sassauƙa don neman ƙayyadaddun tazara don tabbatar da cewa an ƙididdige abin da aka ƙididdige bayan abin da ya karɓi bayanai (a cikin yanayinmu, zafin jiki a cikin digiri Fahrenheit).

Amma idan, alal misali, mun yi amfani da samfuri don bincika na'urori masu yawa, kuma ana yin rajistan sau ɗaya a kowane sakan 30, Zabbix "hacks" na 29 seconds, kuma a cikin dakika na ƙarshe ya fara dubawa da ƙididdigewa. Wannan yana haifar da jerin gwano kuma yana shafar aiki. Sabili da haka, ana ba da shawarar yin amfani da ƙayyadaddun tazara kawai idan yana da mahimmanci.

A cikin wannan matsala, mafi kyawun bayani shine tsarin JavaScript mai layi ɗaya wanda ke canza digiri Fahrenheit zuwa digiri Celsius:

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

Yana da sauri da sauƙi, ba kwa buƙatar ƙirƙirar abubuwan da ba dole ba kuma ku adana tarihi akan su, kuma kuna iya amfani da tazara mai sassauƙa don dubawa.

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript

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

Amma, idan a cikin yanayin hasashe yana da mahimmanci don ƙara abubuwan da aka karɓa, alal misali, tare da kowane ma'anar ma'anar macro, dole ne a la'akari da cewa siga. darajar yana faɗaɗa cikin kirtani. A cikin aikin ƙara kirtani, igiyoyi biyu ana haɗa su cikin ɗaya kawai.

Muna magance matsaloli masu amfani a cikin Zabbix ta amfani da JavaScript

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

Don samun sakamakon aikin lissafi, dole ne a canza nau'ikan ƙimar da aka samu zuwa tsarin lambobi. Don wannan zaka iya amfani da aikin parseInt(), wanda ke samar da lamba, aiki parseFloat(), wanda ke samar da ƙima, ko aiki lambar, wanda ke dawo da lamba ko adadi.

Aiki 2

Samu lokacin a cikin daƙiƙa har zuwa ƙarshen takaddun shaida.

Yanayi: sabis yana ba da ranar karewa takardar shedar a cikin tsari "Feb 12 12:33:56 2022 GMT".

A cikin ECMAScript5 kwanan wata.parse() yana karɓar kwanan wata a tsarin ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Wajibi ne a jefa kirtani zuwa gare shi ta hanyar MMM DD YYYY HH:mm:ss ZZ

matsala: Ana bayyana ƙimar watan azaman rubutu, ba azaman lamba ba. Duktape bai karɓi bayanai a cikin wannan tsari ba.

Misalin bayani:

  • Da farko, ana ayyana maɓalli wanda ke ɗaukar ƙima (dukan rubutun shine ayyana masu canji waɗanda aka jera su da waƙafi).

  • A cikin layin farko muna samun kwanan wata a cikin siga darajar kuma raba shi da sarari ta amfani da hanyar Rabu. Don haka, muna samun tsararru, inda kowane kashi na tsararrun, farawa daga index 0, yayi daidai da kashi ɗaya na kwanan wata kafin da bayan sarari. raba (0) - wata, raba (1) - lamba, raba (2) - kirtani tare da lokaci, da sauransu. Bayan haka, kowane kashi na kwanan wata za a iya isa ga ta fihirisa a cikin tsararru.

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

  • Kowane wata (a cikin tsarin lokaci) yayi daidai da ma'aunin matsayinsa a cikin tsararru (daga 0 zuwa 11). Don canza ƙimar rubutu zuwa ƙimar lambobi, ana ƙara ɗaya zuwa lissafin wata (saboda ana ƙidayar watanni suna farawa daga 1). A wannan yanayin, ana ɗaukar magana tare da ƙari na ɗaya a cikin maƙallan, saboda in ba haka ba za a sami kirtani, ba lamba ba. A karshen muna yi yanka() - yanke tsararru daga ƙarshen don barin haruffa biyu kawai (wanda ke da mahimmanci ga watanni tare da lamba biyu).

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

  • Muna ƙirƙirar kirtani a cikin tsarin ISO daga ƙimar da aka samu ta hanyar ƙari na yau da kullun na kirtani a cikin tsari da ya dace.

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

Bayanan da ke cikin tsarin da aka samu shine adadin seconds daga 1970 zuwa wani matsayi a nan gaba. Yana da kusan ba zai yiwu ba don amfani da bayanai a cikin tsarin da aka karɓa a cikin masu jawo, saboda Zabbix yana ba ku damar aiki kawai tare da macros {Kwanan wata} и {Lokaci}, wanda ke mayar da kwanan wata da lokaci a cikin tsarin mai amfani.

  • Daga nan za mu iya samun kwanan wata a cikin JavaScript a cikin tsarin Unix Timestamp kuma mu cire shi daga sakamakon ƙarshen satifiket don samun adadin millise seconds daga yanzu har sai takardar shaidar ta ƙare.

`now = Date.now();`

  • Muna raba darajar da aka karɓa ta dubu don samun daƙiƙa a cikin Zabbix.

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

A cikin faɗakarwa, za ku iya ƙayyade furcin'na ƙarshe' biye da saitin lambobi waɗanda suka dace da adadin daƙiƙa a cikin lokacin da kuke son amsawa, misali, cikin makonni. Don haka, mai faɗakarwa zai sanar da cewa takardar shaidar ta ƙare a cikin mako guda.

NOTE. Kula da amfani parseInt() cikin aiki samudon canza lambar juzu'i da ta samo asali daga rarraba millise seconds zuwa lamba. Hakanan zaka iya amfani parseFloat() da adana bayanan juzu'i.

Kalli rahoton

source: www.habr.com

Add a comment