ํฐ์ฝ ์ฐ์ค์ฝํ, Zabbix ํตํฉ ํ ์์ง๋์ด
Zabbix๋ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ง์ถคํ ํ๋ซํผ์ ๋๋ค. Zabbix ์ด๊ธฐ ๋ฒ์ ๋ถํฐ ๋ชจ๋ํฐ๋ง ๊ด๋ฆฌ์๋ ๋ค์์ ํตํด ๋ค์ํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์์ต๋๋ค. ํ์ ๋์ ๋คํธ์ํฌ ๋ ธ๋๋ฅผ ํ์ธํฉ๋๋ค. ๋์์ ์คํฌ๋ฆฝํธ ์ถ์๋ก ์ธํด ์คํฌ๋ฆฝํธ ์ง์ ํ์์ฑ, ํต์ ๋ ธ๋ ๋ฐ ํ๋ก์๋ก์ ์ ๋ฌ, ๋ค์ํ ๋ฒ์ ์ง์ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ด๋ ค์์ด ๋ฐ์ํ์ต๋๋ค.
์๋น ์ค์ฉ ์๋ฐ์คํฌ๋ฆฝํธ
2019๋ 4.2์, JavaScript ์ ์ฒ๋ฆฌ์ ํจ๊ป Zabbix 3.4๊ฐ ๋์ ๋์์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋๊ฐ๋ก ๊ฐ์ ธ์ ์ํํ๊ณ Zabbix๊ฐ ์ดํดํ๋ ํ์์ผ๋ก ์ ๊ณตํ๊ณ Zabbix์์ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌํ ์ค๋น๊ฐ ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฐ๋จํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ ์คํฌ๋ฆฝํธ ์์ฑ์ ํฌ๊ธฐํ๊ณ ๊ทธ๋ฐ ๋ค์ Zabbix ๋ฐ JavaScript ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํฉ๋๋ค. Zabbix XNUMX์ ๋ฑ์ฅํ ํ์ ์์ค ๊ฒ์ ๋ฐ ์ข ์ ํญ๋ชฉ๊ณผ ํจ๊ป ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์๋นํ ์ ์ฐํ ๊ฐ๋ ์ ์ป์์ต๋๋ค.
Zabbix 4.4์์๋ JavaScript ์ฌ์ ์ฒ๋ฆฌ์ ๋ ผ๋ฆฌ์ ์ฐ์์ผ๋ก Zabbix ์๋ฆผ์ ํ์ฌ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์ฝ๊ฒ ํตํฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ Webhook์ด๋ผ๋ ์๋ก์ด ์๋ฆผ ๋ฐฉ๋ฒ์ด ๋ฑ์ฅํ์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ์ดํ
JavaScript์ Duktape์ ์ ํํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ธ์ด ๋ฐ ์์ง์ ๋ํ ๋ค์ํ ์ต์ ์ด ๊ณ ๋ ค๋์์ต๋๋ค.
- ๋ฃจ์ - ๋ฃจ์ 5.1
- ๋ฃจ์ - LuaJIT
- ์๋ฐ์คํฌ๋ฆฝํธ - ๋ํ ์ดํ
- ์๋ฐ์คํฌ๋ฆฝํธ - ์ ๋ฆฌ์คํฌ๋ฆฝํธ
- ์๋ฒ ๋๋ ํ์ด์ฌ
- ์๋ฒ ๋๋ ํ
์ฃผ์ ์ ํ ๊ธฐ์ค์ ๋ณด๊ธ, ์ ํ์ ์์ง ํตํฉ์ ์ฉ์ด์ฑ, ์์ง์ ๋ฎ์ ๋ฆฌ์์ค ์๋น ๋ฐ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ, ์ด ์ธ์ด๋ก ๋ ์ฝ๋๋ฅผ ๋ชจ๋ํฐ๋ง์ ๋์ ํ๋ ์์ ์ฑ์ด์์ต๋๋ค. ์งํ์ ์กฐํฉ์ ๊ธฐ๋ฐ์ผ๋ก JavaScript๊ฐ Duktape ์์ง์์ ์น๋ฆฌํ์ต๋๋ค.
์ ํ ๊ธฐ์ค ๋ฐ ์ฑ๋ฅ ํ ์คํธ
๋ํ ์ดํ์ ํน์ง:
- ๊ธฐ์ค
โ Duktape์ฉ Zabbix ๋ชจ๋:
- Zabbix.log() - ๋ค์ํ ์ธ๋ถ ์์ค์ ๋ฉ์์ง๋ฅผ Zabbix ์๋ฒ ๋ก๊ทธ์ ์ง์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Webhook์ ์ค๋ฅ๋ฅผ ์๋ฒ ์ํ์ ์ฐ๊ด์ํฌ ์ ์์ต๋๋ค.
- CurlHttpRequest() - Webhook ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋คํธ์ํฌ์ HTTP ์์ฒญ์ ํ ์ ์์ต๋๋ค.
- atob() ๋ฐ btoa() - Base64 ํ์์ผ๋ก ๋ฌธ์์ด์ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉํ ์ ์์ต๋๋ค.
์ฐธ๊ณ . Duktape๋ ACME ํ์ค์ ์ค์ํฉ๋๋ค. Zabbix๋ ์คํฌ๋ฆฝํธ์ 2015 ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. ํ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ํ๋ฏ๋ก ๋ฌด์ํด๋ ๋ฉ๋๋ค..
์๋ฐ์คํฌ๋ฆฝํธ ๋ง๋ฒ
JavaScript์ ๋ชจ๋ ๋ง๋ฒ์ ๋ฌธ์์ด, ์ซ์ ๋ฐ ๋ถ์ธ๊ณผ ๊ฐ์ ๋์ ํ์ดํ ๋ฐ ์ ํ ์บ์คํ ์ ์์ต๋๋ค.
์ด๋ ๋ณ์๊ฐ ๊ฐ์ ๋ฐํํด์ผ ํ๋ ์ ํ์ ๋ฏธ๋ฆฌ ์ ์ธํ ํ์๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
์ํ ์ฐ์ฐ์์ ํจ์ ์ฐ์ฐ์๊ฐ ๋ฐํํ ๊ฐ์ ์ซ์๋ก ๋ณํ๋ฉ๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์ ์์ธ๋ ๋ง์ ์ ๋๋ค. ์ฉ์ด ์ค ์ ์ด๋ ํ๋๊ฐ ๋ฌธ์์ด์ด๋ฉด ๋ฌธ์์ด ๋ณํ์ด ๋ชจ๋ ์ฉ์ด์ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฐธ๊ณ . ์ด๋ฌํ ๋ณํ์ ๋ด๋นํ๋ ๋ฉ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์ ์์ ํ๋กํ ํ์ ์์ ๊ตฌํ๋ฉ๋๋ค. ๊ฐ์น์ ะธ toString. ๊ฐ์น์ ์ซ์ ๋ณํ ์ค์ ํธ์ถ๋๋ฉฐ ํญ์ ๋ฉ์๋ ์ ์ ํธ์ถ๋ฉ๋๋ค. toString. ๋ฐฉ๋ฒ ๊ฐ์น์ ๊ธฐ๋ณธ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ฌด์๋ฉ๋๋ค.
๋ฉ์๋๊ฐ ๊ฐ์ฒด์์ ํธ์ถ๋จ ๊ฐ์. ์ฐพ์ ์ ์๊ฑฐ๋ ๊ธฐ๋ณธ ๊ฐ์ ๋ฐํํ์ง ์์ผ๋ฉด ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. toString. ๋ง์ฝ ๋ฐฉ๋ฒ์ด toString ์ฐพ์ ์ ์์, ๊ฒ์ ์ค ๊ฐ์น์ ๊ฐ์ฒด์ ํ๋กํ ํ์ ์์ ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๊ณ ํํ์์ ๋ชจ๋ ๊ฐ์ด ๋์ผํ ์ ํ์ผ๋ก ์บ์คํธ๋ ๋๊น์ง ๋ชจ๋ ๊ฒ์ด ๋ฐ๋ณต๋ฉ๋๋ค.. ๊ฐ์ฒด๊ฐ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ toString, ํ๋ฆฌ๋ฏธํฐ๋ธ ๊ฐ์ ๋ฐํํ๋ฉด ๋ฌธ์์ด ๋ณํ์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ์ ์ฉํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ ๋ฌธ์์ด์ผ ํ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, for for object 'obj' ๋ฉ์๋๊ฐ ์ ์๋์์ต๋๋ค. 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 ๊ฐ์น ์ฆ๊ฐ ๊ธฐ๋ฅ์ผ๋ก. ๋ฐ๋ผ์ ๊ฐ ํ์ ๋น๊ต์์ ๊ฐ์ด ์ฆ๊ฐํฉ๋๋ค. ๋น์บ์คํธ ๋น๊ต(===)๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํ์
์บ์คํ
์์ด ๋น๊ต
์ฐธ๊ณ . ์บ์คํธ ๋น๊ต๋ฅผ ๋ถํ์ํ๊ฒ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
๋ณต์กํ ๋ก์ง์ ๊ฐ์ง Webhook๊ณผ ๊ฐ์ด ํ์ ์บ์คํ ๊ณผ์ ๋น๊ต๊ฐ ํ์ํ ๋ณต์กํ ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ ๋ณ์๋ฅผ ๋ฐํํ๊ณ ๋ถ์ผ์น ๋ฐ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ ๋ํ ๊ฒ์ฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์นํ ๋ฏธ๋์ด
2019๋ ๋ง๊ณผ 2020๋ ์ด์ Zabbix ํตํฉ ํ์ Zabbix ๋ฐฐํฌํ๊ณผ ํจ๊ป ์ ๊ณต๋๋ Webhook ๋ฐ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํตํฉ์ ์ ๊ทน์ ์ผ๋ก ๊ฐ๋ฐํด ์์ต๋๋ค.
๋์ค์ฝ๋ ๋ฝ์ค ์ง๋ผ ์๋น์ค ๋ฐ์คํฌ ๊ฐ์ฅ ์ค์ํ Microsoft ํ ์ต์ค์ ๋ OTR ํ์ด์ง ๋ํฐ ํธ์ ์ค๋ฒ ๋ ๋ ๋ง์ธ ServiceNow ์ฑ๊ธ4 ๋์จํ๊ฒ ํ ๋ ๊ทธ๋จ ์ ๋ง๋ ์ ๋ฐ์คํฌ
์ ๋งํฌ
์ ์ฒ๋ฆฌ
- JavaScript์์ ์ ์ฒ๋ฆฌ์ ์ถํ์ผ๋ก ๋๋ถ๋ถ์ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ํฌ๊ธฐํ ์ ์๊ฒ ๋์์ผ๋ฉฐ ํ์ฌ Zabbix์์๋ ๋ชจ๋ ๊ฐ์ ๊ฐ์ ธ์ ์์ ํ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
- Zabbix์ ์ ์ฒ๋ฆฌ๋ JavaScript ์ฝ๋์ ์ํด ๊ตฌํ๋๋ฉฐ ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ๋๋ฉด ๋จ์ผ ๊ฐ์ ๋งค๊ฐ ๋ณ์๋ก ์ฌ์ฉํ๋ ํจ์๋ก ๋ณํ๋ฉ๋๋ค. ๊ฐ์น ๋ฌธ์์ด๋ก(๋ฌธ์์ด์๋ ์ซ์์ ์ซ์๊ฐ ๋ชจ๋ ํฌํจ๋ ์ ์์).
- ์ถ๋ ฅ์ ํจ์์ด๋ฏ๋ก ์คํฌ๋ฆฝํธ ๋์๋ ํ์ return.
- ์ฝ๋์์ ์ฌ์ฉ์ ์ง์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ฆฌ์์ค๋ ์ด์ ์ฒด์ ์์ค๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก๋ ์ ํ๋ ์ ์์ต๋๋ค. ์ ์ฒ๋ฆฌ ๋จ๊ณ์๋ ์ต๋ 10MB์ RAM๊ณผ 10์ด์ ์คํ ์๊ฐ ์ ํ์ด ํ ๋น๋ฉ๋๋ค.
์ฐธ๊ณ . ๋ค์ "๋ฌด๊ฑฐ์ด" ์ ์ฒ๋ฆฌ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก ์์ฒ ๊ฐ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ 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
๊ณ์ฐ๋ ํญ๋ชฉ์ ์ ์ฒ๋ฆฌ๋ก ๋ฐ๊ฟ๋๋ค.
์กฐ๊ฑด: ์ผ์์์ ํ์จ ์จ๋๋ฅผ ๊ฐ์ ธ์์ ์ญ์จ๋ก ์ ์ฅํฉ๋๋ค.
์ด์ ์๋ ์จ๋๋ฅผ ํ์จ ๋จ์๋ก ์์งํ๋ ํญ๋ชฉ์ ๋ง๋ค์์ต๋๋ค. ๊ทธ ํ ์์์ ์ฌ์ฉํ์ฌ ํ์จ๋ฅผ ์ญ์จ๋ก ๋ณํํ๋ ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํญ๋ชฉ(๊ณ์ฐ๋จ)์ด ์์ต๋๋ค.
๋ฌธ์ :
- ๋ฐ์ดํฐ ์์๋ฅผ ๋ณต์ ํ๊ณ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ผ ํฉ๋๋ค.
- ์์์์ ๊ณ์ฐ ๋ฐ ์ฌ์ฉ๋๋ "์์" ๋ฐ์ดํฐ ํญ๋ชฉ๊ณผ ๊ณ์ฐ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๊ฐ๊ฒฉ์ ๋์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ณ์ฐ ํญ๋ชฉ์ด ์ง์๋์ง ์๋ ์ํ๊ฐ ๋๊ฑฐ๋ ์ด์ ๊ฐ์ ๊ณ์ฐํ์ฌ ๋ชจ๋ํฐ๋ง ๊ฒฐ๊ณผ์ ์ ๋ขฐ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
ํ ๊ฐ์ง ํด๊ฒฐ์ฑ ์ ๊ณ์ฐ๋ ํญ๋ชฉ์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ํญ๋ชฉ(์ด ๊ฒฝ์ฐ ํ์จ ์จ๋) ์ดํ์ ํ๊ฐ๋๋๋ก ํ๊ธฐ ์ํด ๊ณ ์ ๋ ๊ฐ๊ฒฉ์ ์ ํธํ๋ ์ ์ฐํ ๊ฒ์ฌ ๊ฐ๊ฒฉ์์ ๋ฒ์ด๋๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋ฅผ ๋ค์ด ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ๋ง์ ์์ ์ฅ์น๋ฅผ ํ์ธํ๊ณ 30์ด๋ง๋ค ํ์ธ์ด ์ํ๋๋ ๊ฒฝ์ฐ Zabbix๋ 29์ด ๋์ "ํดํน"ํ๊ณ ๋ง์ง๋ง ์๊ฐ์ ํ์ธ ๋ฐ ๊ณ์ฐ์ ์์ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋๊ธฐ์ด์ด ์์ฑ๋๊ณ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฐ๋ผ์ ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ๊ณ ์ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด ๋ฌธ์ ์์ ์ต์ ์ ์๋ฃจ์ ์ ํ์จ๋ฅผ ์ญ์จ๋ก ๋ณํํ๋ ํ ์ค JavaScript ์ฌ์ ์ฒ๋ฆฌ์ ๋๋ค.
`return (value - 32) * 5 / 9;`
๋น ๋ฅด๊ณ ์ฌ์ฐ๋ฉฐ ๋ถํ์ํ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์์ฑํ๊ณ ๊ธฐ๋ก์ ์ ์งํ ํ์๊ฐ ์์ผ๋ฉฐ ๊ฒ์ฌ๋ฅผ ์ํด ์ ์ฐํ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
`return (parseInt(value) + parseInt("{$EXAMPLE.MACRO}"));`
๊ทธ๋ฌ๋ ๊ฐ์ ์ํฉ์์ ์๋ฅผ ๋ค์ด ๋งคํฌ๋ก์ ์ ์๋ ์์์ ํจ๊ป ์์ ๋ ๋ฐ์ดํฐ ์์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๊ฐ์น ๋ฌธ์์ด๋ก ํ์ฅ๋ฉ๋๋ค. ๋ฌธ์์ด ์ถ๊ฐ ์์ ์์ ๋ โโ๋ฌธ์์ด์ ๋จ์ํ ํ๋๋ก ๊ฒฐํฉ๋ฉ๋๋ค.
`return (value + "{$EXAMPLE.MACRO}");`
์ํ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ์ป์ ๊ฐ์ ์ ํ์ ์ซ์ ํ์์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ตฌ๋ฌธ ๋ถ์(), ์ ์, ํจ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ตฌ๋ฌธ ๋ถ์ ํ๋กํธ(), ์ญ์ง์ ๋๋ ํจ์๋ฅผ ์์ฑํฉ๋๋ค. ๋ฒํธ, ์ ์ ๋๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
2 ์์
์ธ์ฆ์๊ฐ ๋๋ ๋๊น์ง์ ์๊ฐ์ ์ด ๋จ์๋ก ๊ฐ์ ธ์ต๋๋ค.
์กฐ๊ฑด: ์๋น์ค๋ "Feb 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์์ ํ์ฉ๋์ง ์์ต๋๋ค.
์๋ฃจ์ ์:
-
์ฐ์ , ๊ฐ์ ๊ฐ๋ ๋ณ์๊ฐ ์ ์ธ๋ฉ๋๋ค(์ ์ฒด ์คํฌ๋ฆฝํธ๋ ์ผํ๋ก ๊ตฌ๋ถ๋์ด ๋์ด๋๋ ๋ณ์ ์ ์ธ์ ๋๋ค).
-
์ฒซ ๋ฒ์งธ ์ค์์ ์ฐ๋ฆฌ๋ ๋งค๊ฐ ๋ณ์์์ ๋ ์ง๋ฅผ ์ป์ต๋๋ค. ๊ฐ์น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค. ๋ถ์ด. ๋ฐ๋ผ์ ์ธ๋ฑ์ค 0์์ ์์ํ๋ ๋ฐฐ์ด์ ๊ฐ ์์๊ฐ ๊ณต๋ฐฑ ์ ํ์ ๋ ์ง ์์ ํ๋์ ํด๋นํ๋ ๋ฐฐ์ด์ ์ป์ต๋๋ค. ๋ถํ (0) - ์, ๋ถํ (1) - ์ซ์, ๋ถํ (2) - ์๊ฐ ๋ฑ์ด ํฌํจ๋ ๋ฌธ์์ด. ๊ทธ ํ ๋ ์ง์ ๊ฐ ์์๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์ก์ธ์คํ ์ ์์ต๋๋ค.
`var split = value.split(' '),`
- ๊ฐ ์(์ฐ๋์)์ ๋ฐฐ์ด์์ ํด๋น ์์น์ ์ธ๋ฑ์ค(0์์ 11๊น์ง)์ ํด๋นํฉ๋๋ค. ํ ์คํธ ๊ฐ์ ์ซ์ ๊ฐ์ผ๋ก ๋ณํํ๋ ค๋ฉด ์ ์ธ๋ฑ์ค์ 1์ด ์ถ๊ฐ๋ฉ๋๋ค(์์ 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๋ ๋งคํฌ๋ก์์๋ง ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. {๋ฐ์ดํธ} ะธ {์๊ฐ}, ์ฌ์ฉ์์๊ฒ ์น์ํ ํ์์ผ๋ก ๋ ์ง์ ์๊ฐ์ ๋ฐํํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ Unix ํ์์คํฌํ ํ์์ JavaScript์์ ํ์ฌ ๋ ์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ๊ฒฐ๊ณผ ์ธ์ฆ์ ๋ง๋ฃ ๋ ์ง์์ ๋นผ์ ์ง๊ธ๋ถํฐ ์ธ์ฆ์๊ฐ ๋ง๋ฃ๋ ๋๊น์ง์ ๋ฐ๋ฆฌ์ด ์๋ฅผ ์ป์ ์ ์์ต๋๋ค.
`now = Date.now();`
- ๋ฐ์ ๊ฐ์ ์ฒ์ผ๋ก ๋๋์ด Zabbix์์ ์ด๋ฅผ ์ป์ต๋๋ค.
`return parseInt((Date.parse(ISOdate) - now) / 1000);`
ํธ๋ฆฌ๊ฑฐ์์ ' ์์ ์ง์ ํ ์ ์์ต๋๋ค.๋ง์ง๋ง' ๋ฐ ์๋ตํ๋ ค๋ ๊ธฐ๊ฐ(์: ์ฃผ)์ ์ด ์์ ํด๋นํ๋ ์ผ๋ จ์ ์ซ์์ ๋๋ค. ๋ฐ๋ผ์ ํธ๋ฆฌ๊ฑฐ๋ ์ธ์ฆ์๊ฐ ์ผ์ฃผ์ผ ํ์ ๋ง๋ฃ๋จ์ ์๋ฆฝ๋๋ค.
์ฐธ๊ณ . ์ฌ์ฉ์ ์ฃผ์ ๊ตฌ๋ฌธ ๋ถ์() ๊ธฐ๋ฅ์์ return๋ฐ๋ฆฌ์ด๋ฅผ ์ ์๋ก ๋๋ ๊ฒฐ๊ณผ์ ๋ถ์๋ฅผ ๋ณํํฉ๋๋ค. ๋น์ ์ ๋ํ ์ฌ์ฉํ ์ ์์ต๋๋ค ๊ตฌ๋ฌธ ๋ถ์ ํ๋กํธ() ์์ ๋ฐ์ดํฐ ์ ์ฅ.
์ถ์ฒ : habr.com