Azure コストダッシュボードガイド
サーバー(LSSN)単位で収集した 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)
azureCostServersで該当 CSN のサーバー一覧と既定サーバー(default_lssn)を取得します。- 目的の
lssn(またはdefault_lssn)でazureCostを呼び出し、コスト詳細を取得します。
4. Base URL / Method
| API | Method | URL |
|---|---|---|
| サーバー一覧 | GET | https://giipfaw.azurewebsites.net/api/azureCostServers?csn={csn} |
| コスト詳細 | GET | https://giipfaw.azurewebsites.net/api/azureCost?csn={csn}&lssn={lssn} |
5. Query / Header
| 位置 | 名前 | 必須 | 説明 |
|---|---|---|---|
| query | csn | 必須 | プロジェクト番号(整数) |
| query | lssn | azureCost のみ必須 | サーバー番号(整数) |
| header | x-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)
| HTTP | rstVal | message 例 | 原因 |
|---|---|---|---|
| 400 | 400 | csn and lssn are required numeric query parameters | 必須パラメータの欠落/形式エラー |
| 401 | 401 | Missing x-api-key header | キーの欠落または無効 |
| 403 | 403 | Access denied | その CSN へのアクセス権なし |
| 404 | 404 | No cost data for this server | サーバーが CSN に属さない、または直近 30 日のスナップショットなし |
| 429 | 429 | Too Many Requests | 過剰な呼び出しによるレート制限(10 参照) |
| 500 | 500 | (内部エラーメッセージ) | サーバーエラー — 少し待って再試行 |
8. 値の意味(税抜・通貨・スナップショット・collected_at・MonthToDate・予測)
- すべてのコストは**税抜(Pre-tax)**基準で、通貨は
period.currencyです。 - 常に最新のスナップショット 1 件が基準です(リアルタイムではありません)。収集時刻は
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 の例(1 ファイル: サーバー一覧 → 既定 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 ステップ)
- 環境変数を設定:
GIIP_CSN、GIIP_API_KEY(任意でGIIP_LSSN)。 azureCostServersを呼び出し →default_lssnを確認。azureCostを呼び出し →dataを取得。totals/by_service/by_resource_groupで合計・上位項目を分析。- 4xx/5xx はエラー表に従って処理し、
429はRetry-Afterで再試行。
🔍 主な構成要素
1. サービス / リソースグループ タブ
ページ上部の2つのタブで、同じデータをサービス別とリソースグループ別の2つの視点で切り替えます。タブを押すとページ全体を再読み込みせず、アドレスバーの ?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 フィルター・小計)に反映されます。 - 再指定 / 解除: すでに別の CSN にマッピング済みの RG を別プロジェクトに変更すると、以前のマッピングは自動的に整理され 1 RG = 1 CSN が保たれます。
(指定なし)を選んで適用するとマッピングが解除されます。 - マッピング RG のみ表示: 現在のプロジェクト(CSN)にマッピングされた RG が 1 件以上あると 「CSN マッピング RG のみ表示」 トグルが現れ、オンにすると表示中サーバーのリソースグループをマッピング済み RG のみに絞り、マッピング小計も表示します。マッピングがなければ全 RG が表示されます(非破壊フォールバック)。
- このインライン指定は、専用管理画面 Azure リソースグループ管理 と同じマッピングデータを共有します。サブスクリプション ID・メモを含む詳細管理は管理画面をご利用ください。
🛠️ 活用のヒント
- 視点の切り替え: サービスタブでどの Azure サービスがコストを多く使っているか、リソースグループタブでどのグループが大きいかを分けて確認できます。
- リンク共有:
?view=と?lssn=の値がアドレスバーに反映されるため、特定のサーバー・視点をそのまま共有できます。 - 月末予測の活用: 予測コストは当月累計データがある場合のみ算出されます。急増の兆候を早期に把握するのに役立ちます。
💡 注意事項
- 表示されるコストはすべて**税抜(Pre-tax)**基準です。
- 常に最も新しく収集された1件のスナップショットを表示します。リアルタイム値ではなく収集時刻基準です。
- データがない場合は案内メッセージが表示されます。多くは対象サーバーのコストコレクターがまだ実行されていない、または保存済みスナップショットがない場合です。
トラブルシューティング
| 症状 | 原因 | 解決 |
|---|---|---|
| 「データなし」と表示される | 該当 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.ja.md