giip
SES案件登録
10分で読了

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": { ... } }

azureCostServersdata:

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

azureCostdata:

{
  "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 です。
  • 常に最新のスナップショット 1 件が基準です(リアルタイムではありません)。収集時刻は source.collected_at です。
  • period.typeMonthToDate の場合、今月 1 日から収集日までの累計です(is_month_to_date = true)。
  • forecast_month_endMonthToDate のときのみ算出されます。式は 合計 × (その月の総日数 ÷ 収集日) で、他の期間では 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 ステップ)

  1. 環境変数を設定: GIIP_CSNGIIP_API_KEY(任意で GIIP_LSSN)。
  2. azureCostServers を呼び出し → default_lssn を確認。
  3. azureCost を呼び出し → data を取得。
  4. totals / by_service / by_resource_group で合計・上位項目を分析。
  5. 4xx/5xx はエラー表に従って処理し、429Retry-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