ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์๋ฃจ์ ์ ๋ง๋ค ๋ ์ผ๋ฐ Zabbix ๊ธฐ๋ฅ์ผ๋ก ์๋ฆ๋ต๊ฒ ํด๊ฒฐํ๊ณ ์ถ์๋ ๋ ๊ฐ์ง ์์ ์ด ์๊ฒผ์ต๋๋ค.
์์ 1. Mikrotik ๋ผ์ฐํฐ์์ ํ์ฌ ํ์จ์ด ๋ฒ์ ์ ์ถ์ ํฉ๋๋ค.
HTTP ํ ํ๋ฆฟ์ ์์ด์ ํธ๋ฅผ ์ถ๊ฐํ๋ฉด ์์ ์ด ์ฝ๊ฒ ํด๊ฒฐ๋ฉ๋๋ค. ์์ด์ ํธ๋ Mikrotik ์น ์ฌ์ดํธ์์ ํ์ฌ ๋ฒ์ ์ ์์ ํ๊ณ ํธ๋ฆฌ๊ฑฐ๋ ํ์ฌ ๋ฒ์ ๊ณผ ํ์ฌ ๋ฒ์ ์ ๋น๊ตํ๊ณ ๋ถ์ผ์นํ๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค.
10๊ฐ์ ๋ผ์ฐํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ด ์ค์ํ์ง ์์ง๋ง 3000๊ฐ์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ์๋ฒ์ 3000๊ฐ์ ์์ฒญ์ ๋ณด๋ด์๊ฒ ์ต๋๊น? ๋ฌผ๋ก ๊ทธ๋ฌํ ๊ณํ์ ํจ๊ณผ๊ฐ ์์ง๋ง 3000 ์์ฒญ์ด๋ผ๋ ์์ด๋์ด ์์ฒด๊ฐ ๋์๊ฒ ์ ํฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์๋ฃจ์ ์ ์ฐพ๊ณ ์ถ์์ต๋๋ค. ๋ํ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์๋ ์ฌ์ ํ ๋จ์ ์ด ์์ต๋๋ค. ์๋๋ฐฉ์ DoS ๊ณต๊ฒฉ์ ๋ํ ํ IP์ ์์ฒญ ์๋ฅผ ๊ณ์ฐํ ์ ์์ผ๋ฉฐ ๋จ์ํ ๊ธ์งํ ์ ์์ต๋๋ค.
์์ 2. ๋ค๋ฅธ HTTP ์์ด์ ํธ์์ ์ธ์ฆ ์ธ์ ์ฌ์ฉ.
์์ด์ ํธ๊ฐ HTTP๋ฅผ ํตํด "๋ซํ" ํ์ด์ง์์ ์ ๋ณด๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ธ์ฆ ์ฟ ํค๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ผ๋ฐ์ ์ผ๋ก "๋ก๊ทธ์ธ/๋น๋ฐ๋ฒํธ" ์์ด ํฌํจ๋ ํ์ค ์ธ์ฆ ์์์ด ์์ผ๋ฉฐ ์ฟ ํค์ ์ธ์ ID๋ฅผ ์ค์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ํ๋์ HTTP ์์ด์ ํธ ํญ๋ชฉ์์ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ Header์์ ์ด ๊ฐ์ ๋์ฒดํ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
"์น ์คํฌ๋ฆฝํธ"๋ ์์ผ๋ฉฐ ๋ ๋ค๋ฅธ ์ ํ ์ฌํญ์ด ์์ผ๋ฉฐ ๋ถ์ ๋ฐ ์ถ๊ฐ ์ ์ฅ์ ์ํด ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ํ์ด์ง์ ํ์ํ ๋ณ์๊ฐ ์๋์ง ํ์ธํ๊ฑฐ๋ ์ด์ ์ ๋ฐ์ ๋ณ์๋ฅผ ์น ์คํฌ๋ฆฝํธ ๋จ๊ณ ๊ฐ์ ์ ๋ฌํ ์๋ง ์์ต๋๋ค.
์ด๋ฌํ ์์
์ ๋ํด ์กฐ๊ธ ์๊ฐํ ํ ๋ชจ๋ํฐ๋ง ์์คํ
์ ๋ชจ๋ ๋ถ๋ถ(ํ
ํ๋ฆฟ, ํธ์คํธ, ํธ๋ฆฌ๊ฑฐ ๋๋ ํญ๋ชฉ)์์ ์๋ฒฝํ๊ฒ ๋ณผ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์น ์ธํฐํ์ด์ค API๋ฅผ ํตํด ๋งคํฌ๋ก๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
Zabbix๋ ์ฐ์ํ๊ณ ์์ธํ API ๋ฌธ์๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค. API๋ฅผ ํตํ ๋ฐ์ดํฐ ๊ตํ์๋ Json ๋ฐ์ดํฐ ํ์์ด ์ฌ์ฉ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์
ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป๊ณ ๋งคํฌ๋ก์ ๊ธฐ๋กํ๋ ์์ ์์๋ ์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋์ ์์ต๋๋ค.
1 ๋จ๊ณ
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ๋จ์ผ ์์ ๋๋ ์ฌ๋ฌ ์์ ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค. ๋ชจ๋ ์ฃผ์ ๋ ผ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ์์ผ๋ฉฐ ๋ง์ง๋ง 3๋จ๊ณ๋ ์ฃผ์ ๋ ผ๋ฆฌ์ ๋๋ค.
๋ด ์์์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ฒซ ๋ฒ์งธ ์์ ์ ์ํด PBX์์ ์ธ์ฆ ์ฟ ํค๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด์์ต๋๋ค. ๋ ๋ฒ์งธ ์์ ์ ์ํด Mikrotik ํ์จ์ด์ ํ์ฌ ๋ฒ์ ๋ฒํธ๋ฅผ ์ป์์ต๋๋ค.
Mikrotik ํ์จ์ด ํ์ฌ ๋ฒ์ ์ URL
์ ๊ทธ๋ ์ด๋.mikrotik.com/routeros/LATEST.6 - ํ์ฌ ์์ ๋ฒ์ ์ URL ์ฃผ์์ ๊ทธ๋ ์ด๋.mikrotik.com/routeros/LATEST.6fix โ ํ์ฌ LTS ๋ฒ์ ์ URL ์ฃผ์
์ด ์ฃผ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ํ์จ์ด ๋ฒ์ ์ ์์ ํ ๋ Mikrotik ์ฅ๋น ์์ฒด์์ ์ก์ธ์คํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ๊ฐ ์ฌ๋ก๋ง๋ค ์์ ํ ๊ฐ๋ณ์ ์ด๋ฉฐ ์์ ๋ ผ๋ฆฌ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ชจ๋ ๋น์ ์ ์์ ์ ๋ฌ๋ ค ์์ต๋๋ค.
์น ์คํฌ๋ฆฝํ ์ผ๋ก ์์ ํ ๋ ํ์ํ ์๋ต ๋ฐฉ๋ฒ์ ์ถ์ ํ์ญ์์ค. ์ ๋ชฉ HTTP ์๋ต ๋๋ ์์ฒด ัะตะปะพ ํค๋๊ฐ ์๋ ์๋ต?
์ธ์ฆ ์ฟ ํค๊ฐ ํ์ํ ๊ฒฝ์ฐ ์๋ต ๋ฐฉ๋ฒ์ ์ค์ ํ์ญ์์ค. ์ ๋ชฉ ๋ณํ์ ๊ฒฝ์ฐ์ฒ๋ผ.๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ mikrotik ์๋ฒ ์๋ต์ ๊ฒฝ์ฐ์ ๊ฐ์ด ๋ฃ์ด ๋ชธ ํค๋๊ฐ ์๋ ์๋ต.
2 ๋จ๊ณ
๋ ๋ฒ์งธ ๋จ๊ณ๋ก ๋์ด ๊ฐ์๋ค. ์ธ์ฆ ์ธ์ ๋ฐ๊ธฐ:
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin"
"password": "zabbix"
},
"id": 1,
"auth": null
}
jsonrpc๋ ์ฌ์ฉ ์ค์ธ JSON-RPC ํ๋กํ ์ฝ์ ๋ฒ์ ์ ๋๋ค.
Zabbix๋ JSON-RPC ๋ฒ์ 2.0์ ๊ตฌํํฉ๋๋ค.
- method - ํธ์ถ๋๋ ๋ฉ์๋.
- params - ๋ฉ์๋์ ์ํด ์ ๋ฌ๋๋ ๋งค๊ฐ๋ณ์.
- id๋ ์์์ ์์ฒญ ์๋ณ์์ ๋๋ค.
- auth - ์ฌ์ฉ์ ์ธ์ฆ ํค; ์์ง ๊ฐ์ง๊ณ ์์ง ์์ผ๋ฏ๋ก null๋ก ์ค์ ํ๊ฒ ์ต๋๋ค.
API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ถํ์ด ์ ํ๋ ๋ณ๋์ ๊ณ์ ์ ๋ง๋ค์์ต๋๋ค. ์ฒซ์งธ, ํ์ํ์ง ์์ ๊ณณ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ํ์๊ฐ ์์ต๋๋ค. ๋์งธ, 5.0 ์ด์ ๋ฒ์ ์์๋ ๋งคํฌ๋ก๋ฅผ ํตํด ์ค์ ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฝ์ ์ ์์์ต๋๋ค. ๋ฐ๋ผ์ Zabbix ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ๋ฉด admin ๊ณ์ ์ ๋์ฉํ๊ธฐ ์ฝ์ต๋๋ค.
์ด๋ ํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด API๋ก ์์ ํ๊ณ ์ธก๋ฉด์ ์๊ฒฉ ์ฆ๋ช ์ ์ ์ฅํ ๋ ํนํ ๊ทธ๋ ์ต๋๋ค.
๋ฒ์ 5.0๋ถํฐ ๋งคํฌ๋ก์ ์ ์ฅ๋ ์ํธ๋ฅผ ์จ๊ธฐ๋ ์ต์ ์ด ์์ต๋๋ค.
API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ๋ณ๋์ ๊ณ์ ์ ์์ฑํ ๋ ์น ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ์ ์
๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ์ง ํ์ธํ์ญ์์ค. ๋๋ ํ์ธํ์ง ์์๊ณ ์ค๋ซ๋์ ๋ด๊ฐ ํ์ํ ๋งคํฌ๋ก๊ฐ API์ ํ์๋์ง ์๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์์ต๋๋ค.
API์์ ์น์ธ์ ๋ฐ์ ํ ๋งคํฌ๋ก ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์งํํฉ๋๋ค.
3 ๋จ๊ณ
API๋ ํธ์คํธ ๋งคํฌ๋ก๋ฅผ ์ด๋ฆ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ๋จผ์ ๋งคํฌ๋ก ID๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ๋ํ ํน์ ํธ์คํธ์ ๋ํ ๋งคํฌ๋ก ๋ชฉ๋ก์ ์ป์ผ๋ ค๋ฉด ์ด ํธ์คํธ์ ID๋ฅผ ์์์ผ ํ๋ฉฐ ์ด๋ ์ถ๊ฐ ์์ฒญ์ ๋๋ค. ๊ธฐ๋ณธ ๋งคํฌ๋ก ์ฌ์ฉ {ํธ์คํธ ID} ์์ฒญ์ ํ์ฉ๋์ง ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ ํ์ ์ฐํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ด ํธ์คํธ์ ID๋ก ๋ก์ปฌ ๋งคํฌ๋ก๋ฅผ ๋ง๋ค์์ต๋๋ค. ์น ์ธํฐํ์ด์ค์์ ํธ์คํธ ID๋ฅผ ์ฐพ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค.
์ง์ ๋ ํธ์คํธ์ ๋ชจ๋ ๋งคํฌ๋ก ๋ชฉ๋ก์ด ํฌํจ๋ ์๋ต์ ํจํด์ผ๋ก ํํฐ๋งํ ์ ์์ต๋๋ค.
regex:{"hostmacroid":"([0-9]+)"[A-z0-9,":]+"{$MIKROTIK_VERSION}"
๋ฐ๋ผ์ ํ์ํ ๋งคํฌ๋ก์ ID๋ฅผ ์ป์ต๋๋ค. ์ฌ๊ธฐ์ MIKROTIK_๋ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์๋ ๋งคํฌ๋ก์ ์ด๋ฆ์
๋๋ค. ๋ด ๊ฒฝ์ฐ์๋ ๋งคํฌ๋ก๊ฐ ๊ฒ์๋ฉ๋๋ค. MIKROTIK_๋ฒ์ ํธ์คํธ์ ํ ๋น๋ ์
๋๋ค.
์์ฒญ ์์ฒด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{
"jsonrpc":"2.0",
"method":"usermacro.get",
"params":{
"output":"extend",
"hostids":"{$HOST_ID}"
},
"auth":"{sid}",
"id":1
}
๋ณ์ {sid} ๋ ๋ฒ์งธ ๋จ๊ณ์์ ํ๋ํ๊ณ API ์ธํฐํ์ด์ค๋ก ์์ ํด์ผ ํ๋ ๊ณณ์์ ์ง์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๋ง์ง๋ง 4๋จ๊ณ - ๋งคํฌ๋ก ์ ๋ฐ์ดํธ
์ด์ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๋งคํฌ๋ก ID, ์ธ์ฆ ์ฟ ํค ๋๋ ๋ผ์ฐํฐ์ ํ์จ์ด ๋ฒ์ ์ ์๊ณ ์์ต๋๋ค. ๋งคํฌ๋ก ์์ฒด๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{
"jsonrpc":"2.0",
"method":"usermacro.update",
"params":{
"hostmacroid":"{hostmacroid}",
"value":"{mikrotik_version}"
},
"auth":"{sid}",
"id":1
}
{๋ฏธํฌ๋กํฑ_๋ฒ์ } ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์ป์ ๊ฐ์
๋๋ค. ๋ด ์์์ ํ์ฌ mikrotik ํ์จ์ด ๋ฒ์
{ํธ์คํธ๋งํฌ๋ก์ด๋} - ๊ฐ์ ์ธ ๋ฒ์งธ ๋จ๊ณ์์ ์ป์์ต๋๋ค. - ์
๋ฐ์ดํธ ์ค์ธ ๋งคํฌ๋ก์ ID์
๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
ํ์ค ๊ธฐ๋ฅ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํจ์ฌ ๋ ๋ณต์กํ๊ณ ๊ธธ๋ค. ํนํ ํ๋ก๊ทธ๋๋ฐ์ ์๊ณ ์คํฌ๋ฆฝํธ์ ํ์ํ ๋ ผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ์ถ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ.
์ด ์ ๊ทผ ๋ฐฉ์์ ํ์คํ ์ฅ์ ์ ์๋ก ๋ค๋ฅธ ์๋ฒ ๊ฐ์ ์๋ฃจ์ "์ด๋์ฑ"์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก HTTP ์์ด์ ํธ๊ฐ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์๊ณ ์์ฒญ ๋ณธ๋ฌธ์ด๋ ํค๋์์ ๋์ฒดํ ์ ์๋ค๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.
์์ฑ๋ ํ
ํ๋ฆฟ์
์ถ์ฒ : habr.com