A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript
Tikhon Uskov, Zabbix Integration egbe ẹlẹrọ

Zabbix jẹ pẹpẹ isọdi ti o lo lati ṣe atẹle eyikeyi iru data. Lati awọn ẹya akọkọ ti Zabbix, awọn alabojuto abojuto ti ni agbara lati ṣiṣe awọn iwe afọwọkọ lọpọlọpọ nipasẹ išë fun sọwedowo lori afojusun nẹtiwọki apa. Ni akoko kanna, ifilọlẹ awọn iwe afọwọkọ yori si awọn iṣoro pupọ, pẹlu bii iwulo lati ṣe atilẹyin awọn iwe afọwọkọ, ifijiṣẹ wọn si awọn apa ibaraẹnisọrọ ati awọn aṣoju, ati atilẹyin fun awọn ẹya oriṣiriṣi.

JavaScript fun Zabbix

Ni Oṣu Kẹrin ọdun 2019, Zabbix 4.2 ti ṣafihan pẹlu iṣaju JavaScript. Ọpọlọpọ eniyan ni inudidun nipa imọran ti ikọsilẹ awọn iwe afọwọkọ ti o mu data ni ibikan, ṣajọpọ rẹ ki o pese ni ọna kika ti Zabbix loye, ati ṣe awọn sọwedowo ti o rọrun ti yoo gba data ti ko ṣetan fun ibi ipamọ ati sisẹ nipasẹ Zabbix, ati lẹhinna ṣe ilana ṣiṣan data yii nipa lilo awọn irinṣẹ Zabbix ati JavaScript. Ni apapo pẹlu iṣawari ipele-kekere ati awọn ohun ti o gbẹkẹle ti o han ni Zabbix 3.4, a ni imọran ti o ni irọrun ti o ni ẹtọ fun tito lẹsẹsẹ ati iṣakoso data ti o gba.

Ni Zabbix 4.4, gẹgẹbi ilọsiwaju ọgbọn ti iṣaju-iṣaaju ni JavaScript, ọna ifitonileti tuntun ti han - Webhook, eyiti o le ṣee lo lati ṣafikun awọn iwifunni Zabbix ni irọrun pẹlu awọn ohun elo ẹnikẹta.

JavaScript ati Duktapes

Kini idi ti JavaScript ati Duktape ti yan? Awọn aṣayan oriṣiriṣi fun awọn ede ati awọn ẹrọ ni a gbero:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python ifibọ
  • Perl ti a fi sinu

Awọn ibeere yiyan akọkọ jẹ itankalẹ, irọrun ti iṣọpọ ẹrọ sinu ọja, agbara awọn orisun kekere ati iṣẹ ṣiṣe gbogbogbo ti ẹrọ, ati aabo ti iṣafihan koodu ni ede yii sinu ibojuwo. Da lori apapọ awọn olufihan, JavaScript bori lori ẹrọ Duktape.

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript

Aṣayan aṣayan ati idanwo iṣẹ

Awọn ẹya ti Duktape:

- Standard ECMAScript E5 / E5.1
- Awọn modulu Zabbix fun Duktape:

  • Zabbix.log () - faye gba o lati kọ awọn ifiranṣẹ pẹlu orisirisi awọn ipele ti apejuwe awọn taara sinu Zabbix Server log, eyi ti o mu ki o ṣee ṣe lati correlate aṣiṣe, fun apẹẹrẹ, ni a Webhook, pẹlu awọn olupin ipinle.
  • CurlHttpIbeere () - gba ọ laaye lati ṣe awọn ibeere HTTP si nẹtiwọọki, eyiti lilo Webhook da lori.
  • atob () ati btoa () - faye gba o lati fi koodu pamọ ati iyipada awọn gbolohun ọrọ ni ọna kika Base64.

AKIYESI. Duktape ni ibamu pẹlu awọn iṣedede ACME. Zabbix nlo ẹya 2015 ti iwe afọwọkọ naa. Awọn iyipada ti o tẹle jẹ kekere, nitorinaa wọn le ṣe akiyesi wọn..

idan JavaScript

Gbogbo idan ti JavaScript wa ni titẹ agbara ati iru simẹnti: okun, nomba, ati boolean.

Eyi tumọ si pe ko ṣe pataki lati sọ tẹlẹ iru iru oniyipada yẹ ki o da iye kan pada.

Ninu awọn iṣẹ ṣiṣe mathematiki, awọn iye ti o pada nipasẹ awọn oniṣẹ iṣẹ jẹ iyipada si awọn nọmba. Iyatọ si iru awọn iṣẹ bẹ jẹ afikun, nitori ti o ba jẹ pe o kere ju ọkan ninu awọn ofin naa jẹ okun, iyipada okun ni a lo si gbogbo awọn ofin.

AKIYESI. Awọn ọna ti o ni iduro fun iru awọn iyipada ni a maa n ṣe imuse ninu awọn apẹẹrẹ obi ti nkan naa, iyeOf и si okun. iyeOf ti a npe ni lakoko iyipada nọmba ati nigbagbogbo ṣaaju ọna naa si okun. Ọna iyeOf gbọdọ da awọn iye atijo pada, bibẹẹkọ abajade rẹ ko bikita.

Ọna kan ni a pe lori ohun kan iyeOF. Ti ko ba ri tabi ko da pada a atijo iye, awọn ọna ti wa ni a npe ni si okun. Ti o ba ti ọna si okun ko ri, wiwa iyeOf ninu apẹrẹ ti nkan naa, ati pe ohun gbogbo ni a tun ṣe titi ti iṣelọpọ iye yoo pari ati gbogbo awọn iye ninu ikosile naa ni a sọ si iru kanna.. Ti ohun naa ba ṣe ilana kan si okun, eyi ti o da iye ti ipilẹṣẹ pada, lẹhinna o jẹ eyiti a lo fun iyipada okun. Sibẹsibẹ, abajade ti lilo ọna yii kii ṣe okun dandan.

Fun apẹẹrẹ, ti o ba jẹ fun ohun kan 'nkan' ọna ti wa ni telẹ si okun,

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

ọna si okun da pada okun ni pato, ati nigba fifi okun kan kun pẹlu nọmba kan, a gba okun ti o lẹ pọ:

`obj + 1 // '2001'` 

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

Ṣugbọn ti o ba tun kọ si okun, ki ọna naa da nọmba kan pada, nigbati ohun naa ba ṣafikun, iṣẹ ṣiṣe mathematiki pẹlu iyipada nọmba yoo ṣee ṣe ati abajade ti afikun mathematiki yoo gba.

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

`obj + 1 // '2001'`

Ni idi eyi, ti a ba ṣe afikun pẹlu okun, a ṣe iyipada okun kan, ati pe a gba okun ti a fi lẹ pọ.

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

Eyi ni idi fun nọmba nla ti awọn aṣiṣe nipasẹ awọn olumulo JavaScript alakobere.

Ọna naa si okun o le kọ iṣẹ kan ti yoo mu iye lọwọlọwọ nkan naa pọ si nipasẹ 1.

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript
Iṣiṣẹ ti iwe afọwọkọ, pese pe oniyipada jẹ dogba si 3, ati pe o tun dọgba si 4.

Nigbati a ba ṣe afiwe pẹlu simẹnti (==), ọna naa ti wa ni ṣiṣe ni igba kọọkan si okun pẹlu iṣẹ ilosoke iye. Gẹgẹ bẹ, pẹlu lafiwe atẹle kọọkan, iye naa pọ si. Eyi le yago fun nipa lilo afiwe ti kii ṣe simẹnti (===).

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript
Afiwera laisi iru simẹnti

AKIYESI. Maṣe Lo Ifiwera Simẹnti Lainidi.

Fun awọn iwe afọwọkọ ti o nipọn, gẹgẹbi Webhooks pẹlu ọgbọn idiju, ti o nilo afiwe pẹlu iru simẹnti, o ni iṣeduro lati kọ awọn sọwedowo tẹlẹ fun awọn iye ti o da awọn oniyipada pada ati mu awọn aiṣedeede ati awọn aṣiṣe.

Webhook Media

Ni ipari ọdun 2019 ati ni kutukutu 2020, ẹgbẹ iṣọpọ Zabbix ti n dagbasoke ni itara ti Webhooks ati awọn iṣọpọ-jade-apoti ti o wa pẹlu pinpin Zabbix.

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript
Ọna asopọ si iwe aṣẹ

Ṣiṣe tẹlẹ

  • Awọn dide ti preprocessing ni JavaScript jẹ ki o ṣee ṣe lati kọ julọ ita awọn iwe afọwọkọ, ati ki o Lọwọlọwọ ni Zabbix o le gba eyikeyi iye ati ki o pada si kan patapata ti o yatọ iye.
  • Ṣiṣe iṣaaju ni Zabbix jẹ imuse nipasẹ koodu JavaScript, eyiti, nigbati a ba ṣajọpọ sinu bytecode, ti yipada si iṣẹ kan ti o gba iye kan bi paramita kan iye bi okun (okun kan le ni awọn nọmba mejeeji ati nọmba kan ninu).
  • Niwọn igba ti abajade jẹ iṣẹ kan, ni opin iwe afọwọkọ naa nilo pada.
  • O ṣee ṣe lati lo awọn macros aṣa ni koodu naa.
  • Awọn orisun le ni opin kii ṣe ni ipele eto iṣẹ nikan, ṣugbọn tun ni eto. Igbesẹ iṣaju ti pin iwọn megabytes 10 ti Ramu ati opin akoko ṣiṣe ti awọn aaya 10.

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript

AKIYESI. Iye akoko ipari ti awọn aaya 10 jẹ pupọ pupọ, nitori gbigba ẹgbẹẹgbẹrun awọn ohun data ni ipo ni iṣẹju 1 ni ibamu si oju iṣẹlẹ iṣaaju “eru” le fa fifalẹ Zabbix. Nitorinaa, a ko ṣe iṣeduro lati lo iṣaju lati ṣiṣẹ awọn iwe afọwọkọ JavaScript ti o ni kikun nipasẹ awọn ohun ti a pe ni awọn eroja data ojiji (awọn ohun apanirun), eyiti o ṣiṣẹ nikan lati ṣe ilana iṣaaju..

O le ṣayẹwo koodu rẹ nipasẹ idanwo iṣaaju tabi lilo ohun elo naa 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`

Awọn iṣẹ ṣiṣe to wulo

Nkan 1

Rọpo nkan ti a ṣe iṣiro pẹlu ṣiṣe iṣaaju.

Ipo: Gba iwọn otutu ni Fahrenheit lati sensọ lati fipamọ ni Celsius.

Ni iṣaaju, a yoo ṣẹda ohun kan ti o gba iwọn otutu ni awọn iwọn Fahrenheit. Lẹhin iyẹn, nkan data miiran (iṣiro) ti yoo yi Fahrenheit pada si Celsius nipa lilo agbekalẹ kan.

Isoro:

  • O jẹ dandan lati ṣe ẹda awọn eroja data ati tọju gbogbo awọn iye ninu aaye data.
  • O gbọdọ gba lori awọn aaye arin fun "obi" data ohun kan ti o ti wa ni iṣiro ati ki o lo ninu awọn agbekalẹ, ati fun awọn iṣiro data ohun kan. Bibẹẹkọ, ohun ti a ṣe iṣiro le lọ si ipo ti ko ni atilẹyin tabi ṣe iṣiro iye iṣaaju, eyiti yoo ni ipa lori igbẹkẹle ti awọn abajade ibojuwo.

Ojutu kan ni lati lọ kuro ni awọn aaye arin iṣayẹwo rọ ni ojurere ti awọn aaye arin ti o wa titi lati rii daju pe ohun kan ti a ṣe iṣiro jẹ iṣiro lẹhin ohun ti o gba data naa (ninu ọran wa, iwọn otutu ni awọn iwọn Fahrenheit).

Ṣugbọn ti o ba jẹ pe, fun apẹẹrẹ, a lo awoṣe lati ṣayẹwo nọmba nla ti awọn ẹrọ, ati pe a ṣe ayẹwo naa lẹẹkan ni gbogbo iṣẹju-aaya 30, Zabbix "hacks" fun awọn aaya 29, ati ni iṣẹju-aaya ti o kẹhin o bẹrẹ ṣiṣe ayẹwo ati iṣiro. Eyi ṣẹda isinyi ati ni ipa lori iṣẹ ṣiṣe. Nitorinaa, o gba ọ niyanju lati lo awọn aaye arin ti o wa titi nikan ti o ba jẹ dandan gaan.

Ninu iṣoro yii, ojutu ti o dara julọ jẹ ilana iṣaaju JavaScript kan ti o yi awọn iwọn Fahrenheit pada si awọn iwọn Celsius:

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

O yara ati irọrun, iwọ ko nilo lati ṣẹda awọn ohun data ti ko wulo ati tọju itan-akọọlẹ lori wọn, ati pe o tun le lo awọn aaye arin rọ fun awọn sọwedowo.

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript

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

Ṣugbọn, ti o ba wa ni ipo arosọ o jẹ dandan lati ṣafikun eroja data ti o gba, fun apẹẹrẹ, pẹlu asọye igbagbogbo ninu macro, o gbọdọ ṣe akiyesi pe paramita naa iye gbooro sinu okun. Ni iṣẹ afikun okun kan, awọn okun meji ni o rọrun ni idapo sinu ọkan.

A yanju awọn iṣoro to wulo ni Zabbix nipa lilo JavaScript

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

Lati gba abajade ti iṣẹ ṣiṣe mathematiki, o jẹ dandan lati yi awọn oriṣi ti awọn iye ti o gba pada si ọna kika nọmba kan. Fun eyi o le lo iṣẹ naa parseInt(), eyi ti o nmu odidi kan, iṣẹ kan parseFloat(), eyi ti o ṣe agbejade eleemewa, tabi iṣẹ kan nọmba, eyi ti o da odidi tabi eleemewa pada.

Iṣẹ́ 2

Gba akoko ni iṣẹju-aaya titi ti ipari ijẹrisi naa.

Ipo: iṣẹ kan funni ni ọjọ ipari ijẹrisi kan ni ọna kika "Oṣu Kínní 12 12:33:56 2022 GMT".

Ninu ECMAScript5 date.parse() gba ọjọ kan ni ọna kika ISO 8601 (YYYY-MM-DDTHH: mm: ss.sssZ). O jẹ dandan lati sọ okun kan si i ni ọna kika MMM DD YYYY HH:mm:ss ZZ

Isoro: Oṣuwọn iye ti wa ni kosile bi ọrọ, ko bi nọmba kan. Data ni ọna kika yii ko gba nipasẹ Duktape.

Apeere ojutu:

  • Ni akọkọ, a kede oniyipada kan ti o gba iye kan (gbogbo iwe afọwọkọ jẹ ikede ti awọn oniyipada ti a ṣe atokọ niya nipasẹ aami idẹsẹ).

  • Ni ila akọkọ ti a gba ọjọ ni paramita iye ki o si ya o pẹlu awọn alafo lilo ọna Pin. Nitorinaa, a gba orun kan, nibiti ipin kọọkan ti orun, ti o bẹrẹ ni itọka 0, ni ibamu si ipin ọjọ kan ṣaaju ati lẹhin aaye kan. pipin (0) - osu, pipin (1) - nọmba, pipin (2) - okun kan pẹlu akoko, bbl Lẹhin iyẹn, ipin kọọkan ti ọjọ naa le wọle nipasẹ atọka ninu titobi.

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

  • Oṣooṣu kọọkan (ni ilana akoko) ni ibamu si atọka ti ipo rẹ ni titobi (lati 0 si 11). Lati yi iye ọrọ pada si iye nomba, ọkan ni a ṣafikun si atọka oṣu (nitori awọn oṣu ti jẹ nọmba ti o bẹrẹ ni 1). Ni idi eyi, ikosile pẹlu afikun ti ọkan ni a mu ni awọn biraketi, nitori bibẹkọ ti okun kan yoo gba, kii ṣe nọmba kan. Ni ipari a ṣe bibẹ() - ge orun lati opin lati fi awọn ohun kikọ meji silẹ nikan (eyiti o ṣe pataki fun awọn oṣu pẹlu nọmba oni-nọmba meji).

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

  • A ṣe okun kan ni ọna kika ISO lati awọn iye ti o gba nipasẹ afikun deede ti awọn okun ni ilana ti o yẹ.

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

Awọn data ninu ọna kika abajade jẹ nọmba awọn aaya lati 1970 si aaye kan ni ojo iwaju. O jẹ fere soro lati lo data ni ọna kika ti a gba ni awọn okunfa, nitori Zabbix gba ọ laaye lati ṣiṣẹ nikan pẹlu awọn macros {Ọjọ} и {Aago}, eyi ti o da ọjọ ati akoko pada ni ọna kika ore-olumulo.

  • Lẹhinna a le gba ọjọ ti o wa lọwọlọwọ ni JavaScript ni ọna kika Unix Timestamp ki o yọkuro kuro ni ọjọ ipari ijẹrisi lati gba nọmba milliseconds lati bayi titi ijẹrisi naa yoo pari.

`now = Date.now();`

  • A pin iye ti o gba nipasẹ ẹgbẹrun lati gba awọn aaya ni Zabbix.

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

Ninu okunfa, o le pato ikosile naa 'kẹhin' atẹle nipa ṣeto awọn nọmba ti o ni ibamu si nọmba awọn iṣẹju-aaya ni akoko ti o fẹ dahun, fun apẹẹrẹ, ni awọn ọsẹ. Nitorinaa, okunfa naa yoo sọ pe ijẹrisi dopin ni ọsẹ kan.

AKIYESI. San ifojusi si lilo parseInt() ni iṣẹ padalati se iyipada nọmba ida ti o waye lati pipin milliseconds si odidi kan. O tun le lo parseFloat() ati tọju data ida.

Wo iroyin

orisun: www.habr.com

Fi ọrọìwòye kun