giip
SES Proposal
6 min read

Azure ๋น„์šฉ ๋Œ€์‹œ๋ณด๋“œ ๊ฐ€์ด๋“œ

์„œ๋ฒ„(LSSN) ๋‹จ์œ„๋กœ ์ˆ˜์ง‘๋œ Azure ๊ตฌ๋… ๋น„์šฉ์„ ์„œ๋น„์Šค๋ณ„ยท๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน๋ณ„๋กœ ์กฐํšŒํ•˜๊ณ  ์›”๋ง ์˜ˆ์ƒ ๋น„์šฉ๊นŒ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ Azure ๋น„์šฉ ํŽ˜์ด์ง€๋กœ ์ด๋™ โ†’

๐Ÿ“‹ ๊ฐœ์š”

Azure ๋น„์šฉ ๋Œ€์‹œ๋ณด๋“œ๋Š” ์„ ํƒํ•œ ์„œ๋ฒ„(LSSN)์— ์—ฐ๊ฒฐ๋œ Azure ๊ตฌ๋…์˜ ๋น„์šฉ ํ˜„ํ™ฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋น„์šฉ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆ˜์ง‘ํ•ด KVS์— ์ €์žฅํ•œ ์ตœ์‹  ์Šค๋ƒ…์ƒท(kFactor=azure_cost)์„ ์ฝ์–ด์™€, ์„œ๋น„์Šค๋ณ„ ๋˜๋Š” ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน๋ณ„ ๋น„์šฉ ๋น„์ค‘์„ ํ‘œ์™€ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์กฐํšŒ ๊ธฐ๊ฐ„์ด ์ด๋ฒˆ ๋‹ฌ ๋ˆ„์ (MonthToDate)์ผ ๊ฒฝ์šฐ ํ˜„์žฌ๊นŒ์ง€์˜ ์ผํ‰๊ท ์„ ๊ธฐ์ค€์œผ๋กœ ์›”๋ง ์˜ˆ์ƒ ๋น„์šฉ๊นŒ์ง€ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค– AI/API ํ€ต์Šคํƒ€ํŠธ

์ด ์ ˆ์€ ์‚ฌ๋žŒ์ด ์•„๋‹Œ AI ์—์ด์ „ํŠธ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด ํ™”๋ฉด๊ณผ ๋™์ผํ•œ ์„œ๋ฒ„ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์กฐํšŒยท๋ถ„์„ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ํ™”๋ฉด๊ณผ ๊ณต๊ฐœ API๋Š” ๊ฐ™์€ ๊ณต์šฉ ์กฐํšŒ ์„œ๋น„์Šค(์ •๋ณธ ์ €์žฅ ํ”„๋กœ์‹œ์ €)๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ฐ’์ด ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

1. ์ค€๋น„๋ฌผ

  • CSN: ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ(์˜ˆ: 47).
  • LSSN: ์„œ๋ฒ„ ๋ฒˆํ˜ธ. ๋ชจ๋ฅด๋ฉด ์•„๋ž˜ ์„œ๋ฒ„ ๋ชฉ๋ก API๋กœ ์กฐํšŒํ•˜๋ฉฐ, ๊ธฐ๋ณธ ์„œ๋ฒ„(default_lssn)๋ฅผ ํ•จ๊ป˜ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.
  • API Key: ๋ฐœ๊ธ‰๋ฐ›์€ ์‹œํฌ๋ฆฟ ํ‚ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜(GIIP_API_KEY)๋กœ๋งŒ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

2. ์ธ์ฆ ๋ณด์•ˆ ๊ฒฝ๊ณ  (x-api-key)

  • ์ธ์ฆ์€ x-api-key ์š”์ฒญ ํ—ค๋”๋กœ๋งŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. URL ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์ด๋‚˜ ๋ณธ๋ฌธ์— ํ‚ค๋ฅผ ๋„ฃ์ง€ ๋งˆ์„ธ์š”(๋กœ๊ทธยทํ”„๋ก์‹œ์— ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค).
  • ์•„๋ž˜ ์˜ˆ์ œ๋Š” ํ‚ค๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ณ  ํ™˜๊ฒฝ๋ณ€์ˆ˜ GIIP_CSN / GIIP_LSSN / GIIP_API_KEY๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

3. ํ˜ธ์ถœ ์ˆœ์„œ (azureCostServers โ†’ azureCost)

  1. azureCostServers๋กœ ํ•ด๋‹น CSN์˜ ์„œ๋ฒ„ ๋ชฉ๋ก๊ณผ ๊ธฐ๋ณธ ์„œ๋ฒ„(default_lssn)๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
  2. ์›ํ•˜๋Š” lssn(๋˜๋Š” default_lssn)์œผ๋กœ azureCost๋ฅผ ํ˜ธ์ถœํ•ด ๋น„์šฉ ์ƒ์„ธ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

4. Base URL / Method

APIMethodURL
์„œ๋ฒ„ ๋ชฉ๋กGEThttps://giipfaw.azurewebsites.net/api/azureCostServers?csn={csn}
๋น„์šฉ ์ƒ์„ธGEThttps://giipfaw.azurewebsites.net/api/azureCost?csn={csn}&lssn={lssn}

5. Query / Header

์œ„์น˜์ด๋ฆ„ํ•„์ˆ˜์„ค๋ช…
querycsnํ•„์ˆ˜ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ(์ •์ˆ˜)
querylssnazureCost๋งŒ ํ•„์ˆ˜์„œ๋ฒ„ ๋ฒˆํ˜ธ(์ •์ˆ˜)
headerx-api-keyํ•„์ˆ˜๋ฐœ๊ธ‰๋ฐ›์€ ์‹œํฌ๋ฆฟ ํ‚ค

6. ์„ฑ๊ณต ์‘๋‹ต ์˜ˆ์‹œ + ํ•„๋“œ ์„ค๋ช…

๊ณตํ†ต ๋ด‰ํˆฌ: { "rstVal": 200, "message": "OK", "data": { ... } }

azureCostServers์˜ data:

{
  "csn": 47,
  "default_lssn": 71197,
  "servers": [
    { "lssn": 71197, "hostname": "example-host", "has_azure_cost_snapshot": true, "latest_collected_at": "2026-09-02T22:26:36" }
  ]
}

azureCost์˜ data:

{
  "csn": 47,
  "lssn": 71197,
  "source": { "kfactor": "azure_cost", "snapshot_id": 44344061, "collected_at": "2026-09-02T22:26:36" },
  "subscription": { "subscription_id": "<your-subscription-id>", "subscription_name": "<your-subscription>" },
  "period": { "type": "MonthToDate", "start_date": "2026-09-01", "end_date": "2026-09-02", "currency": "KRW", "is_month_to_date": true },
  "totals": { "pretax_cost": 87993.34, "forecast_month_end": 1319900.03 },
  "by_service": [
    { "name": "Azure App Service", "pretax_cost": 38703.06, "ratio_percent": 43.98, "forecast_month_end": 580545.83 }
  ],
  "by_resource_group": [
    { "name": "rg-example-prod", "pretax_cost": 54988.80, "ratio_percent": 62.49, "forecast_month_end": 824832.00, "mapped_csn": null }
  ]
}

ํ•„๋“œ ์„ค๋ช…:

  • totals.pretax_cost: ๊ธฐ๊ฐ„ ์„ธ์ „ ์ด์•ก. totals.forecast_month_end: ์›”๋ง ์˜ˆ์ธก(์•„๋ž˜ 8 ์ฐธ์กฐ).
  • by_service[] / by_resource_group[]: ๋น„์šฉ์ด ํฐ ์ˆœ์œผ๋กœ ์„œ๋ฒ„์—์„œ ์ด๋ฏธ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. ratio_percent๋Š” ์ด์•ก ๋Œ€๋น„ ๋น„์œจ(%), forecast_month_end๋Š” ๊ทธ ํ•ญ๋ชฉ์˜ ์›”๋ง ์˜ˆ์ธก์ž…๋‹ˆ๋‹ค.
  • by_resource_group[].mapped_csn: ์•„๋ž˜ 9 ์ฐธ์กฐ.

7. ์˜ค๋ฅ˜ ํ‘œ (HTTP / rstVal)

HTTPrstValmessage ์˜ˆ์›์ธ
400400csn and lssn are required numeric query parametersํ•„์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ˆ„๋ฝ/ํ˜•์‹ ์˜ค๋ฅ˜
401401Missing x-api-key headerํ‚ค ๋ˆ„๋ฝ ๋˜๋Š” ๋ฌดํšจ
403403Access deniedํ•ด๋‹น CSN ์ ‘๊ทผ ๊ถŒํ•œ ์—†์Œ
404404No cost data for this server์„œ๋ฒ„๊ฐ€ CSN ์†Œ์†์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ ์ตœ๊ทผ 30์ผ ์Šค๋ƒ…์ƒท ์—†์Œ
429429Too Many Requests๊ณผ๋‹ค ํ˜ธ์ถœ๋กœ ๋ ˆ์ดํŠธ๋ฆฌ๋ฐ‹(์•„๋ž˜ 10 ์ฐธ์กฐ)
500500(๋‚ด๋ถ€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€)์„œ๋ฒ„ ์˜ค๋ฅ˜ โ€” ์ž ์‹œ ํ›„ ์žฌ์‹œ๋„

8. ๊ฐ’์˜ ์˜๋ฏธ (์„ธ์ „ยทํ†ตํ™”ยท์Šค๋ƒ…์ƒทยทcollected_atยทMonthToDateยท์˜ˆ์ธก)

  • ๋ชจ๋“  ๋น„์šฉ์€ ์„ธ์ „(Pre-tax) ๊ธฐ์ค€์ด๋ฉฐ, ํ†ตํ™”๋Š” period.currency์ž…๋‹ˆ๋‹ค.
  • ํ•ญ์ƒ ๊ฐ€์žฅ ์ตœ๊ทผ ์Šค๋ƒ…์ƒท ํ•œ ๊ฑด ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค(์‹ค์‹œ๊ฐ„ ์•„๋‹˜). ์ˆ˜์ง‘ ์‹œ๊ฐ์€ source.collected_at์ž…๋‹ˆ๋‹ค.
  • period.type์ด MonthToDate๋ฉด ์ด๋ฒˆ ๋‹ฌ 1์ผ๋ถ€ํ„ฐ ์ˆ˜์ง‘์ผ๊นŒ์ง€์˜ ๋ˆ„์ ์ž…๋‹ˆ๋‹ค(is_month_to_date = true).
  • forecast_month_end๋Š” MonthToDate์ผ ๋•Œ๋งŒ ์‚ฐ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹์€ ์ด๋น„์šฉ ร— (๊ทธ ๋‹ฌ ์ „์ฒด ์ผ์ˆ˜ รท ์ˆ˜์ง‘์ผ์ž)์ด๋ฉฐ, ๋‹ค๋ฅธ ๊ธฐ๊ฐ„์ด๋ฉด null์ž…๋‹ˆ๋‹ค.
  • ์Šค๋ƒ…์ƒท์— period.start_date / end_date ์›๋ณธ์ด ์—†์–ด collected_at ๊ธฐ์ค€์œผ๋กœ ํŒŒ์ƒํ•ฉ๋‹ˆ๋‹ค.

9. ์„œ๋น„์Šค๋ณ„ / RG๋ณ„ ๋ถ„์„๊ณผ mapped_csn

  • by_service๋Š” Azure ์„œ๋น„์Šค๋ณ„, by_resource_group๋Š” ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน๋ณ„ ๋น„์šฉ์ž…๋‹ˆ๋‹ค.
  • mapped_csn์€ ๊ทธ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ์†Œ์œ (๋งคํ•‘)ํ•œ CSN์œผ๋กœ, ์š”์ฒญํ•œ CSN๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ RG์˜ ์†Œ์œ ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์ผ ๋•Œ). ๊ฒฉ๋ฆฌ ์œ„๋ฐ˜์ด ์•„๋‹ˆ๋ผ ์†Œ์œ  ๊ด€๊ณ„ ์ •๋ณด์ด๋ฉฐ, ๋งคํ•‘์ด ์—†์œผ๋ฉด null์ž…๋‹ˆ๋‹ค.

10. 429 ์žฌ์‹œ๋„

  • ๊ณต์šฉ API ๋‚จ์šฉ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ณผ๋‹ค ํ˜ธ์ถœ ์‹œ 429 Too Many Requests๊ฐ€ ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ต์— Retry-After ํ—ค๋”(์ดˆ)๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๋งŒํผ ๋Œ€๊ธฐํ•œ ๋’ค ์žฌ์‹œ๋„ํ•˜๊ณ , ์—†์œผ๋ฉด ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„(์˜ˆ: 1s โ†’ 2s โ†’ 4s)๋กœ ์žฌ์‹œ๋„ํ•˜์„ธ์š”.

11. cURL ์˜ˆ์ œ

# ํ‚ค๋ฅผ URL/๋ณธ๋ฌธ์— ๋„ฃ์ง€ ์•Š๊ณ  ํ™˜๊ฒฝ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
export GIIP_CSN=47
export GIIP_LSSN=71197          # ๋ชจ๋ฅด๋ฉด ์ƒ๋žตํ•˜๊ณ  ์•„๋ž˜ default_lssn ์‚ฌ์šฉ
export GIIP_API_KEY=***your_key***

# 1) ์„œ๋ฒ„ ๋ชฉ๋ก + ๊ธฐ๋ณธ ์„œ๋ฒ„
curl -s "https://giipfaw.azurewebsites.net/api/azureCostServers?csn=${GIIP_CSN}" \
  -H "x-api-key: ${GIIP_API_KEY}"

# 2) ๋‹จ์ผ ์„œ๋ฒ„ ๋น„์šฉ ์ƒ์„ธ
curl -s "https://giipfaw.azurewebsites.net/api/azureCost?csn=${GIIP_CSN}&lssn=${GIIP_LSSN}" \
  -H "x-api-key: ${GIIP_API_KEY}"

12. PowerShell ์˜ˆ์ œ

$csn = $env:GIIP_CSN; $lssn = $env:GIIP_LSSN; $key = $env:GIIP_API_KEY
$h = @{ "x-api-key" = $key }
$base = "https://giipfaw.azurewebsites.net/api"

$servers = Invoke-RestMethod -Uri "$base/azureCostServers?csn=$csn" -Headers $h
$target = if ($lssn) { $lssn } else { $servers.data.default_lssn }

$cost = Invoke-RestMethod -Uri "$base/azureCost?csn=$csn&lssn=$target" -Headers $h
"์ด ์„ธ์ „๋น„์šฉ: $($cost.data.totals.pretax_cost) $($cost.data.period.currency)"
$cost.data.by_service | Select-Object -First 5 name, pretax_cost, ratio_percent

13. Python ์˜ˆ์ œ (ํ•œ ํŒŒ์ผ: ์„œ๋ฒ„๋ชฉ๋ก โ†’ ๊ธฐ๋ณธ LSSN โ†’ ๋น„์šฉ์กฐํšŒ โ†’ ์ƒ์œ„ 5)

import os, sys, time, json, urllib.request, urllib.error

BASE = "https://giipfaw.azurewebsites.net/api"
CSN = os.environ["GIIP_CSN"]
KEY = os.environ["GIIP_API_KEY"]
LSSN = os.environ.get("GIIP_LSSN")  # ์—†์œผ๋ฉด default_lssn ์‚ฌ์šฉ

def call(path):
    req = urllib.request.Request(f"{BASE}/{path}", headers={"x-api-key": KEY})
    for attempt in range(4):
        try:
            with urllib.request.urlopen(req, timeout=30) as r:
                return json.load(r)
        except urllib.error.HTTPError as e:
            if e.code == 429:  # ๋ ˆ์ดํŠธ๋ฆฌ๋ฐ‹ โ†’ Retry-After ๋งŒํผ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„
                time.sleep(int(e.headers.get("Retry-After", 2 ** attempt)))
                continue
            sys.exit(f"HTTP {e.code}: {e.read().decode()}")
    sys.exit("429 ์žฌ์‹œ๋„ ์ดˆ๊ณผ")

servers = call(f"azureCostServers?csn={CSN}")
lssn = LSSN or servers["data"]["default_lssn"]
cost = call(f"azureCost?csn={CSN}&lssn={lssn}")["data"]

cur = cost["period"]["currency"]
print(f"์ด ์„ธ์ „๋น„์šฉ: {cost['totals']['pretax_cost']} {cur} "
      f"(์›”๋ง์˜ˆ์ธก {cost['totals']['forecast_month_end']})")
print("์ƒ์œ„ 5 ์„œ๋น„์Šค:")
for s in cost["by_service"][:5]:
    print(f"  {s['name']}: {s['pretax_cost']} ({s['ratio_percent']:.1f}%)")
print("์ƒ์œ„ 5 ๋ฆฌ์†Œ์Šค๊ทธ๋ฃน:")
for g in cost["by_resource_group"][:5]:
    print(f"  {g['name']}: {g['pretax_cost']} ({g['ratio_percent']:.1f}%) mapped_csn={g['mapped_csn']}")

14. ์‹คํ–‰ ์ˆœ์„œ (5๋‹จ๊ณ„)

  1. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •: GIIP_CSN, GIIP_API_KEY(์„ ํƒ GIIP_LSSN).
  2. azureCostServers ํ˜ธ์ถœ โ†’ default_lssn ํ™•์ธ.
  3. azureCost ํ˜ธ์ถœ โ†’ data ํš๋“.
  4. totals / by_service / by_resource_group๋กœ ์ด์•กยท์ƒ์œ„ ํ•ญ๋ชฉ ๋ถ„์„.
  5. 4xx/5xx๋Š” ์˜ค๋ฅ˜ํ‘œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , 429๋Š” Retry-After๋กœ ์žฌ์‹œ๋„.

๐Ÿ” ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

1. ์„œ๋น„์Šค / ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ํƒญ

ํŽ˜์ด์ง€ ์ƒ๋‹จ์˜ ๋‘ ํƒญ์œผ๋กœ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋น„์Šค๋ณ„๊ณผ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน๋ณ„ ๋‘ ๊ด€์ ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํƒญ์„ ๋ˆ„๋ฅด๋ฉด ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์ฃผ์†Œ์ฐฝ์˜ ?view= ๊ฐ’(service ๋˜๋Š” rg)๋งŒ ๊ฐฑ์‹ ๋˜๋ฏ€๋กœ, ํŠน์ • ๊ด€์ ์˜ ๋งํฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„(LSSN) ์„ ํƒ

๋น„์šฉ์„ ์กฐํšŒํ•  ๋Œ€์ƒ ์„œ๋ฒ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋“œ๋กญ๋‹ค์šด: ํ˜„์žฌ ํ”„๋กœ์ ํŠธ(csn)์— ์†ํ•œ ์„œ๋ฒ„ ๋ชฉ๋ก์ด ํ˜ธ์ŠคํŠธ๋ช… (LSSN) ํ˜•ํƒœ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.
  • ์ง์ ‘ ์ž…๋ ฅ: ๋ชฉ๋ก์— ์—†๊ฑฐ๋‚˜ LSSN์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์˜ค๋ฅธ์ชฝ ์ž…๋ ฅ๋ž€์— ๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  [์กฐํšŒ]๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ Enter๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

LSSN์ด ์ •ํ•ด์ง€๋ฉด ์ž๋™์œผ๋กœ ์ตœ์‹  ๋น„์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

3. ์š”์•ฝ ์นด๋“œ

์กฐํšŒ ๊ฒฐ๊ณผ ์ƒ๋‹จ์— ํ•ต์‹ฌ ์ง€ํ‘œ๋ฅผ ์นด๋“œ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ์ด ๋น„์šฉ: ํ•ด๋‹น ๊ธฐ๊ฐ„์˜ ์„ธ์ „ ์ด์•ก(total_pretax_cost)๊ณผ ํ†ตํ™”, ๊ธฐ๊ฐ„(period). ์ด๋ฒˆ ๋‹ฌ ๋ˆ„์ ์ด๋ฉด MonthToDate๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์›”๋ง ์˜ˆ์ƒ: MonthToDate ๊ธฐ๊ฐ„์ผ ๋•Œ๋งŒ ๋‚˜ํƒ€๋‚˜๋ฉฐ, ํ˜„์žฌ๊นŒ์ง€์˜ ์ผํ‰๊ท  ร— ๊ทธ ๋‹ฌ ์ „์ฒด ์ผ์ˆ˜๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ๋…: ๊ตฌ๋… ์ด๋ฆ„(subscription_name)๊ณผ ๊ตฌ๋… ID(subscription_id).
  • ์ˆ˜์ง‘ ์‹œ๊ฐ: ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ง‘๋œ ์‹œ๊ฐ(collected_at)๊ณผ ์กฐํšŒํ•œ LSSN.

4. ํ•ญ๋ชฉ๋ณ„ ๋น„์šฉ ํ‘œ

ํ™œ์„ฑ ํƒญ์— ๋”ฐ๋ผ ์„œ๋น„์Šค๋ณ„ ๋˜๋Š” ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน๋ณ„ ๋น„์šฉ์„ ๋น„์šฉ์ด ํฐ ์ˆœ์„œ๋กœ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

  • #: ์ˆœ์œ„
  • ์„œ๋น„์Šค / ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน: ํ•ญ๋ชฉ ์ด๋ฆ„
  • ๋น„์šฉ: ํ•ด๋‹น ํ•ญ๋ชฉ์˜ ์„ธ์ „ ๋น„์šฉ
  • ์›”๋ง ์˜ˆ์ƒ: MonthToDate์ผ ๋•Œ๋งŒ ํ‘œ์‹œ๋˜๋ฉฐ, ์ „์ฒด ์˜ˆ์ƒ ๋น„์œจ์„ ํ•ญ๋ชฉ์— ์ ์šฉํ•œ ๊ฐ’
  • ๋น„์ค‘: ์ด ๋น„์šฉ ๋Œ€๋น„ ๋น„์œจ์„ ๋ง‰๋Œ€์™€ ๋ฐฑ๋ถ„์œจ๋กœ ํ‘œ์‹œ

5. ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์— CSN(ํ”„๋กœ์ ํŠธ) ์ง€์ • ยท ๋งคํ•‘ RG ํ•„ํ„ฐ

๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ํƒญ์—์„œ๋Š” ๊ฐ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ํ–‰์—์„œ ๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ(CSN)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€์ • ๋ฐฉ๋ฒ•: ํ–‰์˜ [์ง€์ • CSN] ๋“œ๋กญ๋‹ค์šด์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ ๋ฅด๊ณ  **[์ ์šฉ]**์„ ๋ˆ„๋ฅด๋ฉด ๊ทธ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์ด ์„ ํƒํ•œ CSN์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค(๋‚ด๋ถ€์ ์œผ๋กœ tCsnAzureRg์— ์ €์žฅ). ์ดํ›„ ํ•ด๋‹น CSN ๊ด€์ ์˜ Azure ๋น„์šฉ ์กฐํšŒ(๋งคํ•‘ RG ํ•„ํ„ฐยท์†Œ๊ณ„)์— ์ด RG๊ฐ€ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
  • ์žฌ์ง€์ • / ํ•ด์ œ: ์ด๋ฏธ ๋‹ค๋ฅธ CSN์— ๋งคํ•‘๋œ RG๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋กœ ๋ฐ”๊พธ๋ฉด ์ด์ „ ๋งคํ•‘์€ ์ž๋™์œผ๋กœ ์ •๋ฆฌ๋˜์–ด 1 RG = 1 CSN์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. (์ง€์ • ์•ˆ ํ•จ)์„ ์„ ํƒํ•ด ์ ์šฉํ•˜๋ฉด ๋งคํ•‘์ด ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.
  • ๋งคํ•‘ RG๋งŒ ๋ณด๊ธฐ: ํ˜„์žฌ ํ”„๋กœ์ ํŠธ(CSN)์— ๋งคํ•‘๋œ RG๊ฐ€ 1๊ฑด ์ด์ƒ์ด๋ฉด "CSN ๋งคํ•‘ RG๋งŒ ๋ณด๊ธฐ" ํ† ๊ธ€์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ผœ๋ฉด ์กฐํšŒ ์ค‘์ธ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ๋งคํ•‘๋œ RG๋กœ๋งŒ ํ•„ํ„ฐ๋งํ•˜๊ณ  ๋งคํ•‘ ์†Œ๊ณ„๋ฅผ ํ•จ๊ป˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งคํ•‘์ด ์—†์œผ๋ฉด ์ „์ฒด RG๊ฐ€ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(๋น„ํŒŒ๊ดด ํด๋ฐฑ).
  • ์ด ์ธ๋ผ์ธ ์ง€์ •์€ ๋ณ„๋„ ๊ด€๋ฆฌ ํ™”๋ฉด์ธ Azure ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋งคํ•‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋… IDยท๋ฉ”๋ชจ๊นŒ์ง€ ํฌํ•จํ•œ ์ •๋ฐ€ ๊ด€๋ฆฌ๋Š” ๊ด€๋ฆฌ ํ™”๋ฉด์„ ์ด์šฉํ•˜์„ธ์š”.

๐Ÿ› ๏ธ ํ™œ์šฉ ํŒ

  • ๊ด€์  ์ „ํ™˜: ์„œ๋น„์Šค ํƒญ์œผ๋กœ ์–ด๋–ค Azure ์„œ๋น„์Šค๊ฐ€ ๋น„์šฉ์„ ๋งŽ์ด ์“ฐ๋Š”์ง€, ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ํƒญ์œผ๋กœ ์–ด๋–ค ๊ทธ๋ฃน์ด ํฐ์ง€ ๋‚˜๋ˆ ์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งํฌ ๊ณต์œ : ?view=์™€ ?lssn= ๊ฐ’์ด ์ฃผ์†Œ์ฐฝ์— ๋ฐ˜์˜๋˜๋ฏ€๋กœ ํŠน์ • ์„œ๋ฒ„ยท๊ด€์ ์„ ๊ทธ๋Œ€๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›”๋ง ์˜ˆ์ƒ ํ™œ์šฉ: ์˜ˆ์ƒ ๋น„์šฉ์€ ์ด๋ฒˆ ๋‹ฌ ๋ˆ„์  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์‚ฐ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ธ‰์ฆ ์—ฌ๋ถ€๋ฅผ ์กฐ๊ธฐ์— ํŒŒ์•…ํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•˜์„ธ์š”.

๐Ÿ’ก ์œ ์˜ ์‚ฌํ•ญ

  • ํ‘œ์‹œ๋˜๋Š” ๋น„์šฉ์€ ๋ชจ๋‘ ์„ธ์ „(Pre-tax) ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.
  • ํ•ญ์ƒ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ˆ˜์ง‘๋œ ํ•œ ๊ฑด์˜ ์Šค๋ƒ…์ƒท์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์ˆ˜์ง‘ ์‹œ๊ฐ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ฐœ ํ•ด๋‹น ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋น„์šฉ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ €์žฅ๋œ ์Šค๋ƒ…์ƒท์ด ์—†๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

์ฆ์ƒ์›์ธํ•ด๊ฒฐ
"๋ฐ์ดํ„ฐ ์—†์Œ"์œผ๋กœ ํ‘œ์‹œ๋จํ•ด๋‹น LSSN์— ๋Œ€ํ•ด ์ˆ˜์ง‘๋œ azure_cost ์Šค๋ƒ…์ƒท์ด ์—†์Œ๋Œ€์ƒ ์„œ๋ฒ„์—์„œ Azure ๋น„์šฉ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์‹คํ–‰ยท์ €์žฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„ ๋“œ๋กญ๋‹ค์šด์ด ๋น„์–ด ์žˆ์Œํ”„๋กœ์ ํŠธ(csn)๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋ชฉ๋ก ๋กœ๋”ฉ์— ์‹คํŒจํ•จํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•œ ๋’ค ๋‹ค์‹œ ์ ‘์†ํ•˜๊ฑฐ๋‚˜, LSSN์„ ์˜ค๋ฅธ์ชฝ ์ž…๋ ฅ๋ž€์— ์ง์ ‘ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
์›”๋ง ์˜ˆ์ƒ ์นด๋“œ/์—ด์ด ๋ณด์ด์ง€ ์•Š์Œ์กฐํšŒ ๊ธฐ๊ฐ„์ด MonthToDate๊ฐ€ ์•„๋‹˜์›”๋ง ์˜ˆ์ƒ์€ ์ด๋ฒˆ ๋‹ฌ ๋ˆ„์  ๋ฐ์ดํ„ฐ์—์„œ๋งŒ ์‚ฐ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ฐ„์ด ๋‹ค๋ฅด๋ฉด ์ •์ƒ ๋™์ž‘์ž…๋‹ˆ๋‹ค.
๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ํƒญ์ด ๋น„์–ด ์žˆ์Œ์Šค๋ƒ…์ƒท์— by_resource_group ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ๋‹จ์œ„ ๋น„์šฉ๊นŒ์ง€ ์ˆ˜์ง‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
[์ง€์ • CSN] ๋“œ๋กญ๋‹ค์šด์ด ๋ณด์ด์ง€ ์•Š์Œ์„ ํƒ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก ๋กœ๋”ฉ ์‹คํŒจ(์†Œ์† ์—†์Œ/๋„คํŠธ์›Œํฌ)ํ”„๋กœ์ ํŠธ์— ์†Œ์†๋ผ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ๋‹ค์‹œ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ๋งคํ•‘ RG ํ•„ํ„ฐยท์กฐํšŒ๋Š” ์ •์ƒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
[์ ์šฉ]ํ•ด๋„ ๋งคํ•‘์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ(CSN) ๊ถŒํ•œ ์—†์Œ ๋˜๋Š” API ์‹คํŒจํ•ด๋‹น CSN ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ , ๋ฐ˜๋ณต๋˜๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ฉ๋‹ˆ๋‹ค.
์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋จ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ๋˜๋Š” API ์‘๋‹ต ์‹คํŒจ์ž ์‹œ ํ›„ ๋‹ค์‹œ [์กฐํšŒ]ํ•˜๊ณ , ๋ฐ˜๋ณต๋˜๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „: 1.1 ์ตœ์ข… ์—…๋ฐ์ดํŠธ: 2026-07-24 ์†Œ์Šค ํŒŒ์ผ: giipv3/public/help/azure-cost.ko.md