Tikhon Uskov, Zabbix áá±á«ááºážá
ááºážááŸá¯á¡ááœá²á·á¡ááºáá»ááºáá®áá¬
Zabbix ááẠáááºááá·áºáá±áá¬á¡áá»áá¯ážá¡á á¬ážááá¯áááᯠá á±á¬áá·áºááŒáá·áºááẠá¡áá¯á¶ážááŒá¯ááá·áº á áááºááŒáá¯ááºááŒááºáááºááá¯ááºáá±á¬ ááááºáá±á¬ááºážáá áºáá¯ááŒá áºáááºá Zabbix á á¡á á±á¬áá¯á¶áž áá¬ážááŸááºážáá»á¬áž ááŒá áºáá±á¬ááŒá±á¬áá·áº á á±á¬áá·áºááŒáá·áºáá±áž á á®áá¶ááá·áºááœá²áá°áá»á¬ážááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ scripts áá»á¬ážááŸáááá·áº áá¯ááºáá±á¬ááºááá¯ááºááẠá áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž áá áºááŸááºááœááºááẠáá¯á¶ááŸááºáá»á¬ážááᯠá á áºáá±ážááŒááºáž áá áºáá»áááºáááºážááŸá¬áááºá scripts áá»á¬ážá áááºááŒááºážááẠscripts áá»á¬ážááá¯áá¶á·ááá¯ážáááºááá¯á¡ááºááŒááºážá áááºážááá¯á·ááááºááœááºáá±áž node áá»á¬ážááŸáá·áº proxies áá»á¬ážááá¯á·áá±ážááá¯á·ááŒááºážá¡ááŒáẠááá°áá®áá±á¬áá¬ážááŸááºážáá»á¬ážá¡ááœááºáá¶á·ááá¯ážááŸá¯á ááá·áºá¡áááºá¡áá²áá»á¬ážá áœá¬ááá¯ááŒá áºáá±á«áºá á±áá²á·áááºá
Zabbix á¡ááœáẠJavaScript
2019 áá¯ááŸá Ạá§ááŒá®áááœááºá Zabbix 4.2 ááᯠJavaScript ááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº ááááºáááºáá²á·áááºá áá±áá¬áá»á¬ážááᯠáá áºáá±áá¬áá¬ááá¯á· áá°áá±á¬ááºááœá¬ážááá·áº Script áá»á¬ážááᯠá áœáá·áºáááºáᬠZabbix áá¬ážáááºááá·áºáá¯á¶á á¶ááŒáá·áº áá±ážáá±á¬ááºáᬠZabbix á០ááááºážáááºážááŒááºážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠá¡áááºááá·áºáááŒá áºáá±ážáá±á¬ áá±áá¬áá»á¬ážááᯠáááºáá¶áááŸáááá·áº ááá¯ážááŸááºážáá±á¬á á áºáá±ážááŸá¯áá»á¬ážááᯠáá°áá»á¬ážá áœá¬á á áááºááŸá¯ááºááŸá¬ážáá²á·ááŒáááºá ááá¯á·áá±á¬áẠZabbix ááŸáá·áº JavaScript áá°ážááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á€áá±áá¬á á®ážááŒá±á¬ááºážááᯠáá¯ááºáá±á¬ááºáá«á Zabbix 3.4 ááœáẠáá«ááŸáááá·áº á¡áááá·áºááá¯ááºážááŸá¬ááœá±ááœá±á·ááŸáááŸá¯ááŸáá·áº ááŸá®ááá¯áá±á¬á¡áá¬áá»á¬ážááŸáá·áº áááºá ááºá áááŸááá¬áá±á¬áá±áá¬áá»á¬ážááᯠá á®áááºááŸáá·áº á á®áá¶ááá·áºááœá²áááºá¡ááœáẠáá»áŸáá»áŸááááŒá±á¬ááºážááœááºááŒááºááœááºááŸááá±á¬ á¡áá°á¡ááá áºáᯠáááŸááá²á·áá«áááºá
Zabbix 4.4 ááœááºá JavaScript ááœáẠá¡ááŒáá¯áá¯ááºáá±á¬ááºááŒááºážá áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºááŸá¯á¡áááºáááŒááºá¡ááŒá áºá ááŒááºáá¡ááœá²á·á¡á ááºážá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááŸáá·áº Zabbix á¡ááŒá±á¬ááºážááŒá¬ážáá»ááºáá»á¬ážááᯠá¡ááœááºááá°áá±á«ááºážá ááºááẠá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº á¡ááŒá±á¬ááºážááŒá¬ážáá»ááºáááºážáááºážá¡áá áºáá áºáá¯áá±á«áºáá¬ááẠ- Webhooká
JavaScript ááŸáá·áº Duktapes
JavaScript ááŸáá·áº Duktape ááᯠá¡áááºááŒá±á¬áá·áº ááœá±ážáá»ááºáá²á·ááááºážá áá¬áá¬á áá¬ážáá»á¬ážááŸáá·áº á¡ááºáá»ááºáá»á¬ážá¡ááœáẠááœá±ážáá»ááºá áá¬á¡áá»áá¯ážáá»áá¯ážááᯠááá·áºááœááºážá ááºážá á¬ážáá²á·áááº-
- Lua - Lua á .á
- Lua - LuaJIT
- Javascript - Duktape
- Javascript - JerryScript
- Python ááᯠááá·áºááœááºážáá¬ážáááºá
- Perl ááᯠááá·áºááœááºážáá¬ážáááºá
á¡áááááœá±ážáá»ááºááŸá¯á á¶ááŸá¯ááºážáá»á¬ážááŸá¬ áá»á¶á·ááŸá¶á·ááŸá¯á áá¯ááºáá¯ááºááœáẠá¡ááºáá»ááºááᯠáá±á«ááºážá ááºáááœááºáá°ááŸá¯á á¡áááºážá¡ááŒá áºáá¯á¶ážá áœá²ááŸá¯áááºážáá«ážááŒááºážááŸáá·áº á¡ááºáá»ááºáá¡áá¯á¶ážá á¯á¶á áœááºážáá±á¬ááºáááºááŸáá·áº á á±á¬áá·áºááŒáá·áºá á áºáá±ážááŒááºážááœáẠá€áá¬áá¬á áá¬ážááŒáá·áº áá¯ááºááááºáááºááŒááºážá áá±ážáááºážááŸá¯ááá¯á·ááŒá áºáááºá á¡ááœáŸááºážááááºážáá»á¬ážáá±á«ááºážá ááºááŸá¯á¡áá±á«áºá¡ááŒá±áá¶á JavaScript ááẠDuktape á¡ááºáá»ááºááœááºá¡ááá¯ááºáááŸááá²á·áááºá
ááœá±ážáá»ááºááŸá¯á á¶ááŸá¯ááºážáá»á¬ážááŸáá·áº á áœááºážáá±á¬ááºáááºá ááºážáááºááŒááºážá
Duktape á¡ááºá¹áá«áááºáá»á¬áž
- á
á¶
- Duktape á¡ááœáẠZabbix áá±á¬áºáá»á°ážáá»á¬áž
- Zabbix.log() - ááá·áºá¡á¬áž Zabbix áá¬áá¬ááŸááºáááºážáá²ááá¯á· á¡áá±ážá áááºá¡ááá·áºá¡áá»áá¯ážáá»áá¯ážááŒáá·áº áááºáá±á·áá»áºáá»á¬ážáá±ážáá¬ážááá¯ááºá á±áá¬á á¥ááá¬á¡á¬ážááŒáá·áºá Webhook áá áºáá¯ááœáẠá¡ááŸá¬ážáá»á¬ážááᯠáá¬áá¬á¡ááŒá±á¡áá±ááŒáá·áº áááºá ááºáá±ážááá¯ááºáá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠáááºá ááºáá±ážááá¯ááºáááºá
- CurlHttpRequest() - Webhook á¡áá¯á¶ážááŒá¯ááŸá¯ááᯠá¡ááŒá±áá¶ááá·áº ááœááºáááºááá¯á· HTTP áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááŒá¯áá¯ááºááœáá·áºááŒá¯áááºá
- atob() ááŸáá·áº btoa() - ááá·áºá¡á¬áž Base64 áá±á¬áºáááºááœáẠáá¯ááºááŸáá·áº áá¯ááºá á¬ááŒá±á¬ááºážáá»á¬ážááᯠáá¯ááºáá»ááºááẠááœáá·áºááŒá¯áááºá
ááŸááºá á¯. Duktape ááẠACME á á¶ááŸá¯ááºážáá»á¬ážááŸáá·áº ááá¯ááºáá®áá«áááºá Zabbix ááẠáá¬ááºááœáŸááºážá 2015 áá¬ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯áááºá áá±á¬ááºáááºááœá²ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠá¡áá±ážá¡ááœá²ááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠáá»á áºáá»á°ááŸá¯ááá¯ááºáá«áááºá.
JavaScript ááŸá±á¬áºááá¬
JavaScript á ááŸá±á¬áºáááºááŸá¯á¡á¬ážáá¯á¶ážááẠdynamic typing ááŸáá·áº typecast ááœááºáááºááŸááááº- string, numeric, and boolean.
ááá¯ááá¯áááºááŸá¬ ááááºážááŸááºá¡áá»áá¯ážá¡á á¬ážááẠáááºááá·áºáááºááá¯ážááᯠááŒááºáá±ážááááºááᯠááŒáá¯áááºááŒá±áá¬ááẠáááá¯á¡ááºáá«á
áááºá¹áá»á¬ááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá»ááºá¡á±á¬áºááá±áá¬áá»á¬ážá០ááŒááºáá±ážááá·áºáááºááá¯ážáá»á¬ážááᯠááááºážáá»á¬ážá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²áááºá ááá¯ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááœáẠááŒáœááºážáá»ááºááŸá¬ áááºáá±á¬ááºážááŒá áºáááºá á¡ááŒá±á¬ááºážááŸá¬ á¡áááºážáá¯á¶áž á ááºážáááºážáá»ááºáá»á¬ážáá²á០áá áºáá¯ááẠstring áá áºáá¯ááŒá áºáá«áá string conversion ááᯠáááºááŸááºáá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááœáẠáááºáá±á¬ááºáá«áááºá
ááŸááºá á¯. ááá¯ááá¯á·áá±á¬ á¡ááœááºááŒá±á¬ááºážááŸá¯á¡ááœáẠáá¬áááºááŸáááá·áº áááºážáááºážáá»á¬ážááᯠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº á¡áá¬ááá¹áá¯á áááºáááŸá±á·ááŒá±ážáá¯á¶á á¶áá»á¬ážááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±á·ááŸááááºá áááºááá¯ážáá¬áž О á ááá. áááºááá¯ážáá¬áž ááááºážááá¬ááºážááŒá±á¬ááºážá ááºá¡ááœááºáž ááŸáá·áº áááºážáááºážá ááŸá±á·ááœáẠá¡ááŒá²áá±á«áºáááºá á ááá. áááºážáááºáž áááºááá¯ážáá¬áž áá°ááááºááá¯ážáá»á¬ážááᯠááŒááºáá±ážááááºá ááá¯ááºáá«á áááºážáááááºááᯠáá»á áºáá»á°ááŸá¯áá¬ážáááºá
Method áá áºáá¯ááᯠObject áá áºáá¯áá±á«áºááœáẠáá±á«áºáááºá áááºááá¯áž. áááœá±á·ááŸááá«á ááá¯á·ááá¯áẠáá°ááááºááá¯ážááᯠááŒááºááá±ážáá«áá áááºážáááºážááᯠáá±á«áºáááºá á ááá. áááºážáááºážááŸáááẠá ááá áááœá±á· á ááá¯ááºááŸá¬áááºá áááºááá¯ážáá¬áž á¡áá¬ááá¹áá¯á ááŸá±á·ááŒá±ážáá¯á¶á á¶ááœááºá áááºááá¯ážááá¯ááºáá±á¬ááºááŒááºážááŒá®ážááŒá±á¬ááºáááºá¡áá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºáá«ááá²áá² áá¯ááºáá±á¬ááºááŒá®áž expression ááŸá áááºááá¯ážá¡á¬ážáá¯á¶ážááᯠá¡áá»áá¯ážá¡á á¬ážáá°ááá¯á· áá»ááá¯ááºáááº. á¡áááºá á¡áá¬ááá¹áá¯ááẠáááºážáááºážáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá á ááááá°ááááºááá¯ážááᯠááŒááºáá±ážááá·áºá ááá¯á·áá±á¬áẠáááºážááẠá á¬ááŒá±á¬ááºážááŒá±á¬ááºážááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá ááá¯á·áá±á¬áºá á€áááºážáááºážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážáááááºááẠáá±áá»á¬áá±á«áẠstring áá áºáá¯ááá¯ááºáá«á
á¥ááá¬- for for object ááá¯áááºáObj'áááºážáááºážááᯠáááºááŸááºáááºá á ááá,
`var obj = { toString() { return "200" }}`
áááºážáááºáž á ááá ááŒáá¯ážáá áºáá»á±á¬ááºážááᯠá¡ááá¡áá» ááŒááºáá±ážáááºáá áá¶áá«ááºáá áºáá¯ááŸáá·áº á á¬ááŒá±á¬ááºážáá áºáá¯ááᯠáá±á«ááºážááá·áºáá±á¬á¡áá«á áá±á¬áºáá¬ážáá±á¬ á á¬ááŒá±á¬ááºážááᯠáá»áœááºá¯ááºááá¯á· áááŸááááº-
`obj + 1 // '2001'`
`obj + 'a' // â200a'`
áá«áá±ááá·áº ááŒááºáá±ážááẠá áááá ááá¯á·ááŒá±á¬áá·áº method ááẠáá¶áá«ááºáá áºáá¯á¡á¬áž ááŒááºááá¯á·áááºá¡ááœááºá á¡áá¬ááá¹áá¯ááᯠáá±á«ááºážááá·áºáá±á¬á¡áá«á ááááºážááá¬ááºážááŒá±á¬ááºážáá²ááŒááºážááŸáá·áºá¡áá° áááºá¹áá»á¬áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºááŒá®áž áááºá¹áá»á¬áá±á«ááºážááá·áºááŒááºážá ááááºááᯠáááŸááááºááŒá áºáááºá
`var obj = { toString() { return 200 }}`
`obj + 1 // '2001'`
á€ááá á¹á ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááŒáá¯ážáá áºáá»á±á¬ááºážááŒáá·áº áááºáá±á¬ááºážáá¯ááºáá±á¬ááºáá«áá ááŒáá¯ážáááºážááŒá±á¬ááºážáá²ááŒááºážááᯠáá¯ááºáá±á¬ááºááŒá®áž áá»áœááºá¯ááºááá¯á·ááẠáá±á¬áºáá¬ážáá±á¬ ááŒáá¯ážáá áºáá»á±á¬ááºážááᯠáááŸááááºááŒá áºáááºá
`obj + 'a' // â200a'`
á€áááºááŸá¬ á¡ááœá±á·á¡ááŒá¯á¶áááŸááá±ážáá±á¬ JavaScript á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážá áœá¬á¡ááœáẠá¡ááŒá±á¬ááºážáááºážááŒá áºáááºá
áááºážáááºáž á ááá á¡áá¬ááá¹áá¯á áááºááŸááááºááá¯ážááᯠ1 ááŒáá·áº ááá¯ážá á±ááá·áº áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááᯠáááºáá±ážááá¯ááºáááºá
variable ááẠ3 ááŸáá·áº áá®áá»áŸááẠá áááºážááẠ4 ááŸáá·áº áá®áá»áŸáááºáᯠáá±ážáá¬ážáá±á¬ script ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
áá¬á Ạ(==) ááŸáá·áº ááŸáá¯ááºážááŸá¥áºáá»áŸáẠáááºážáááºážááᯠáá áºááŒáááºá á® áá¯ááºáá±á¬ááºáááºá á ááá áááºááá¯ážááá¯áž function ááŸáá·áºá¡áá°á ááá¯á·ááŒá±á¬áá·áºá áá±á¬ááºáááºááœá²ááŸáá¯ááºážááŸááºááŸá¯áá áºáá¯á á®ááŸáá·áº áááºááá¯ážáá»á¬áž ááá¯ážáá¬áááºá áá¬á áºááá¯ááºáá±á¬ ááŸáá¯ááºážááŸááºááŸá¯ (===) ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áááºážááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºáááºá
á¡áá»áá¯ážá¡á
á¬áž áá¬á
áºááºááá«áá² ááŸáá¯ááºážááŸááºááŒááºážá
ááŸááºá á¯. Cast ááŸáá¯ááºážááŸááºááŸá¯ááᯠáááá¯á¡ááºáá² á¡áá¯á¶ážáááŒá¯áá«ááŸáá·áº.
ááŸá¯ááºááœá±ážáá±á¬ áá¯áá¹áááá±áááŸááá±á¬ Webhooks áá²á·ááá¯á·áá±á¬ ááŸá¯ááºááœá±ážáá±á¬ script áá»á¬áž á¡ááœááºá á¡áá»áá¯ážá¡á á¬áž áá¬á áºáááºááŒááºážááŸáá·áº ááŸáá¯ááºážááŸááºááẠááá¯á¡ááºáá±á¬á ááááºážááŸááºáá»á¬ážááᯠááŒááºáá±ážááá·áº áááºááá¯ážáá»á¬ážá¡ááœáẠááŒáá¯ááẠá á áºáá±ážááŸá¯áá»á¬áž ááŒá¯áá¯ááºááẠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
Webhook áá®áá®áá¬
2019 áá¯ááŸá áºááŸá±á¬ááºážááá¯ááºážááŸáá·áº 2020 áá¯ááŸá áºá¡á á±á¬ááá¯ááºážááœááºá Zabbix áá±á«ááºážá ááºážááŸá¯á¡ááœá²á·ááẠZabbix ááŒáá·áºááŒá°ážááŸá¯ááŸáá·áºá¡áá° áá«áá¬ááá·áº Webhooks ááŸáá·áº á¡ááŒááºáááºááœáẠáá±á«ááºážá ááºááŸá¯áá»á¬ážááᯠáááºááŒáœá áœá¬ áá±á¬áºáá±á¬ááºáá»ááºááŸááááºá
á áááºááá¯ážááœá¬áž Jira Jira Service Desk Mattermost ááá¯ááºáááá¯áá±á¬á·áá¡áááºážáá»á¬áž Opsgenie á¡ááŒá¬ážáá°áá»á¬áž pagerduty Pushover ááŒá áºááẠ.áá¬ááá® ServiceNow SINGL4 áá»ááºážáá ááœá±ážááá»ážá ᬠáááºááẠZendesk
ááá·áºááº
ááŒáá¯áááºá á®áá¶ááŒááºáž
- JavaScript ááœáẠááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºáž ááœááºážáá¬ážáá¬ááŒááºážááŒá±á¬áá·áº ááŒááºá script á¡áá»á¬ážá á¯ááᯠá áœáá·áºááœáŸááºááá¯ááºáá²á·ááŒá®áž áááºááŸáááœáẠZabbix ááœáẠáááºááẠáááºááá·áºáááºááá¯ážááá¯áááᯠáááá¯ááºááŒá®áž áááºážááᯠáá¯á¶ážáááœá²ááŒá¬ážááá·áºáááºááá¯ážá¡ááŒá ẠááŒá±á¬ááºážáá²ááá¯ááºáááºá
- Zabbix ááœááºááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºážááᯠJavaScript áá¯ááºááŒáá·áºáá¯ááºáá±á¬ááºáááºá áááºážááẠbytecode á¡ááŒá áºá á¯á ááºážáá±á¬á¡áá«á áááºááá¯ážáá áºáá¯áááºážááᯠparameter á¡ááŒá áºáá°áá±á¬ function á¡ááŒá áºááá¯á·ááŒá±á¬ááºážáá²ááœá¬ážáááºá á¡ááá¯áž á á¬ááŒá±á¬ááºážáá áºááŒá±á¬ááºáž (á á¬ááŒá±á¬ááºážáá áºááŒá±á¬ááºážááœáẠááááºážááŸáá·áº ááááºáž ááŸá áºáá»áá¯ážáá¯á¶áž áá«áááºááá¯ááºáááº)á
- output ááẠfunction áá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áºá script áá¡áá¯á¶ážááœááºááá¯á¡ááºáááºá ááŒááºáá¬.
- áá¯ááºááœáẠá áááºááŒáá¯áẠmacro ááᯠáá¯á¶ážááá¯ááºáááºá
- á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááºáááºááŸá¯á áá áºá¡ááá·áºááœááºáá¬áá áááá¯ááááºá áá áºááŒáá·áºáá« ááá·áºáááºááá¯ááºáááºá ááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºážá¡ááá·áºááẠá¡áá»á¬ážáá¯á¶áž 10 megabytes RAM ááŸáá·áº áááºáááºáá»áááºááá·áºáááºáá»áẠ10 á áá¹ááá·áºááŒá áºáááºá
ááŸááºá á¯. "áá±ážáá¶áá±á¬" ááŒáá¯áááºáá¯ááºáá±á¬ááºááŸá¯á¡ááŒá±á¡áá±á¡á 10 á áá¹ááá·áºá¡ááœááºáž áá±áá¬áá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬ááᯠá á¯áá±á¬ááºážáá¬ážáá±á¬ááŒá±á¬áá·áº Zabbix ááᯠááŸá±ážááœá±ážá á±ááá¯ááºáá±á¬ááŒá±á¬áá·áº 1 á áá¹ááá·áºá á¡áá»áááºáá¯ááºáááºááá¯ážááẠá¡ááœááºáá»á¬ážááŒá¬ážáá«áááºá ááá¯á·ááŒá±á¬áá·áºá á¡ááááºáá±áá¬ááŒááºá ááºáá»á¬áž (dummy items) áá¯áá±á«áºáá±á¬ á¡ááááºáá±áá¬ááŒááºá ááºáá»á¬áž (dummy items) áá»á¬ážááŸáá áºááá·áº ááŒáá·áºá á¯á¶áá±á¬ JavaScript script áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯áá¬ážááŒááºážáááŸááá«á.
ááá·áºáá¯ááºááᯠááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºáž á ááºážáááºááŒááºáž ááá¯á·ááá¯áẠutility ááᯠá¡áá¯á¶ážááŒá¯á á á áºáá±ážááá¯ááºáááºá 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`
áááºááœá±á·á¡áá¯ááºáá»á¬áž
áá¯ááºáááºáž 1
ááœááºáá»ááºáá¬ážáá±á¬ á¡áá¬á¡á¬áž ááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº á¡á á¬ážááá¯ážáá«á
á¡ááŒá±á¡áá±: áá®ááá®á ááºáá®áááááºááœáẠááá¯ááŸá±á¬ááºáááºá¡ááœáẠá¡á¬áá¯á¶áá¶áááááá¬á០áá®ááá®áá¬áááºááá¯ááºá¡ááœááºáž á¡áá°áá»áááºááᯠááá°áá«á
ááááºá áá»áœááºá¯ááºááá¯á·ááẠáá®ááá®áá¬áááºááá¯ááºááœáẠá¡áá°áá»áááºááᯠá á¯áá±á¬ááºážááá·áº á¡áá¬áá áºáá¯ááᯠáááºáá®ážáá²á·áááºá ááá¯á·áá±á¬ááºá áá±á¬áºááŒá°áá¬ááᯠá¡áá¯á¶ážááŒá¯á áá¬áááºááá¯ááºá០á ááºáá®áááááºááá¯á· ááŒá±á¬ááºážááá·áº á¡ááŒá¬ážáá±áá¬á¡ááŒá±á¬ááºážá¡áᬠ(ááœááºáá»ááºáá¬ážáááº)á
ááŒá¿áá¬áá»á¬áž:
- áá±áá¬ááŒááºá ááºáá»á¬ážááá¯ááœá¬ážáááºááŸáá·áºáá±áá¬áá±á·á áºááœááºáááºááá¯ážáá»á¬ážá¡á¬ážáá¯á¶ážááá¯ááááºážáááºážáááºááá¯á¡ááºáááºá
- áá±á¬áºááŒá°áá¬ááœáẠááœááºáá»ááºá¡áá¯á¶ážááŒá¯ááá·áº "áááºá" áá±áá¬á¡ááŒá±á¬ááºážá¡áá¬á¡ááœáẠááŒá¬ážáá¬ááá»á¬ážááŸáá·áº ááœááºáá»ááºáá¬ážáá±á¬ áá±áá¬á¡ááŒá±á¬ááºážá¡áá¬á¡ááœáẠáááºááá±á¬áá°ááá«áááºá ááá¯á·ááá¯ááºáá«áá ááœááºáá»ááºáá¬ážááá·áºá¡áá¬ááẠáá¶á·ááá¯ážááá¬ážáá±á¬á¡ááŒá±á¡áá±ááá¯á·áá±á¬ááºááœá¬ážááá¯ááºááẠááá¯á·ááá¯áẠá á±á¬áá·áºááŒáá·áºááŒááºážááááºáá»á¬ážá áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠááááá¯ááºá á±ááá·áº ááááºáááºááá¯ážááᯠááœááºáá»ááºááá¯ááºáááºá
ááŒá±ááŸááºážáá»ááºáá áºáá¯ááŸá¬ áá±áá¬áááºáá¶áááŸáááá·áºá¡áá¬ááŒá®ážáá±á¬áẠááœááºáá»ááºáá¬ážáá±á¬á¡áá¬á¡á¬áž á¡áá²ááŒááºááŒá±á¬ááºážáá±áá»á¬á á±ááẠááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ á á áºáá±ážááŸá¯ááŒá¬ážáá¬ááá»á¬ážá០ááœá±á·áá»á¬ážááá¯ááºá á±ááẠ(áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áá®ááá®áá¬áááºááá¯ááºááŸá á¡áá°áá»áááº)á
á¥ááá¬á¡á¬ážááŒáá·áºá á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠá ááºáá á¹á ááºážá¡áá»á¬ážá¡ááŒá¬ážááᯠá á áºáá±ážááẠáá¯á¶á á¶áááááºááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž á á áºáá±ážááŸá¯ááᯠá áá¹ááá·áº 30 ááá¯ááºážáá áºááŒááẠááŒá¯áá¯ááºáá«áá Zabbix ááẠ29 á áá¹ááá·áºááŒá¬ áááºááºáá¶áááŒá®áž áá±á¬ááºáá¯á¶ážá áá¹ááá·áºááœáẠáááºážááẠá á áºáá±ážááŒááºážááŸáá·áº ááœááºáá»ááºááŒááºáž á áááºáááºááŒá áºáááºá áááºážááẠáááºážá á®ááŒááºážááᯠáááºáá®ážááŒá®áž á áœááºážáá±á¬ááºáááºá¡áá±á«áº áááºáá±á¬ááºááŸá¯ááŸááááºá ááá¯á·ááŒá±á¬áá·áºá á¡ááŸááºáááẠááá¯á¡ááºááŸáᬠáááºááŸááºáá¬ážáá±á¬ ááŒá¬ážáá¬ááá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯áá¬ážáááºá
á€ááŒá¿áá¬ááœááºá á¡áá±á¬ááºážáá¯á¶ážááŒá±ááŸááºážáá»ááºááŸá¬ áá®ááá®áá¬áááºááá¯ááºá០áá®ááá®á ááºáá®áááááºááá¯á· ááŒá±á¬ááºážáá±ážáá±á¬ áá áºááá¯ááºáž JavaScript ááŒáá¯áá¯ááºáá±á¬ááºááŒááºážááŒá áºáááº-
`return (value - 32) * 5 / 9;`
áááºážááẠááŒááºáááºááœááºáá°áááºá áááá¯á¡ááºáá±á¬ áá±áá¬áá á¹á ááºážáá»á¬ážááᯠáááºáá®ážááŒá®áž áááºážááá¯á·ááœáẠááŸááºáááºážáá¬ážááŸáááẠáááá¯á¡ááºáá²á á á áºáá±ážááŸá¯áá»á¬ážá¡ááœáẠááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ ááŒá¬ážáá¬ááá»á¬ážááá¯áááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
`return (parseInt(value) + parseInt("{$EXAMPLE.MACRO}"));`
ááá¯á·áá±á¬áºá á áááºáá°ážá áááºáááºážá¡ááŒá±á¡áá±áá áºáá¯ááœáẠáááºáá¶áááŸáááá·áºáá±áá¬ááŒááºá ááºááᯠááá·áºáááºááá¯á¡ááºáá«áá á¥ááá¬á áááºáááá¯ááœáẠá¡áááºáááŒááºáááºááŸááºáá¬ážáá±á¬ ááá·áºáááºáá±á¬ááºááᯠááá·áºááœááºážá ááºážá á¬ážááá«áááºá á¡ááá¯áž ááŒáá¯ážáá áºáá»á±á¬ááºážááá¯á· áá»á²á·áááºá ááŒáá¯ážáá áºáá»á±á¬ááºážáááºááá¯ážáá¯ááºáá±á¬ááºááŸá¯ááœáẠááŒáá¯ážááŸá áºáá»á±á¬ááºážááᯠáá áºáá¯áááºážá¡ááŒá Ạáá±á«ááºážá ááºáá¬ážáááºá
`return (value + "{$EXAMPLE.MACRO}");`
áááºá¹áá»á¬ááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯á ááááºááá¯áááŸááááºá áááŸááá±á¬áááºááá¯ážáá»á¬ážááᯠááááºážáá±á¬áºáááºá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá«áááºá áááºážá¡ááœááºááẠfunction ááá¯áá¯á¶ážááá¯ááºáááºá parseInt()ááááºážááŒáá·áºá áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±ážáááºá parseFloat()áá¿ááá áºáᯠááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááᯠáá¯ááºáá±ážáááºá ááááºážááááºážááŒáá·áº ááá¯á·ááá¯áẠáá¿áááᯠááŒááºáá±ážááá·áºá
á¡áá¯áẠá
áááºááŸááºá¡áá¯á¶ážá¡áá á¡áá»áááºááᯠá áá¹ááá·áºááá¯ááºážá¡ááœááºáž ááá°áá«á
á¡ááŒá±á¡áá±: áááºáá±á¬ááºááŸá¯áá áºáá¯ááẠ"áá±áá±á¬áºáá«áá® 12 12:33:56 2022 GMT" áá±á¬áºáááºááŒáá·áº áááºááŸááºáááºáááºážáá¯ááºáá¯á¶ážáááºááᯠáá¯ááºáá±ážáá«áááºá
ECMAScript5 ááœáẠdate.parse() ISO 8601 áá±á¬áºááẠ(YYYY-MM-DDTHH:mm:ss.sssZ) ááŒáá·áº áááºá áœá²áá áºáá¯ááᯠáááºáá¶áááºá áááºážááœáẠááŒáá¯ážáá áºáá»á±á¬ááºážááᯠMMM DD YYYY HH:mm:ss ZZ áá±á¬áºáááºááŒáá·áº áá¬á áºáá¯ááºááẠááá¯á¡ááºáááº
ááŒá¿áá¬: ááááºááá¯ážááᯠáá¶áá«ááºá¡ááŒá áºááá¯ááºáá² á á¬áá¬ážá¡ááŒá Ạáá±á¬áºááŒáááºá á€áá±á¬áºáááºááŸááá±áá¬ááᯠDuktape á០áááºááá¶áá«á
ááŒá±ááŸááºážáá»ááºá¥ááá¬:
-
ááááŠážá áœá¬á áááºááá¯ážáá áºáá¯áá°áá±á¬ ááááºážááŸááºáá áºáá¯ááᯠááŒá±áá¬ááẠ(áá¬ááºááœáŸááºážáá áºáá¯áá¯á¶ážááẠáá±á¬áºáá¬áá»á¬ážááŒáá·áº ááá¯ááºážááŒá¬ážáá±á¬áºááŒáá¬ážáá±á¬ variable áá»á¬ážá ááŒá±ááŒá¬áá»ááºááŒá áºáááº)á
-
áááá á¬ááŒá±á¬ááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠááá·áºáááºáá»ááºááŸááááºá áœá²ááᯠáááŸááááºá á¡ááá¯áž áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠspace áá»á¬ážááŒáá·áº ááá¯ááºážááŒá¬ážáá«á ááŸá²ááœá¬ážá á±. ááá¯á·ááŒá±á¬áá·áºá array áááŒááºá ááºáá áºáá¯á á®ááẠá¡ááœáŸááºáž 0 ááŸá áááºáᬠspace áá áºáá¯ááŸá±á·ááŸáá·áºáá±á¬ááºááœáẠáááºá áœá²ááŒááºá ááºáá áºáá¯ááŸáá·áº áááºááá¯ááºááá·áº array áá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·áááŸááááºá ááœá²(0) - áá áºáá ááœá²(1) - áá¶áá«ááºá ááœá²(2) - á¡áá»áááºááŸáá·áºá¡áá° string áá áºáá¯á ááá¯á·áá±á¬ááºá ááá¯á·áá±á¬ááºá áááºá áœá²áááŒááºá ááºáá áºáá¯á á®ááᯠarray ááŸá á¡ááœáŸááºážááŒáá·áº áááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
`var split = value.split(' '),`
- áááá¯ááºáž (á¡áá»áááºááŸáá·áºáááŒá±ážáá® á¡á ááºááá¯ááº) ááẠáááºážáá»ááºážááŸá áááºážáá¡áá±á¡áá¬ážá¡ááœáŸááºáž (0 á០11) ááŸáá·áº ááá¯ááºáá®áá«áááºá á á¬áá¬ážáááºááá¯ážááᯠááááºážáááºááá¯ážááá¯á· ááŒá±á¬ááºážáááºá áá¡ááœáŸááºážááá¯á· áá±á«ááºážááá·áºááẠ(ááá»á¬ážááᯠ1 ááŸá áááºá áá±ááœááºáá¬ážáá±á¬ááŒá±á¬áá·áº)á á€ááá á¹á ááœááºá áá áºáá¯ááááºááá¯ážááŒááºážáá«ááŸáááá·áºá¡áá¯á¶ážá¡ááŸá¯ááºážááᯠááœááºážá ááœááºážááááºááœááºáá°áááºá á¡ááŒá±á¬ááºážááŸá¬ ááá¯ááºáá«á ááŒáá¯ážáá áºáá»á±á¬ááºážááᯠáá¶áá«ááºáá áºáá¯ááá¯ááºáá² áááŸáááá¯ááºáááºááŒá áºáááºá á¡áá¯á¶ážááŸá¬ áá»áœááºáá±á¬áºááᯠá¡áá»ááº() - á¡áá¹ááá¬ááŸá áºáá¯á¶ážáá¬áá»ááºáá¬ážááẠ(ááááºážááŸá áºáá¯á¶ážáá«áá±á¬ááá»á¬ážá¡ááœááºá¡áá±ážááŒá®ážáááº)á
`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),`
- áá»áœááºá¯ááºááá¯á·ááẠááá·áºáá»á±á¬áºáá±á¬á¡á á®á¡á á¥áºá¡ááá¯ááºáž áá¯á¶ááŸááºá á¬ááŒá±á¬ááºážáá»á¬ážáááºááŒáá·áºááŒááºážááŒáá·áº áááŸááá¬ážáá±á¬áááºááá¯ážáá»á¬ážá០ISO áá±á¬áºáááºááœáẠá á¬áááºážáá áºáá¯ááŒá¯áá¯ááºáááºá
`ISOdate = split[3] + '-' + month_index + '-' + split[1] + 'T' + split[2],`
ááááºáá±á¬áºáááºááŸááá±áá¬ááẠ1970 á០áá±á¬ááºáá áºáá»áááºáá»áááºá¡áá á áá¹ááá·áºá¡áá±á¡ááœááºááŒá áºáááºá Zabbix ááẠááá·áºá¡á¬áž áááºáááá¯áá»á¬ážááŒáá·áºáᬠáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ááŒá±á¬áá·áº áá±áá¬ááᯠá¡á áá»áá¯ážááŸá¯áá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááẠáááŒá áºááá¯ááºááá±á¬ááºááẠ{áá±á·á áœá²} О {á¡áá»áááº}áááºá áœá²ááŸáá·áº á¡áá»áááºááᯠá¡áá¯á¶ážááŒá¯áááœááºáá°áá±á¬ áá±á¬áºáááºááŒáá·áº ááŒááºáá±ážáááºá
- ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠJavaScript ááœáẠáááºááŸááááºá áœá²ááᯠUnix Timestamp áá±á¬áºáááºááŒáá·áº áááá¯ááºááŒá®áž áááºááŸááºáááºáááºážáá¯ááºáá¯á¶ážááá·áºá¡áá»áááºá¡áá áá®áá®á áá¹ááá·áºá¡áá±á¡ááœááºááᯠáááŸáááẠáááŸááá¬áá±á¬ áááºááŸáẠáááºáááºážáá¯ááºáá¯á¶ážáááºá០áááºážááᯠáá¯ááºáá°ááá¯ááºáááºá
`now = Date.now();`
- Zabbix ááœáẠá áá¹ááá·áºáá»á¬ážáááŸáááẠááá¬áá±á¬áááºááá¯ážááᯠáá áºáá±á¬ááºááŒáá·áº ááá¯ááºážááŒá¬ážáá«áááºá
`return parseInt((Date.parse(ISOdate) - now) / 1000);`
á¡á áá»áá¯ážááŸá¯ááœáẠáááºááẠá áá¬ážáááºááᯠáááºááŸááºááá¯ááºáááºááá±á¬ááºáá¯á¶áž' áá±á¬ááºááœáẠáááºáá¯á¶á·ááŒááºááá¯áá±á¬ áá¬áááŸá á áá¹ááá·áº á¡áá±á¡ááœááºááŸáá·áº ááá¯ááºáá®áá±á¬ ááááºážá¡á á¯áá áºáᯠá¡áá±ááŒáá·áº á¥ááá¬á¡á¬ážááŒáá·áº áá®áááºážáááºáá»á¬ážá¡ááœááºážá ááá¯á·ááŒá±á¬áá·áºá áááºááŸááºááẠáá áºáááºá¡ááœááºáž áááºáááºážáá¯ááºááŒá±á¬ááºáž á¡á áá»áá¯ážááŸá¯á០á¡ááŒá±á¬ááºážááŒá¬ážáá«áááºá
ááŸááºá á¯. á¡áá¯á¶ážááŒá¯ááŸá¯ááá¯ááááá¬ážáá« parseInt() function áá²ááŸá¬ ááŒááºáá¬áá®áá®á áá¹ááá·áº ááá¯ááºážááŒá¬ážááŒááºážá០ááœááºáá±á«áºáá¬áá±á¬ á¡ááá¯ááºážááááºážááááºážáá»á¬ážááᯠááááºážááŒáá·áºá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²áááºá áá¯á¶ážááá¯á·áááºážááá«áááºá parseFloat() ááŸáá·áº á¡ááá¯ááºážááááºážá¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážáá«á.
source: www.habr.com