専有仮想サーバリソース/専有ブロックストレージの使用量算出
対象リージョン:東日本第3/西日本第3
専有リソースの使用量を算出するには、以下の手順で実施します。
- 契約ドメインに所属しているすべてのプロジェクトをリストする。
- 各プロジェクトの専有仮想サーバリソース、専有ブロックストレージの使用量を取得する。
- 2.で取得した各プロジェクトごとの値を合計し、契約ドメイン全体での使用量を算出する。
リソース情報を取得するユーザーには、取得可能なロールが割り当てられている必要があります。手順1.で全プロジェクトのリストを実行できる権限、かつ手順2.で各プロジェクトのリソース情報を取得する権限が必要です。そのため、リソース情報を取得するユーザは、契約ドメインに所属する全プロジェクトに対し、cpf_adminロールが割り当てられているものとします。
curlとjqによるリソース使用量算出
1.全プロジェクトをリスト
APIに必要なトークンを得るため、以下のリクエストをFJCS identityサービスに発行します。
-
コマンド
curl -D - -X POST -H "Content-Type: application/json" https://IDENTITY_SERVICE_HOST/v3/auth/tokens -d '{"auth":{"identity": {"methods": ["password"], "password": {"user": {"id": "USER_ID", "password": "USER_PASSWORD"}}}, "scope": {"project": {"id": "ADMIN_PROJECT_ID"}}}}' -o /dev/null | grep X-Subject-Token
- IDENTITY_SERVICE_HOST:対象となるリージョンのFJCS identityサービスのホスト名
- USER_ID:リソース取得に使用するユーザのID
- USER_PASSWORD:リソース取得に使用するユーザのパスワード
- ADMIN_PROJECT_ID:契約ドメインの初期プロジェクト(契約ドメイン名-prj)のID
【出力例】(以下の太字を控えておきます。)
X-Subject-Token: gAAAAABezz8xpLKmAKkR3MWMiQka-ipdbeHnaXlyZwrNUhAz4m5hNoMLb3geO5c-3Ghb5hAQEijbl8DRXXJFYJ2w6cNJ-PjYZuRAeUshASoQppO-MpkK6GZ73Av_aFzcmY2cGVzz0u5ZTNSnFI-5JOaNzIi-CVQhRZuXhTMKWxZhew1ZS4wfAGQ
控えておいたトークンを利用して、全プロジェクトのIDをリストします。
-
コマンド
curl -H "X-Auth-Token: ADMIN_TOKEN" https://IDENTITY_SERVICE_HOST/v3/projects?domain_id=DOMAIN_ID | jq '.projects[].id'
- ADMIN_TOKEN:先に取得したトークンの値
- IDENTITY_SERVICE_HOST:対象となるリージョンのFJCS identityサービスのホスト名
- DOMAIN_ID:契約ドメインID
【出力例】
"83a8dc0428cf4798b131d734746a8069" "1820540368b3455a8b0a994671c1b6a3" ...
出力された契約ドメインに所属するプロジェクトのID一覧を控えておきます。
2.プロジェクトごとの専有リソース使用量の算出
対象となるプロジェクトのスコープでトークンを取得します。
-
コマンド
curl -D - -X POST -H "Content-Type: application/json" https://IDENTITY_SERVICE_HOST/v3/auth/tokens -d '{"auth":{"identity": {"methods": ["password"], "password": {"user": {"id": "USER_ID", "password": "USER_PASSWORD"}}}, "scope": {"project": {"id": "TARGET_PROJECT_ID"}}}}' -o /dev/null | grep X-Subject-Token
- IDENTITY_SERVICE_HOST:対象となるリージョンのFJCS identityサービスのホスト名
- USER_ID:リソース取得に使用するユーザのID
- USER_PASSWORD:リソース取得に使用するユーザのパスワード
- TARGET_PROJECT_ID:リソースを取得する対象となるプロジェクトのID (手順1.でリストしたもの)
【出力例】(以下の太字を控えておきます。)
X-Subject-Token: gAAAAABez1UD_k4WdDcOi2LlQRkNyaHDDogesoM9af4LSk0R_e6PbsnrMed8wo90eT8jTXa4bwI3RcIoAldRS76-X7kVFpCt_htNCEOtcdtZ34GYpSkma-BYp05CYyTreYZsAf0gskxI0XPWZ6eQvf3jsRIvAJZRrl0rrocu5MVp0fqeijPC7H0
控えておいたトークンを利用して、各プロジェクトのリソース使用量を取得します。
以下の3つのタイプを個別に算出します。
-
専有仮想サーバ[スタンダードCPUタイプ]
- RAM使用量取得コマンドを以下に示します。
curl -H "X-OpenStack-Nova-API-Version: 2.47" -H "X-Auth-Token: TARGET_TOKEN" https://COMPUTE_SERVICE_HOST/v2.1/servers/detail | jq '[.servers[] | select(.flavor.original_name | test("\\S+3-\\S+.d$")).flavor.ram] | add'
- COMPUTE_SERVICE_HOST:対象となるリージョンのFJCS computeサービスのホスト名
- TARGET_TOKEN:対象となるプロジェクトのトークン値
【出力例】
8192
対象プロジェクトのRAM総使用量が出力されます。(単位:MiB)
- vCPU使用量取得コマンドを以下に示します。
curl -H "X-OpenStack-Nova-API-Version: 2.47" -H "X-Auth-Token: TARGET_TOKEN" https://COMPUTE_SERVICE_HOST/v2.1/servers/detail | jq '[.servers[] | select(.flavor.original_name | test("\\S+3-\\S+.d$")).flavor.vcpus] | add'
- COMPUTE_SERVICE_HOST:対象となるリージョンのFJCS computeサービスのホスト名
- TARGET_TOKEN:対象となるプロジェクトのトークン値
【出力例】
2
対象プロジェクトのvCPU総数が出力されます。
-
専有仮想サーバ[ハイスピードCPUタイプ]
- RAM使用量取得コマンドを以下に示します。
curl -H "X-OpenStack-Nova-API-Version: 2.47" -H "X-Auth-Token: TARGET_TOKEN" https://COMPUTE_SERVICE_HOST/v2.1/servers/detail | jq '[.servers[] | select(.flavor.original_name | test("\\S+4-\\S+.d$")).flavor.ram] | add'
- COMPUTE_SERVICE_HOST:対象となるリージョンのFJCS computeサービスのホスト名
- TARGET_TOKEN:対象となるプロジェクトのトークン値
【出力例】
8192
対象プロジェクトのRAM総使用量が出力されます。(単位:MiB)
- vCPU使用量取得コマンドを以下に示します。
curl -H "X-OpenStack-Nova-API-Version: 2.47" -H "X-Auth-Token: TARGET_TOKEN" https://COMPUTE_SERVICE_HOST/v2.1/servers/detail | jq '[.servers[] | select(.flavor.original_name | test("\\S+4-\\S+.d$")).flavor.vcpus] | add'
- COMPUTE_SERVICE_HOST:対象となるリージョンのFJCS computeサービスのホスト名
- TARGET_TOKEN:対象となるプロジェクトのトークン値
【出力例】
2
対象プロジェクトのvCPU総数が出力されます。
-
専有ブロックストレージ[M2相当]
- ストレージ使用量取得コマンドを以下に示します。
curl -H "X-Auth-Token: TARGET_TOKEN" https://BLOCK_STORAGE_SERVICE_HOST/v3/TARGET_PROJECT_ID/volumes/detail | jq '[.volumes[] | select(.volume_type | test("d$")).size] | add'
- BLOCK_STORAGE_SERVICE_HOST:対象となるリージョンのFJCS block storageサービスのホスト名
- TARGET_TOKEN:対象となるプロジェクトのトークン値
- TARGET_PROJECT_ID:対象となるプロジェクトのID
【出力例】
2111
対象プロジェクトのブロックストレージ総使用量が出力されます。(単位:GiB)
- スナップショット使用量取得コマンドを以下に示します。
curl -H "X-Auth-Token: TARGET_TOKEN" https://BLOCK_STORAGE_SERVICE_HOST/v3/TARGET_PROJECT_ID/volumes/detail > /tmp/vol_detail; \ curl -H "X-Auth-Token: TARGET_TOKEN" https://BLOCK_STORAGE_SERVICE_HOST/v3/TARGET_PROJECT_ID/snapshots \ | jq -r '.snapshots | map(.volume_id + "_" + (.size|tostring)) | join("\n")' | \ while read line; do id=$(echo $line | cut -f 1 -d "_"); \ size=$(echo $line | cut -f 2 -d "_"); \ cat /tmp/vol_detail | jq -r ".volumes[] | select(.id == \"$id\").volume_type" | grep ".d$" > /dev/null \ && echo $size; done | jq -s "add"
【出力例】
310
対象プロジェクトのスナップショット総使用量が出力されます。(単位:GiB)
スナップショット総使用量が「0」の場合は、「null」が出力されます。
3.契約ドメインの専有リソース総使用量の算出
各プロジェクトのリソース使用量をすべて合計し、契約ドメイン全体における専有リソースの総使用量を算出します。
- 専有仮想サーバの使用量は、使用しているCPUタイプにおける、vCPU使用量、RAM使用量をそれぞれ合計した値です。
- 専有ブロックストレージの使用量は、ストレージ使用量とスナップショット使用量を合計した値です。