ãã£ãã³ã»ãŠã¹ã³ããZabbix çµ±åããŒã ãšã³ãžãã¢
Zabbix ã¯ãããããçš®é¡ã®ããŒã¿ãç£èŠããããã«äœ¿çšãããã«ã¹ã¿ãã€ãºå¯èœãªãã©ãããã©ãŒã ã§ãã Zabbix ã®åæããŒãžã§ã³ä»¥æ¥ãç£èŠç®¡çè ã¯ã次ã®æ¹æ³ã§ããŸããŸãªã¹ã¯ãªãããå®è¡ã§ããŸããã ã¿ãŒã²ãããããã¯ãŒã¯ããŒãã®ãã§ãã¯çšã åæã«ãã¹ã¯ãªããã®éå§ã«ãããã¹ã¯ãªããã®ãµããŒãã®å¿ èŠæ§ãéä¿¡ããŒãããããã·ãžã®é ä¿¡ãããŸããŸãªããŒãžã§ã³ã®ãµããŒããªã©ãå€ãã®å°é£ãçããŸããã
Zabbix çšã® JavaScript
2019 幎 4.2 æã«ãJavaScript ååŠçãåãã Zabbix 3.4 ãå°å ¥ãããŸããã å€ãã®äººã¯ãããŒã¿ãã©ããã«ååŸããããããã€ãžã§ã¹ãã㊠Zabbix ãç解ã§ãã圢åŒã§æäŸããZabbix ã«ããä¿åãåŠçã®æºåãã§ããŠããªãããŒã¿ãåãåãåçŽãªãã§ãã¯ãå®è¡ããã¹ã¯ãªããã®äœæãæŸæ£ãããšããã¢ã€ãã¢ã«è奮ããŸããã次ã«ãZabbix ããã³ JavaScript ããŒã«ã䜿çšããŠãã®ããŒã¿ ã¹ããªãŒã ãåŠçããŸãã Zabbix XNUMX ã§ç»å Žããäœã¬ãã«ã®æ€åºãšäŸåé ç®ãšäœµããŠãåä¿¡ããããŒã¿ã䞊ã¹æ¿ããŠç®¡çããããã®ããªãæè»ãªæŠå¿µãåŸãããŸããã
Zabbix 4.4 ã§ã¯ãJavaScript ã§ã®ååŠçã®è«ççãªç¶ç¶ãšããŠãæ°ããéç¥æ¹æ³ã§ãã Webhook ãç»å ŽããŸãããããã䜿çšãããšãZabbix éç¥ããµãŒãããŒã㣠ã¢ããªã±ãŒã·ã§ã³ãšç°¡åã«çµ±åã§ããŸãã
JavaScript ãšãã¯ããŒã
ãªã JavaScript ãš Duktape ãéžã°ããã®ã§ãã? èšèªãšãšã³ãžã³ã®ããŸããŸãªãªãã·ã§ã³ãæ€èšãããŸããã
- ã«ã¢ - ã«ã¢ 5.1
- ã«ã¢ - LuaJIT
- JavaScript - ãã¯ããŒã
- JavaScript â ãžã§ãªãŒã¹ã¯ãªãã
- åã蟌ã¿Python
- åã蟌ãŸããPerl
äž»ãªéžæåºæºã¯ãæ®åçã補åãžã®ãšã³ãžã³ã®çµ±åã®å®¹æãããªãœãŒã¹æ¶è²»ã®äœããšãšã³ãžã³ã®å šäœçãªããã©ãŒãã³ã¹ããã®èšèªã®ã³ãŒããç£èŠã«å°å ¥ããéã®å®å šæ§ã§ããã ã€ã³ãžã±ãŒã¿ãŒã®çµã¿åããã«åºã¥ããŠãJavaScript ã Duktape ãšã³ãžã³ã«åå©ããŸããã
éžæåºæºãšæ§èœãã¹ã
ãã¯ããŒãã®ç¹åŸŽ:
- æšæº
â Duktape çšã® Zabbix ã¢ãžã¥ãŒã«:
- Zabbix.log() - ããŸããŸãªè©³çŽ°ã¬ãã«ã®ã¡ãã»ãŒãžã Zabbix Server ãã°ã«çŽæ¥æžã蟌ãããšãã§ããŸããããã«ãããããšãã° Webhook å ã®ãšã©ãŒãšãµãŒããŒã®ç¶æ ãé¢é£ä»ããããšãã§ããŸãã
- CurlHttpRequest() - Webhook ã®äœ¿çšã®ããŒã¹ãšãªããããã¯ãŒã¯ã«å¯Ÿã㊠HTTP ãªã¯ãšã¹ããè¡ãããšãã§ããŸãã
- atob() ããã³ btoa() - Base64 圢åŒã§æååããšã³ã³ãŒãããã³ãã³ãŒãã§ããŸãã
NOTE. Duktape 㯠ACME èŠæ Œã«æºæ ããŠããŸãã Zabbix 㯠2015 ããŒãžã§ã³ã®ã¹ã¯ãªããã䜿çšããŸãã ãã®åŸã®å€æŽã¯è»œåŸ®ãªã®ã§ç¡èŠããŠããŸããŸããã.
JavaScript ã®éæ³
JavaScript ã®ãã¹ãŠã®éæ³ã¯ãåçãªåæå®ãšåãã£ã¹ã (æååãæ°å€ãããŒã«å€) ã«ãããŸãã
ããã¯ãå€æ°ãã©ã®ãããªåã®å€ãè¿ãããäºåã«å®£èšããå¿ èŠããªãããšãæå³ããŸãã
æ°åŠæŒç®ã§ã¯ãé¢æ°æŒç®åã«ãã£ãŠè¿ãããå€ã¯æ°å€ã«å€æãããŸãã ãã®ãããªæŒç®ã®äŸå€ã¯å ç®ã§ããããã¯ãçšèªã®å°ãªããšã XNUMX ã€ãæååã§ããå Žåãæååå€æããã¹ãŠã®çšèªã«é©çšãããããã§ãã
NOTE. ãã®ãããªå€æãæ åœããã¡ãœããã¯éåžžããªããžã§ã¯ãã®èŠªãããã¿ã€ãã«å®è£ ãããŸãã å€ã® О toString. å€ã® æ°å€å€æäžãåžžã«ã¡ãœããã®åã«åŒã³åºãããŸãã toString. æ¹æ³ å€ã® ããªããã£ãå€ãè¿ããªããã°ãªããŸããããã以å€ã®å Žåããã®çµæã¯ç¡èŠãããŸãã
ãªããžã§ã¯ãã«å¯ŸããŠã¡ãœãããåŒã³åºããã å€OFã èŠã€ãããªãå ŽåããŸãã¯ããªããã£ãå€ãè¿ããªãå Žåãã¡ãœãããåŒã³åºãããŸãã toStringã æ¹æ³ã®å Žå toString èŠã€ãããªããæ€çŽ¢äž å€ã® ãªããžã§ã¯ãã®ãããã¿ã€ãå ã§ãå€ã®åŠçãå®äºããåŒå ã®ãã¹ãŠã®å€ãåãåã«ãã£ã¹ãããããŸã§ããã¹ãŠãç¹°ãè¿ãããŸãã. ãªããžã§ã¯ããã¡ãœãããå®è£ ããŠããå Žå toStringãããªããã£ãå€ãè¿ãå Žåããããæååå€æã«äœ¿çšãããŸãã ãã ãããã®ã¡ãœãããé©çšããçµæã¯å¿ ãããæååã§ãããšã¯éããŸããã
ããšãã°ããªããžã§ã¯ã ' ã®å Žåãªããžã§ã¯ã'ã¡ãœãããå®çŸ©ãããŠããŸã toString,
`var obj = { toString() { return "200" }}`
æ¹æ³ toString æ£ç¢ºã«æååãè¿ããŸããæ°å€ãå«ãæååãè¿œå ãããšãçµåãããæååãåŸãããŸãã
`obj + 1 // '2001'`
`obj + 'a' // â200a'`
ã§ãæžãçŽããš toString, ã¡ãœãããæ°å€ãè¿ãããã«ããªããžã§ã¯ããå ç®ããããšãæ°å€å€æã䌎ãæ°åŠæŒç®ãå®è¡ãããæ°åŠçå ç®ã®çµæãååŸãããŸãã
`var obj = { toString() { return 200 }}`
`obj + 1 // '2001'`
ãã®å Žåãæååã§å ç®ãå®è¡ãããšãæååå€æãå®è¡ãããçµåãããæååãåŸãããŸãã
`obj + 'a' // â200a'`
ããããJavaScript ã®åå¿è ãŠãŒã¶ãŒã«ããå€æ°ã®ééãã®åå ã§ãã
æ¹æ³ toString ãªããžã§ã¯ãã®çŸåšã®å€ã 1 å¢ããé¢æ°ãäœæã§ããŸãã
å€æ°ã 3 ã«çããããŸã 4 ã«ãçããå Žåã«ãã¹ã¯ãªãããå®è¡ãããŸãã
ãã£ã¹ã (==) ãšæ¯èŒãããšãæ¯åã¡ãœãããå®è¡ãããŸãã toString å€å¢å æ©èœä»ãã ãããã£ãŠãåŸç¶ã®æ¯èŒããšã«ãå€ã¯å¢å ããŸãã ããã¯ãéãã£ã¹ãæ¯èŒ (===) ã䜿çšããããšã§åé¿ã§ããŸãã
åãã£ã¹ããªãã®æ¯èŒ
NOTE. äžå¿ èŠã«ãã£ã¹ãæ¯èŒã䜿çšããªãã§ãã ãã.
è€éãªããžãã¯ãåãã Webhook ãªã©ãåãã£ã¹ããšã®æ¯èŒãå¿ èŠãªè€éãªã¹ã¯ãªããã®å Žåã¯ãå€æ°ãè¿ããäžäžèŽããšã©ãŒãåŠçããå€ã®ãã§ãã¯ãäºåã«äœæããããšããå§ãããŸãã
Webhook ã¡ãã£ã¢
2019 幎æ«ãã 2020 幎åãã«ãããŠãZabbix çµ±åããŒã ã¯ãZabbix ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ä»å±ãã Webhook ãšããã«äœ¿ããçµ±åã®éçºãç©æ¥µçã«è¡ã£ãŠããŸããã
Discord JIRA JiraãµãŒãã¹ãã¹ã¯ Mattermost ãã€ã¯ããœããã®ããŒã ãªãã¹ãžã§ã㌠OTR Pagerduty ã ãŸããããã人 Redmineã® ServiceNow ã·ã³ã°ã«4 Slack Telegram ã¶ãã ã®Zendesk
ãªã³ã¯å
ååŠç
- JavaScript ã§ã®ååŠçã®åºçŸã«ãããã»ãšãã©ã®å€éšã¹ã¯ãªãããæŸæ£ããããšãå¯èœã«ãªããçŸåš Zabbix ã§ã¯ä»»æã®å€ãååŸããŠãããããŸã£ããå¥ã®å€ã«å€æã§ããŸãã
- Zabbix ã§ã®ååŠç㯠JavaScript ã³ãŒãã«ãã£ãŠå®è£ ããããã€ãã³ãŒãã«ã³ã³ãã€ã«ããããšãåäžã®å€ããã©ã¡ãŒã¿ãŒãšããŠåãåãé¢æ°ã«å€æãããŸãã å€ æååãšã㊠(æååã«ã¯æ°åãšæ°åã®äž¡æ¹ãå«ããããšãã§ããŸã)ã
- åºåã¯é¢æ°ã§ãããããã¹ã¯ãªããã®æåŸã« return.
- ã³ãŒãå ã§ã«ã¹ã¿ã ãã¯ãã䜿çšããããšãå¯èœã§ãã
- ãªãœãŒã¹ã¯ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¬ãã«ã ãã§ãªããããã°ã©ã çã«ãå¶éã§ããŸãã ååŠçã¹ãããã«ã¯ãæ倧 10 ã¡ã¬ãã€ãã® RAM ãš 10 ç§ã®å®è¡æéå¶éãå²ãåœãŠãããŸãã
NOTE. ããªããéããååŠçã·ããªãªã«åŸã£ãŠ 10 ç§éã«æ¡ä»¶ä»ãã®æ°åã®ããŒã¿é ç®ãåéãããšãZabbix ã®é床ãäœäžããå¯èœæ§ãããããã1 ç§ãšããã¿ã€ã ã¢ãŠãå€ã¯éåžžã«é·ãå€ã§ãã ãããã£ãŠãååŠçãå®è¡ããããã ãã«å®è¡ããããããããã·ã£ã㊠ããŒã¿èŠçŽ (ãã㌠ã¢ã€ãã ) ãéããŠæ¬æ Œç㪠JavaScript ã¹ã¯ãªãããå®è¡ããããã«ååŠçã䜿çšããããšã¯ãå§ãã§ããŸããã.
ååŠçãã¹ããŸãã¯ãŠãŒãã£ãªãã£ã䜿çšããŠã³ãŒãããã§ãã¯ã§ããŸãã 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
èšç®é ç®ãååŠçã«çœ®ãæããŸãã
ç¶æ : ã»ã³ãµãŒãã枩床ãè¯æ°ã§ååŸããææ°ã§ä¿åããŸãã
以åã¯ã枩床ãè¯æ°ã§åéããã¢ã€ãã ãäœæããŠããŸããã ãã®åŸãæ°åŒã䜿çšããŠè¯æ°ãææ°ã«å€æããå¥ã®ããŒã¿é ç® (èšç®æžã¿)ã
åé¡:
- ããŒã¿èŠçŽ ãè€è£œãããã¹ãŠã®å€ãããŒã¿ããŒã¹ã«ä¿åããå¿ èŠããããŸãã
- èšç®ãããæ°åŒã§äœ¿çšãããã芪ãããŒã¿é ç®ãšãèšç®ãããããŒã¿é ç®ã®ééã«ã€ããŠåæããå¿ èŠããããŸãã ããããªããšãèšç®é ç®ããµããŒããããŠããªãç¶æ ã«ãªã£ããã以åã®å€ãèšç®ããããããå¯èœæ§ããããç£èŠçµæã®ä¿¡é Œæ§ã«åœ±é¿ããŸãã
XNUMX ã€ã®è§£æ±ºçã¯ãæè»ãªãã§ãã¯ééããããŠåºå®ééãéžæããããŒã¿ (ãã®å Žåã¯è¯æ°ã§ã®æž©åºŠ) ãåãåã£ãé ç®ã®åŸã§èšç®é ç®ãè©äŸ¡ãããããã«ããããšã§ããã
ããããããšãã°ããã³ãã¬ãŒãã䜿çšããŠå€æ°ã®ããã€ã¹ããã§ãã¯ãããã®ãã§ãã¯ã 30 ç§ããšã«å®è¡ãããå ŽåãZabbix 㯠29 ç§éããããã³ã°ãããæåŸã® XNUMX ç§ã§ãã§ãã¯ãšèšç®ãéå§ããŸãã ããã«ãããã¥ãŒãäœæãããããã©ãŒãã³ã¹ã«åœ±é¿ããŸãã ãããã£ãŠãæ¬åœã«å¿ èŠãªå Žåã«ã®ã¿åºå®ééã䜿çšããããšããå§ãããŸãã
ãã®åé¡ã®æé©ãªè§£æ±ºçã¯ãè¯æ°ãææ°ã«å€æãã XNUMX è¡ã® JavaScript ååŠçã§ãã
`return (value - 32) * 5 / 9;`
è¿ éãã€ç°¡åã§ãäžèŠãªããŒã¿é ç®ãäœæããŠå±¥æŽãä¿æããå¿ èŠããªããæè»ãªééã§ãã§ãã¯ããããšãã§ããŸãã
`return (parseInt(value) + parseInt("{$EXAMPLE.MACRO}"));`
ãã ããä»®å®ã®ç¶æ³ã§ãããšãã°ãã¯ãã§å®çŸ©ãããå®æ°ã䜿çšããŠãåä¿¡ããããŒã¿èŠçŽ ãè¿œå ããå¿ èŠãããå Žåã¯ããã©ã¡ãŒã¿ã å€ æååã«å±éãããŸãã æååã®å ç®æŒç®ã§ã¯ãXNUMX ã€ã®æååãåçŽã« XNUMX ã€ã«çµåãããŸãã
`return (value + "{$EXAMPLE.MACRO}");`
ç®è¡æŒç®ã®çµæãååŸããã«ã¯ãååŸããå€ã®åãæ°å€åœ¢åŒã«å€æããå¿ èŠããããŸãã ãã®ããã«ãé¢æ°ã䜿çšã§ããŸã parseIntïŒïŒãæŽæ°ãé¢æ°ãçæããŸãã parseFloat()ãå°æ°ãŸãã¯é¢æ°ãçæããŸãã æ°ãæŽæ°ãŸãã¯å°æ°ãè¿ããŸãã
2ã¿ã¹ã¯
蚌ææžãçµäºãããŸã§ã®æéãç§åäœã§ååŸããŸãã
ç¶æ : ãµãŒãã¹ã¯èšŒææžã®æå¹æéãã12 幎 12 æ 33 æ¥ 56:2022:XNUMX GMTãã®åœ¢åŒã§çºè¡ããŸãã
ECMAScript5ã§ã¯ Date.parseïŒïŒ ISO 8601 åœ¢åŒ (YYYY-MM-DDTHH:mm:ss.sssZ) ã®æ¥ä»ãåãå ¥ããŸãã MMM DD YYYY HH:mm:ss ZZ ã®åœ¢åŒã§æååããã£ã¹ãããå¿ èŠããããŸãã
åé¡: æã®å€ã¯æ°å€ã§ã¯ãªãããã¹ããšããŠè¡šãããŸãã ãã®åœ¢åŒã®ããŒã¿ã¯ Duktape ã§ã¯åãå ¥ããããŸããã
ãœãªã¥ãŒã·ã§ã³äŸ:
-
ãŸããå€ãåãåãå€æ°ã宣èšãããŸã (ã¹ã¯ãªããå šäœã¯ãã«ã³ãã§åºåã£ãŠãªã¹ããããå€æ°ã®å®£èšã§ã)ã
-
æåã®è¡ã§ã¯ãã©ã¡ãŒã¿ã®æ¥ä»ãååŸããŸãã å€ ã¡ãœããã䜿çšããŠã¹ããŒã¹ã§åºåããŸã splitã ãããã£ãŠãã€ã³ããã¯ã¹ 0 ããå§ãŸãé åã®åèŠçŽ ãã¹ããŒã¹ã®ååŸã® XNUMX ã€ã®æ¥ä»èŠçŽ ã«å¯Ÿå¿ããé åãåŸãããŸãã åå²(0) - æã åå²(1) - çªå·ã åå²(2) - æå»ãå«ãæååãªã©ããã®åŸãé åå ã®ã€ã³ããã¯ã¹ã«ãã£ãŠæ¥ä»ã®åèŠçŽ ã«ã¢ã¯ã»ã¹ã§ããŸãã
`var split = value.split(' '),`
- åæ (æç³»åé ) ã¯ãé åå ã®ãã®äœçœ®ã®ã€ã³ããã¯ã¹ (0 ãã 11) ã«å¯Ÿå¿ããŸãã ããã¹ãå€ãæ°å€ã«å€æããã«ã¯ãæã®ã€ã³ããã¯ã¹ã« 1 ãè¿œå ãããŸã (æã®çªå·ã¯ XNUMX ããå§ãŸããã)ã ãã®å ŽåãXNUMX ãè¿œå ããåŒã¯æ¬åŒ§ã§å²ãŸããŸããããããªããšãæ°å€ã§ã¯ãªãæååãååŸãããããã§ãã æåŸã«ãããŸã ã¹ã©ã€ã¹ïŒïŒ - é åãæ«å°Ÿããåãåã£ãŠ XNUMX æåã ããæ®ããŸã (ãã㯠XNUMX æ¡ã®æ°åãå«ãæã®å Žåã«éèŠã§ã)ã
`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 ã¿ã€ã ã¹ã¿ã³ã圢åŒã§çŸåšã®æ¥ä»ãååŸããçµæãšããŠåŸããã蚌ææžã®æå¹æéæ¥ãããããæžç®ããŠãçŸåšãã蚌ææžã®æå¹æéãåãããŸã§ã®ããªç§æ°ãååŸããŸãã
`now = Date.now();`
- Zabbix ã§ã¯ãåä¿¡ããå€ã XNUMX ã§å²ã£ãŠç§ãååŸããŸãã
`return parseInt((Date.parse(ISOdate) - now) / 1000);`
ããªã¬ãŒã§ã¯ãåŒ ' ãæå®ã§ããŸããæåŸ' ã®åŸã«ãå¿çããæéã®ç§æ° (é±åäœãªã©) ã«å¯Ÿå¿ããäžé£ã®æ°åãç¶ããŸãã ãããã£ãŠãããªã¬ãŒã¯èšŒææžã XNUMX é±éã§æéåãã«ãªãããšãéç¥ããŸãã
NOTE. 䜿çšã«æ³šæããŠãã ãã parseIntïŒïŒ æ©èœçã« returnããªç§ãé€ç®ããçµæã®å°æ°ãæŽæ°ã«å€æããŸãã ã䜿çšã§ããŸã parseFloat() éšåããŒã¿ãä¿åããŸã.
åºæïŒ habr.com