๋คํธ์ํฌ ํ ํด๋ก์ง(Net3D) API ๋ ํผ๋ฐ์ค
์ด ๊ฐ์ด๋๋ง ์ฝ์ผ๋ฉด GIIP ๋คํธ์ํฌ ํ ํด๋ก์ง(Net3D) ์๊ฐํ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ง๋ค์ด ๋ฃ์ ์ ์์ต๋๋ค.
โ ๏ธ ์ด ๋ฌธ์์ ์ ์ฉ ๋ฒ์ โ ๋จผ์ ์ฝ์ผ์ธ์
์ด ๋ฌธ์๋ ์๋ฒยท๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋คํธ์ํฌ ํ ํด๋ก์ง ์ ์ฉ ์ ์ฐจ์ ๋๋ค. ์ฌ๊ธฐ ์ ํ ๋ ํ์ (
netstat,db_connections)์ Net3D ํ๋ฉด์ด ์ฝ๋ ์ ์ผํ ๋ ๊ฐ์ง ํ์์ ๋๋ค.๋คํธ์ํฌ๊ฐ ์๋ ์์์ ๋ฐ์ดํฐ(์ฃผ๋ฌธ ํ๋ฆ, ์กฐ์ง๋, ์๋น์ค ์์กด ๊ด๊ณ ๋ฑ)๋ฅผ ์ด 3D ๋ ์ด์์์ผ๋ก ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๋ฉด โ ๋ถ๋ก: ๋คํธ์ํฌ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด ๋ ์ด์์์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ๋ฅผ ๋จผ์ ์ฝ์ผ์ธ์.
kFactor๋ง ์์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ tKVS ์ ๋ฃ๋ ๋ฐฉ๋ฒ์ ๋์ํ์ง ์์ต๋๋ค โ ์ ์ฅ์RstVal 200์ผ๋ก ์ฑ๊ณตํ์ง๋ง ํ๋ฉด์๋ ์๋ฌ ์์ด ์๋ฌด๊ฒ๋ ํ์๋์ง ์์ต๋๋ค.
์์ ์ ์ค๋น๋ฌผ
| ํญ๋ชฉ | ์ค๋ช | ์ป๋ ๋ฐฉ๋ฒ |
|---|---|---|
| SK (Secret Key) | API ์ธ์ฆ์ ์ฌ์ฉํ๋ ๋น๋ฐ ํค | GIIP ๊ด๋ฆฌ ํ๋ฉด์ lsvrdetail(์๋ฒ ์์ธ) ๋๋ corpgroup(๋ฒ์ธยท๊ทธ๋ฃน ๊ด๋ฆฌ) ํ์ด์ง์์ ํ์ธ |
| API URL | GIIP ์๋ฒ ์ฃผ์ | ์: https://your-api.azurewebsites.net |
| LSSN | ์๋ฒ ๋ฑ๋ก ํ ๋ฐ๊ธ๋๋ ๊ณ ์ ์ธ์ ๋ฒํธ | Step 1 ์๋ฃ ํ ์๋ต์์ ์ทจ๋ |
LSSN์ด๋?
LSSN(Long-term Session Serial Number)์ ์๋ฒ 1๋๋ฅผ ์๋ณํ๋ ์ซ์ ID์
๋๋ค. ์๋ฒ๋ฅผ ์ฒ์ ๋ฑ๋ก(AgentAutoRegister)ํ๋ฉด ์๋ฒ๋ง๋ค ๊ณ ์ ํ LSSN์ด ๋ฐ๊ธ๋ฉ๋๋ค. ์ดํ ๋ชจ๋ KVSPut ๋ฐ์ดํฐ ์ ์ก ์ kKey ๊ฐ์ผ๋ก ์ด LSSN์ ์ฌ์ฉํฉ๋๋ค.
ํ๋ฆ ์์ฝ:
์๋ฒ ๋ฑ๋ก (AgentAutoRegister) โ LSSN ๋ฐ๊ธ โ LSSN์ kKey๋ก ์ฌ์ฉํ์ฌ netstat/db_connections ์ ์ก
์ธ์ฆ ๋ฐฉ์
- Content-Type:
application/x-www-form-urlencoded - ์ธ์ฆ ์์น: HTTP ํค๋๊ฐ ์๋ ์์ฒญ ๋ฐ๋์
tokenํ๋์ SK ๊ฐ์ ํฌํจ - ์๋ชป๋ ๋ฐฉ์:
Authorization: Bearer YOUR_SK(์ฌ์ฉ ๋ถ๊ฐ) - ์ฌ๋ฐ๋ฅธ ๋ฐฉ์: ๋ฐ๋์
token=YOUR_SKํฌํจ
Step 1: ์๋ฒ ๋ฑ๋ก (AgentAutoRegister) โ LSSN ํ๋
์๋ฒ๋ฅผ GIIP์ ๋ฑ๋กํ๊ณ LSSN์ ๋ฐ์ต๋๋ค. ์ด LSSN์ ๋ฐ๋์ ์ ์ฅํ์ธ์.
- Endpoint:
POST https://YOUR_API_URL/api/giipApi?cmd=AgentAutoRegister - Content-Type:
application/x-www-form-urlencoded
์์ฒญ Body ํ๋:
| ํ๋ | ๊ฐ |
|---|---|
token | YOUR_SK |
text | AgentAutoRegister |
jsondata | ์๋ JSON์ ๋ฌธ์์ด๋ก ์ง๋ ฌํํ ๊ฐ |
jsondata ์์:
{
"hostname": "WEB-SRV-01",
"os": "Windows Server 2022",
"cpu_cores": 8,
"ipv4_local": "10.0.0.5"
}
curl ์์:
curl -X POST "https://YOUR_API_URL/api/giipApi?cmd=AgentAutoRegister" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_SK" \
--data-urlencode "text=AgentAutoRegister" \
--data-urlencode 'jsondata={"hostname":"WEB-SRV-01","os":"Windows Server 2022","cpu_cores":8,"ipv4_local":"10.0.0.5"}'
์๋ต ์์:
{
"RstVal": 200,
"RstMsg": "Success",
"lssn": 123456
}
์ค์: ์๋ต์
lssn๊ฐ(์:123456)์ ๋ฐ๋์ ์ ์ฅํ์ธ์. Step 2, 3์ ๋ชจ๋ ์์ฒญ์์kKey๋ก ์ฌ์ฉํฉ๋๋ค.
Step 2: ์๋ฒ ๊ฐ ์ฐ๊ฒฐ ์ ์ก (netstat KVSPut)
ํ์ฌ ์๋ฒ์์ ์ธ๋ถ ์๋ฒ๋ก ํฅํ๋ TCP ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ์กํฉ๋๋ค.
- Endpoint:
POST https://YOUR_API_URL/api/giipApi(cmd ํ๋ผ๋ฏธํฐ ์์) - Content-Type:
application/x-www-form-urlencoded
์์ฒญ Body ํ๋:
| ํ๋ | ๊ฐ | ์ค๋ช |
|---|---|---|
token | YOUR_SK | ์ธ์ฆ ํค |
text | KVSPut kType kKey kFactor | ๋ฆฌํฐ๋ด ๊ณ ์ ๋ฌธ์์ด (๊ทธ๋๋ก ์ ๋ ฅ) |
jsondata | ์๋ JSON์ ๋ฌธ์์ด๋ก ์ง๋ ฌํํ ๊ฐ | ์ค์ ๋ฐ์ดํฐ |
jsondata ์์:
{
"kType": "lssn",
"kKey": "123456",
"kFactor": "netstat",
"kValue": [
{
"remote_ip": "10.0.0.10",
"remote_port": 8080,
"process_name": "nginx.exe",
"state": "ESTABLISHED"
},
{
"remote_ip": "10.0.0.20",
"remote_port": 3306,
"process_name": "myapp.exe",
"state": "ESTABLISHED"
}
]
}
curl ์์:
curl -X POST "https://YOUR_API_URL/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_SK" \
--data-urlencode "text=KVSPut kType kKey kFactor" \
--data-urlencode 'jsondata={"kType":"lssn","kKey":"123456","kFactor":"netstat","kValue":[{"remote_ip":"10.0.0.10","remote_port":8080,"process_name":"nginx.exe","state":"ESTABLISHED"}]}'
์๋ต ์์:
{
"RstVal": 200,
"RstMsg": "Success"
}
kValue ํญ๋ชฉ๋ณ ํ๋ ์ค๋ช :
| ํ๋ | ํ์ | ์ค๋ช |
|---|---|---|
remote_ip | string | ์ฐ๊ฒฐ ๋์ ์๋ฒ IP |
remote_port | integer | ์ฐ๊ฒฐ ๋์ ํฌํธ |
process_name | string | ์ฐ๊ฒฐ์ ์์ฑํ ํ๋ก์ธ์ค๋ช |
state | string | ์ฐ๊ฒฐ ์ํ. ESTABLISHED์ธ ํญ๋ชฉ๋ง ํ ํด๋ก์ง์ ์ (Link)์ผ๋ก ํ์ |
์ฃผ์:
state๊ฐESTABLISHED์ธ ํญ๋ชฉ๋ง ํ ํด๋ก์ง ํ๋ฉด์ ์ฐ๊ฒฐ์ ์ผ๋ก ํ์๋ฉ๋๋ค.
Step 3: DB ์ฐ๊ฒฐ ์ ๋ณด ์ ์ก (db_connections KVSPut)
์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ DB ์๋ฒ๋ก ์ ์กํ๋ ์ฟผ๋ฆฌ ๋ฐ ๋ถํ ์ ๋ณด๋ฅผ ์ ์กํฉ๋๋ค.
- Endpoint:
POST https://YOUR_API_URL/api/giipApi(netstat๊ณผ ๋์ผ) - Content-Type:
application/x-www-form-urlencoded
์์ฒญ Body ํ๋:
| ํ๋ | ๊ฐ | ์ค๋ช |
|---|---|---|
token | YOUR_SK | ์ธ์ฆ ํค |
text | KVSPut kType kKey kFactor | ๋ฆฌํฐ๋ด ๊ณ ์ ๋ฌธ์์ด (๊ทธ๋๋ก ์ ๋ ฅ) |
jsondata | ์๋ JSON์ ๋ฌธ์์ด๋ก ์ง๋ ฌํํ ๊ฐ | ์ค์ ๋ฐ์ดํฐ |
jsondata ์์:
{
"kType": "lssn",
"kKey": "123456",
"kFactor": "db_connections",
"kValue": [
{
"client_net_address": "10.0.0.5",
"program_name": "MyApp.exe",
"cpu_load": 15,
"last_sql": "SELECT * FROM users WHERE id = 1",
"query_hash": "0xAB12CD34"
},
{
"client_net_address": "10.0.0.5",
"program_name": "MyApp.exe",
"cpu_load": 42,
"last_sql": "UPDATE orders SET status = 'shipped' WHERE order_id = 9901",
"query_hash": "0xCD56EF78"
}
]
}
curl ์์:
curl -X POST "https://YOUR_API_URL/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_SK" \
--data-urlencode "text=KVSPut kType kKey kFactor" \
--data-urlencode 'jsondata={"kType":"lssn","kKey":"123456","kFactor":"db_connections","kValue":[{"client_net_address":"10.0.0.5","program_name":"MyApp.exe","cpu_load":15,"last_sql":"SELECT * FROM users WHERE id = 1","query_hash":"0xAB12CD34"}]}'
์๋ต ์์:
{
"RstVal": 200,
"RstMsg": "Success"
}
kValue ํญ๋ชฉ๋ณ ํ๋ ์ค๋ช :
| ํ๋ | ํ์ | ์ค๋ช |
|---|---|---|
client_net_address | string | ์์ค ์๋ฒ IP. tManagedDatabase.db_host์ ์ ํํ ์ผ์นํด์ผ DB ๋งํฌ ์์ฑ |
program_name | string | ์คํ ํ๋ก๊ทธ๋จ๋ช . ํ ํด๋ก์ง Outgoing ๋ ธ๋ ๋ผ๋ฒจ๋ก ํ์ |
cpu_load | integer | ์ฟผ๋ฆฌ ๋ถํ(%). ๋งํฌ ์ ์ ๊ตต๊ธฐ ๋ฐ ํํฐํด ์๋ ๊ฒฐ์ |
last_sql | string | ํ์ฌ ์คํ ์ค์ธ SQL ๋ฌธ. ์์ธ ๋ณด๊ธฐ ๋ชจ๋ฌ์ ํ์ |
query_hash | string | SQL ๊ตฌ๋ฌธ ํด์. ๋์ผ ์ฟผ๋ฆฌ ๊ทธ๋ฃนํ์ ์ฌ์ฉ |
Step 4: DB ๋ชฉ๋ก ์กฐํ (ManagedDatabaseList)
ํ๋ก์ ํธ์ ๋ฑ๋ก๋ ๊ด๋ฆฌ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
- Endpoint:
POST https://YOUR_API_URL/api/giipApi - Content-Type:
application/x-www-form-urlencoded
์์ฒญ Body ํ๋:
| ํ๋ | ๊ฐ |
|---|---|
token | YOUR_SK |
text | ManagedDatabaseList mssql (db_type ์ง์ ๊ฐ๋ฅ) |
curl ์์:
curl -X POST "https://YOUR_API_URL/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_SK" \
--data-urlencode "text=ManagedDatabaseList mssql"
์๋ต ์์:
{
"RstVal": 200,
"RstMsg": "Success",
"data": [
{
"db_host": "10.0.0.30",
"db_name": "ProductionDB",
"db_type": "mssql"
}
]
}
token์ ํฌํจ๋ SK๊ฐ ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ๋ดํฌํ๋ฏ๋กcsn์ ๋ณ๋๋ก ์ ๋ฌํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฒ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ธ์ด๋ณ ์ ์ฒด ์์ ์คํฌ๋ฆฝํธ
PowerShell ยท Bash ยท Python ์ ์ฒด ์์ ์คํฌ๋ฆฝํธ๋ ๋ถ๋ ๊ด๊ณ๋ก ๋ณ๋ ๊ฐ์ด๋๋ก ๋ถ๋ฆฌํ์ต๋๋ค.
๐ ๋คํธ์ํฌ ํ ํด๋ก์ง(Net3D) ์ธ์ด๋ณ ์์ ์คํฌ๋ฆฝํธ
๋ฐ์ดํฐ ํ์ธ ๋ฐฉ๋ฒ
์คํฌ๋ฆฝํธ ์คํ ํ ์๋ ๋จ๊ณ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ธ์.
- ์๋ฒ ๋ฑ๋ก ํ์ธ:
๊ธฐ๋ณธ์ ๋ณด ๊ด๋ฆฌ > ์๋ฒ ์ธ๋ฒคํ ๋ฆฌ๋ฉ๋ด์์ ํด๋น ํธ์คํธ๋ช ์ ์๋ฒ๊ฐ ๋ฑ๋ก๋์๋์ง ํ์ธํฉ๋๋ค. - DB ๋งคํ ํ์ธ:
client_net_address๊ฐ์ดtManagedDatabase.db_host์ ์ ํํ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. - ํ ํด๋ก์ง ๋ทฐ์ด:
/admin/network-topologyํ์ด์ง๋ก ์ด๋ํ์ฌ ๋ ธ๋ ๊ฐ ์ฐ๊ฒฐ์ ์ด ํ์ฑํ๋๋์ง ํ์ธํฉ๋๋ค. ๋ฐ์ดํฐ๋ ์ ์ก ํ ์ฝ 1~2๋ถ ๋ด ์ค์๊ฐ ๋ฐ์๋ฉ๋๋ค.
๋ฐ์ดํฐ ์ ํฉ์ฑ ๊ท์น
๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ ์ ์ ๋ฐ๋์ ์๋ ์กฐ๊ฑด์ ํ์ธํ์ธ์.
- IP ๋งคํ:
tLSvr.ipsํ๋๋ ๋ฐ๋์[{"CIDR":"10.0.0.5/24"}]ํํ์ JSON ๋ฐฐ์ด์ด์ด์ผ ํฉ๋๋ค. ๋จ์ ๋ฌธ์์ด์ด๋ฉด ํ ํด๋ก์ง์์ 'External' ๋ ธ๋๋ก ๋ถ๋ฆฌ๋ฉ๋๋ค. - DB ํธ์คํธ ์ผ์น:
db_connections์client_net_address๊ฐ์ดtManagedDatabase.db_host์ ํ ์คํธ ๋ ๋ฒจ์์ 100% ์ผ์นํด์ผ DB ๋งํฌ๊ฐ ์์ฑ๋ฉ๋๋ค. ๋์๋ฌธ์, ๊ณต๋ฐฑ๊น์ง ๋์ผํด์ผ ํฉ๋๋ค. - JSON Depth:
kValue๋ฐฐ์ด์ ํฌํจํ jsondata ์ ์ฒด๋ฅผ ์ง๋ ฌํํ ๋ Depth 10 ์ด์์ผ๋ก ์ธ์ฝ๋ฉํฉ๋๋ค. ๊น์ด๊ฐ ๋ถ์กฑํ๋ฉด ํ์ ๊ฐ์ฒด๊ฐ ์๋ฆฝ๋๋ค. - state ๊ฐ:
netstatkValue์์state๊ฐESTABLISHED์ธ ํญ๋ชฉ๋ง ํ ํด๋ก์ง ์ฐ๊ฒฐ์ ์ผ๋ก ํ์๋ฉ๋๋ค. kFactor๋ ๋ฐ๊ฟ ์ ์์ต๋๋ค: ์กฐํ SP(pApiNet3dDatabyAK)๋netstat๊ณผdb_connections๋ ๋ฆฌํฐ๋ด๋ง ์ฝ๋๋ก ํ๋์ฝ๋ฉ๋์ด ์์ต๋๋ค. ์์์kFactor(์:my_graph)๋ก KVSPut ํ๋ฉด ์๋ต์RstVal 200(์ ์ฅ ์ฑ๊ณต)์ด์ง๋ง ํ ํด๋ก์ง ํ๋ฉด์๋ ์๋ฌ ์์ด ์๋ฌด๊ฒ๋ ๋ํ๋์ง ์์ต๋๋ค. tKVS ์์ฒด๋ ๋ฒ์ฉ ์ ์ฅ์๋ผ ์ด๋ค ๊ฐ์ด๋ ๋ฐ์๋ค์ด๋ฏ๋ก, ์ ์ฅ ์ฑ๊ณต์ "ํ๋ฉด์ ๋์จ๋ค"๋ ๋ป์ผ๋ก ์คํดํ์ง ๋ง์ธ์.kKey๋ ์ด๋ฏธ ๋ฑ๋ก๋ ์์ฐ ID์ฌ์ผ ํฉ๋๋ค:netstat์kKey๊ฐ ํ์ฌ CSN์ ๋ฑ๋ก๋tLSvr.LSsn์ด์ด์ผ ํ๊ณ ,db_connections๋tManagedDatabase.mdb_id์ฌ์ผ ํฉ๋๋ค. ๋ฑ๋ก๋์ง ์์ ์์์ ํค(์ฃผ๋ฌธ๋ฒํธ, ๊ณ์ ID ๋ฑ)๋ฅผkKey๋ก ๋ฃ์ผ๋ฉด ๊ทธ ํ์ ์กฐํ ๋์์์ ์กฐ์ฉํ ์ ์ธ๋ฉ๋๋ค.
ํธ๋ฌ๋ธ์ํ
์๋ต RstVal์ด 200์ด ์๋ ๊ฒฝ์ฐ
| RstVal | ์๋ฏธ | ์กฐ์น |
|---|---|---|
| 401 | ์ธ์ฆ ์คํจ | token ๊ฐ(SK)์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ. HTTP ํค๋๊ฐ ์๋ ๋ฐ๋์ ์๋์ง ํ์ธ |
| 400 | ์๋ชป๋ ์์ฒญ | text ํ๋ ๊ฐ์ด ์ ํํ์ง ํ์ธ (KVSPut kType kKey kFactor ๋ฆฌํฐ๋ด) |
| 500 | ์๋ฒ ์ค๋ฅ | jsondata JSON ํ์์ด ์ ํจํ์ง ํ์ธ. ์ค์ฒฉ ๋ฐ์ดํ ์ด์ค์ผ์ดํ ํ์ธ |
ํ ํด๋ก์ง์ ์ฐ๊ฒฐ์ ์ด ํ์๋์ง ์๋ ๊ฒฝ์ฐ
netstatkValue์state๊ฐ์ด ์ ํํESTABLISHED(๋๋ฌธ์)์ธ์ง ํ์ธdb_connections์client_net_address๊ฐ GIIP์ ๋ฑ๋ก๋ DB ํธ์คํธ IP์ ์์ ํ ๋์ผํ์ง ํ์ธtLSvr.ips๊ฐ ๋จ์ ๋ฌธ์์ด์ด ์๋[{"CIDR":"..."}]JSON ๋ฐฐ์ด์ธ์ง ํ์ธ
LSSN์ ๋ถ์คํ ๊ฒฝ์ฐ
AgentAutoRegister๋ฅผ ๋์ผํ hostname์ผ๋ก ์ฌํธ์ถํ๋ฉด ๊ธฐ์กด LSSN์ด ๋ฐํ๋ฉ๋๋ค. ์๋ฒ๋ง๋ค hostname์ด ๊ณ ์ ํ๋ฉด LSSN๋ ๊ณ ์ ํ๊ฒ ์ ์ง๋ฉ๋๋ค.
curl์์ jsondata๊ฐ ์๋ฆฌ๋ ๊ฒฝ์ฐ
-d ๋์ --data-urlencode๋ฅผ ์ฌ์ฉํ๋ฉด ํน์๋ฌธ์๊ฐ ํฌํจ๋ JSON ๋ฌธ์์ด๋ ์์ ํ๊ฒ ์ ์ก๋ฉ๋๋ค. ๋์ฉ๋ ๋ฐ์ดํฐ๋ giipApiSk3 ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ธ์ (์๋ Sk3 ํญ๋ชฉ ์ฐธ์กฐ).
Python์์ SK ๋ฏธ์ ์(NameError) ์ค๋ฅ
์ด ๊ฐ์ด๋์ Python ์์ ๋ AT ๋ณ์ ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. SK ๋ณ์๋ฅผ ๋ฐ๋ก ์ ์ํ์ง ์๋๋ก ์ฃผ์ํ์ธ์.
๊ณ ์ฑ๋ฅ ๋ก๊น ์๋ํฌ์ธํธ (Sk3)
์์ฒ ๊ฑด ์ด์์ ์ฐ๊ฒฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ฑฐ๋ ๋๋ฒ๊น
์ด ํ์ํ ๋ giipApiSk3 ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ธ์.
- Endpoint:
https://giipfaw.azurewebsites.net/api/giipApiSk3 - ์ฅ์ : ๋์ฉ๋ jsondata ์ ์ก ์ ๋ฐ์ดํฐ ์ ๋จ ๋ฐฉ์ง, ์ค๋ฅ ๋ฐ์ ์ ์์ด์ ํธ ํ๊ฒฝ ์ ๋ณด์ StackTrace ์๋ ๊ธฐ๋ก
- ์ฌ์ฉ๋ฒ: KVSPut ๋ช ๋ น ์ฌ์ฉ ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํฌ์ธํธ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.
๋ถ๋ก: ๋คํธ์ํฌ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด ๋ ์ด์์์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ (๋ฒ์ฉ ์ฌ์ฌ์ฉ)
๊ฒฐ๋ก ๋จผ์
์์์ {nodes, links} ๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ ์ ์ฉ "๋ฒ์ฉ ๊ทธ๋ํ" ์
๋ ฅ ๊ฒฝ๋ก๋ ํ์ฌ ์กด์ฌํ์ง ์์ต๋๋ค.
(giip #2526 ์์ ์ค๊ณ ์ถ์ง ์ค)
- โ ๋์ง ์๋ ๊ฒ:
kFactor๋ฅผmy_graph๊ฐ์ ์์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ{nodes, links}๋ฅผ tKVS ์ ๋ฃ๊ธฐ. โ KVSPut ์RstVal 200์ ๋๋ ค์ค๋๋ค(tKVS ๋ ์ด๋ค kFactor ๋ ์ ์ฅํ๋ ๋ฒ์ฉ ์ ์ฅ์์ ๋๋ค). ํ์ง๋ง Net3D ์กฐํ SP ๊ฐ ๊ทธ ํ์ ์ฝ์ง ์์ต๋๋ค. ํ๋ฉด์ ์๋ฌ ์์ด ๋น์ด ์์ต๋๋ค. - โ ์ง๊ธ ๋๋ ๊ฒ: ๋ด ๋ฐ์ดํฐ์ ๊ฐ์ฒด๋ฅผ "์๋ฒ"๋ก, ๊ด๊ณ๋ฅผ "์ฐ๊ฒฐ"๋ก ๋งคํํ๋ฉด ์์์ ๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ ์ค๋ ๋ฐ๋ก ๊ทธ๋ฆด ์ ์์ต๋๋ค. ์๋๊ฐ ๊ทธ ์ ์ฐจ์ ๋๋ค.
๋งคํ ๊ท์น โ ๋ด ๋๋ฉ์ธ์ Net3D ๋ชจ๋ธ์ ๋ง์ถ๊ธฐ
| ๋ด ๋ฐ์ดํฐ | Net3D ์์์ ํํ | ๋ฃ๋ ๋ฐฉ๋ฒ |
|---|---|---|
| ๊ฐ์ฒด(๋ ธ๋) 1๊ฐ | ์๋ฒ ๋ ธ๋(๊ตฌ) 1๊ฐ | AgentAutoRegister ๋ก ๋ฑ๋ก โ LSSN ํ๋ |
| ๊ฐ์ฒด์ ํ์ ์ด๋ฆ | ๋ ธ๋ ๋ผ๋ฒจ | hostname ๊ฐ์ด ๊ทธ๋๋ก ๋
ธ๋ ์ด๋ฆ์ด ๋ฉ๋๋ค |
| ๊ฐ์ฒด์ ๊ณ ์ ์๋ณ์ | ํฉ์ฑ IP | ipv4_local ์ ๊ฒน์น์ง ์๋ IP ๋ถ์ฌ(์: 10.99.0.1) |
| ๊ด๊ณ(๊ฐ์ ) 1๊ฐ | ์ฐ๊ฒฐ์ (Link) | netstat KVSPut ์ remote_ip ์ ์๋ ๊ฐ์ฒด์ ํฉ์ฑ IP |
| ๊ด๊ณ์ ๋ผ๋ฒจ | ๋งํฌ์ ํ๋ก์ธ์ค๋ช | process_name ๊ฐ |
๐ก ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋์ ๋ฑ๋กํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.
remote_ip๊ฐ ๋ฑ๋ก๋ ์ด๋ ์๋ฒ์ IP ์๋ ์ผ์นํ์ง ์์ผ๋ฉด Net3D ๊ฐ ๊ทธ IP ์ด๋ฆ์ External ๋ ธ๋๋ฅผ ์๋ ์์ฑํฉ๋๋ค. ๋ค๋ง ์ด๋ฆ์ด IP ๋ฌธ์์ด ๊ทธ๋๋ก์ด๋ฏ๋ก, ์ด๋ฆ์ ์ง์ ํ๊ณ ์ถ์ ๊ฐ์ฒด๋AgentAutoRegister๋ก ๋ฑ๋กํ์ธ์.
์ ๋ ฅ ์คํค๋ง
โ ๊ฐ์ฒด ๋ฑ๋ก โ AgentAutoRegister
| ํ๋ | ํ์ | ํ์ | ์ ์ฝ | ์์ |
|---|---|---|---|---|
hostname | string | โ | CSN ๋ด ๊ณ ์ . ์ด ๊ฐ์ด ๋ ธ๋ ๋ผ๋ฒจ์ด ๋ฉ๋๋ค | "์ฃผ๋ฌธ์ ์" |
ipv4_local | string | โ | ์ ํจํ IPv4. ๊ฐ์ฒด๋ง๋ค ๊ณ ์ ํด์ผ ๊ฐ์ ์ด ์ ํํ ์ด์ด์ง๋๋ค | "10.99.0.1" |
os | string | โ | ์์ ๋ฌธ์์ด. ๋ ธ๋ ์์ธ์ ํ์ | "OrderFlow" |
cpu_cores | integer | โ | ํ์์ฉ | 1 |
โก ๊ด๊ณ ์ ์ก โ KVSPut kType kKey kFactor
| ํ๋ | ํ์ | ํ์ | ์ ์ฝ | ์์ |
|---|---|---|---|---|
kType | string | โ | "lssn" ๊ณ ์ | "lssn" |
kKey | string | โ | ์ถ๋ฐ ๊ฐ์ฒด์ LSSN. ๋ฑ๋ก๋ LSsn ์ด ์๋๋ฉด ๋ฌด์๋ฉ๋๋ค | "123456" |
kFactor | string | โ | "netstat" ๊ณ ์ . ๋ค๋ฅธ ๊ฐ์ ํ๋ฉด์ ๋์ค์ง ์์ต๋๋ค | "netstat" |
kValue | array | โ | ๊ฐ์ ๋ฐฐ์ด | ์๋ ์ฐธ์กฐ |
kValue[].remote_ip | string | โ | ๋์ฐฉ ๊ฐ์ฒด์ ํฉ์ฑ IP. 127.*/0.0.0.0/::1 ์ ์ ์ธ๋ฉ๋๋ค | "10.99.0.2" |
kValue[].state | string | โ | "ESTABLISHED" ์ฌ์ผ ๊ฐ์ ์ด ์์ฑ๋ฉ๋๋ค("ESTAB" ๋ ํ์ฉ) | "ESTABLISHED" |
kValue[].process_name | string | โ | ๊ฐ์ ๋ผ๋ฒจ๋ก ํ์ | "๊ฒฐ์ ์์ฒญ" |
kValue[].remote_port | integer | โ | ๋ ธ๋ ๋ฒ๋ธ์ ํ์ | 443 |
๋ณต๋ถํ๋ฉด ๊ทธ๋๋ก ๋๋ ์๊ฒฐ ์์ โ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ํ๋ฆ 3๋จ๊ณ
SK, API_URL ๋ ์ค๋ง ๋ฐ๊พธ๋ฉด ๊ทธ๋๋ก ์คํ๋ฉ๋๋ค.
#!/bin/bash
set -e
SK="YOUR_SK"
API_URL="https://YOUR_API_URL"
# --- โ ๊ฐ์ฒด 3๊ฐ๋ฅผ "์๋ฒ"๋ก ๋ฑ๋กํ๊ณ LSSN ํ๋ ---
register() {
curl -s -X POST "$API_URL/api/giipApi?cmd=AgentAutoRegister" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=$SK" \
--data-urlencode "text=AgentAutoRegister" \
--data-urlencode "jsondata={\"hostname\":\"$1\",\"os\":\"OrderFlow\",\"cpu_cores\":1,\"ipv4_local\":\"$2\"}"
}
LSSN_A=$(register "ORDERFLOW-์ฃผ๋ฌธ์ ์" "10.99.0.1" | grep -oE '"lssn":[0-9]+' | cut -d: -f2)
LSSN_B=$(register "ORDERFLOW-๊ฒฐ์ ์น์ธ" "10.99.0.2" | grep -oE '"lssn":[0-9]+' | cut -d: -f2)
LSSN_C=$(register "ORDERFLOW-๋ฐฐ์ก์ง์" "10.99.0.3" | grep -oE '"lssn":[0-9]+' | cut -d: -f2)
echo "LSSN: A=$LSSN_A B=$LSSN_B C=$LSSN_C"
# --- โก ๊ด๊ณ(๊ฐ์ ) ์ ์ก: ์ฃผ๋ฌธ์ ์ โ ๊ฒฐ์ ์น์ธ โ ๋ฐฐ์ก์ง์ ---
link() {
curl -s -X POST "$API_URL/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=$SK" \
--data-urlencode "text=KVSPut kType kKey kFactor" \
--data-urlencode "jsondata={\"kType\":\"lssn\",\"kKey\":\"$1\",\"kFactor\":\"netstat\",\"kValue\":[{\"remote_ip\":\"$2\",\"remote_port\":443,\"process_name\":\"$3\",\"state\":\"ESTABLISHED\"}]}"
echo
}
link "$LSSN_A" "10.99.0.2" "๊ฒฐ์ ์์ฒญ"
link "$LSSN_B" "10.99.0.3" "๋ฐฐ์ก์์ฒญ"
์คํ ํ /ko/network-topology ๋ฅผ ์ด๋ฉด ์ฃผ๋ฌธ์ ์ โ ๊ฒฐ์ ์น์ธ โ ๋ฐฐ์ก์ง์ 3๊ฐ ๋
ธ๋๊ฐ ๊ฐ์ ์ผ๋ก
์ด์ด์ ธ ๋ํ๋ฉ๋๋ค(๋ฐ์๊น์ง 1~2๋ถ).
์๊ธฐ๊ฒ์ฆ ๋ฐฉ๋ฒ
- ์ ์ฅ๋๋์ง โ ๊ฐ KVSPut ์๋ต์ด
{"RstVal":200}์ธ์ง ํ์ธํฉ๋๋ค. - ์กฐํ๋๋์ง โ ํ๋ฉด์ ์ด๊ธฐ ์ ์ API ๋ก ์ง์ ํ์ธํฉ๋๋ค.
์๋ต์curl -s -X POST "$API_URL/api/giipApi" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "token=$SK" \ --data-urlencode "text=Net3dData csn" \ --data-urlencode "jsondata={\"csn\":YOUR_CSN,\"targetTime\":null}"servers์์ ๋ฐฉ๊ธ ๋ฑ๋กํhostname์ด,netstat_data์์ ํฉ์ฑ IP ๊ฐ ๋ณด์ฌ์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ณด์ด์ง ์์ผ๋ฉด ํ๋ฉด์๋ ๋์ค์ง ์์ต๋๋ค โ ์๋ ์คํจ ์ฌ๋ก๋ฅผ ํ์ธํ์ธ์. - ํ๋ฉด์์ โ
/ko/network-topology์ฐ์ธก ํ๋จ์ ๋ ธ๋ ์ / ๋งํฌ ์ ๊ฐ ๊ธฐ๋ํ ๋งํผ ๋์๋์ง ๋ด ๋๋ค.
์คํจ ์ฌ๋ก์ ๊ทธ๋์ ์ฆ์
| ํ ์ผ | ์ฆ์ | ์์ธ | ํด๊ฒฐ |
|---|---|---|---|
kFactor ๋ฅผ my_graph ๋ฑ ์์ ๊ฐ์ผ๋ก ์ง์ | RstVal 200 ์ธ๋ฐ ํ๋ฉด์ ์๋ฌด ๋ณํ ์์ | ์กฐํ SP ๊ฐ netstat/db_connections ๋ง ์ฝ์ | kFactor ๋ฅผ netstat ์ผ๋ก |
kKey ์ ์์ ID(์ฃผ๋ฌธ๋ฒํธ ๋ฑ) ์ฌ์ฉ | ์ ์ฅ ์ฑ๊ณต, ํ๋ฉด ๋ณํ ์์ | kKey ๊ฐ ๋ฑ๋ก๋ LSsn ์ด์ด์ผ ํจ | ๋จผ์ AgentAutoRegister ๋ก LSSN ํ๋ |
{"nodes":[...],"links":[...]} ๋ฅผ ๊ทธ๋๋ก kValue ์ | ํ๋ฉด ๋ณํ ์์ | Net3D ๋ nodes/links ๋ฅผ ์
๋ ฅ ํ์์ผ๋ก ๋ฐ์ง ์์ | ์ ๋งคํ ๊ท์น์ ๋ฐ๋ฅผ ๊ฒ |
state ๋ฅผ TIME_WAIT ๋ฑ์ผ๋ก | ๋ ธ๋๋ ๋จ๋๋ฐ ๊ฐ์ ์ด ์์ | ESTABLISHED/ESTAB ๋ง ๊ฐ์ ์ด ๋จ | "ESTABLISHED" ์ฌ์ฉ |
๊ฐ์ฒด๋ง๋ค ๊ฐ์ ipv4_local ์ฌ์ฉ | ๋ ธ๋๊ฐ ํ๋๋ก ํฉ์ณ์ง | IP ๊ฐ ๋ ธ๋ ์๋ณ์ ์ฐ์ | ๊ฐ์ฒด๋ง๋ค ๊ณ ์ IP ๋ถ์ฌ |
remote_ip ๋ฅผ 127.0.0.1 ๋ก | ๊ฐ์ ์ด ์์ | ๋ฃจํ๋ฐฑ/0.0.0.0/::1 ์ ๋ช
์์ ์ผ๋ก ์ ์ธ๋จ | ์ค์ ํฉ์ฑ IP ์ฌ์ฉ |
| ๊ฐ์ ์ด ์์ฃผ ๋ง์ ํฐ ๊ทธ๋ํ | ์ผ๋ถ๋ง ํ์๋๊ฑฐ๋ ์ ๋ถ ๋น ํ๋ฉด | ์๋ต์ด FOR JSON 2033์ ๋จ์๋ก ๋ถํ ๋จ | ์๋ต์ ์ง์ ํ์ฑํ๋ค๋ฉด JSON_... ์ปฌ๋ผ ์กฐ๊ฐ์ ๋ชจ๋ ์ด์ด๋ถ์ธ ๋ค ํ์ฑํ ๊ฒ |
์ด ์ฐํ ๋ฐฉ๋ฒ์ ํ๊ณ (์๊ณ ์ฐ์ธ์)
- ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์๋ฒ ๋ ธ๋(๊ตฌ) ๋ก ๊ทธ๋ ค์ง๋๋ค. ๋ฐ์ดํฐ ์ข ๋ฅ๋ณ๋ก ๋ชจ์์ ๋ค๋ฅด๊ฒ ํ ์ ์์ต๋๋ค.
- ๋ ธ๋๋ฅผ ํด๋ฆญํ๋ฉด ์๋ฒ ์์ธ ๋ชจ๋ฌ์ด ์ด๋ฆฝ๋๋ค(๋ด ๋๋ฉ์ธ ์ ๋ณด ํ๋ฉด์ด ์๋๋๋ค).
- ๋ฑ๋กํ ๊ฐ์ฒด๋ ์๋ฒ ์ธ๋ฒคํ ๋ฆฌ ๋ชฉ๋ก์๋ ๋ํ๋ฉ๋๋ค. ์ค์ ์๋ฒ์ ์์ด๋ฏ๋ก
hostname์ ์ ๋์ด(์:ORDERFLOW-)๋ฅผ ๋ถ์ฌ ๊ตฌ๋ถํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. - ๊ฐ์ ์ ์ยท์ ์ ์๋๋ CPU ๋ถํ ๊ธฐ์ค์ด๋ผ ํญ์ ๊ธฐ๋ณธ ์ํ๋ก ๋ณด์ ๋๋ค.
์ด ํ๊ณ ์์ด ์์์ {nodes, links} ๋ฅผ ์ง์ ๋ฃ๋ ๋ฒ์ฉ ์ง์
์ ์ giip #2526 ์์ ์ค๊ณ๋ฅผ ์งํ ์ค์
๋๋ค.
๊ด๋ จ ๋ฌธ์
๋ฒ์ : 1.5
์ต์ข
์
๋ฐ์ดํธ: 2026-09-14
์์ค ํ์ผ: giipv3/public/help/api-network-topology.ko.md