IBM Cloud の File Storage 使用率を確認するスクリプト

## IBM Cloud の File Storage 使用率を確認する簡易なスクリプトを作成して確認してみました




#### 前提環境
・Local PC(Mac) のターミナルから実行
・IBM Cloud のアカウントを保持している
・IBM Cloud 上で FileStorage を使用している
・実行環境で ibmcloud CLI が使用できる

IBM Cloud File Storage について：
https://cloud.ibm.com/docs/FileStorage?topic=FileStorage-getting-started&locale=ja 

IBM Cloud File Storage サービス CLI操作について：
https://cloud.ibm.com/docs/cli?topic=cloud-cli-sl-file-storage-service&locale=ja

処理は主に "ibmcloud sl file volume-list" コマンドを使用しています：
https://cloud.ibm.com/docs/cli?topic=cli-sl-file-storage-service&locale=ja#sl_file_volume_list


---
処理はシェルスクリプト(bash)で実施しています。
IBM Cloud アカウントに紐づく File Storage操作が可能な API key を使用します。

IBM Cloud API key について：
https://cloud.ibm.com/docs/iam?topic=iam-manapikey&locale=ja

IBM Cloud CLI ログイン・オプション：
https://cloud.ibm.com/docs/cli?topic=cli-ibmcloud_cli#ibmcloud_login

---



#### サンプル・スクリプト

```filestorage.sh
#!/bin/bash

## ibmcloud cli download
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh > /dev/null

ibmcloud login --apikey "apikey" -r "region" -g "resource group" > /dev/null

ibmcloud sl file volume-list --column username | grep -v username > FileStorage.txt

echo "IBM Cloud FileStorage Usage: Username = % , ( total ) " > result.txt

while read line
do
 used_b=`ibmcloud sl file volume-list -u "$line" --column bytes_used | grep -v bytes_used`
 capacity_gb=`ibmcloud sl file volume-list -u "$line"  --column capacity_gb | grep -v capacity_gb`
 capacity_b=`echo $(($capacity_gb*10000000)) `
 tag=`ibmcloud sl file volume-list -u "$line" --column notes | grep -v notes`
 result=`awk "BEGIN { print $used_b/$capacity_b }"`
 echo $line, $tag = $result % "(" $capacity_gb GB ")"
done <FileStorage.txt >> result.txt

cat result.txt

rm FileStorage.txt
rm result.txt

```

#### 処理概要
・IBM Cloud ログイン
・使用している File Storage 対象取得
・対象分のループ処理： File Storage の総容量、使用容量を取得し使用率を計算
・結果を出力
・一時ファイルを削除

---

使用している値についての注釈

||項目|内容             |
|:-------:|:---------|:-------------------------------------------------------|
|1| "apikey" |IBM Cloud アカウントに紐づく、File Storage 操作ができるAPI key。実行する際は対象のAPI key に置き換える|
|2| "region" |実行する際は対象リージョンに置き換える|
|3| "resource group" |実行する際は対象リソースグループに置き換える|
|4|FileStorage.txt|スクリプト処理内で File Storage 情報を一時的に保管するファイル|
|5|used_b|クリプト処理内の File Storage の byte使用率の一時的変数|
|6|capacity_gb|スクリプト処理内の File Storage の GB使用率の一時的変数|
|7|cabacity_b |スクリプト処理内の File Storage の byte使用率の一時的変数|
|8|-- column notes|ibmcloud sl オプション。 FileStorageに notes(tag) を使用していると表示することが可能になる |
|9|result.txt|スクリプト処理内で 処理結果 を一時的に保管するファイル|



---



#### 実行

以下のような結果が得られます。

```
 # ./filestorage.sh
IBM Cloud FileStorage Usage: Username = % ,  ( total )
Dxxxxxxxxxxxxxx_1, filestorage1 = 62.8373 % , ( 600 GB )
Dxxxxxxxxxxxxxx_2, filestorage2  = 11.032 % , ( 500 GB )
Dxxxxxxxxxxxxxx_3, filestorage3 = 50.8622 % , ( 100 GB )

```

対象アカウントで使用している 3つの File Storage の使用率が確認できました。

この処理をジョブ化したり、Slack 連携したりしたいと思いつつ..


---

**** 追記 ************************************************************
 
スクリプトに Slack チャネルにPostする curl コマンドを追加しました。

```filestorage.sh
#!/bin/bash

## ibmcloud cli download
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh > /dev/null

## login

ibmcloud login --apikey "apikey" -r "region" -g "resource group" > /dev/null

## volume information

ibmcloud sl file volume-list --column username | grep -v username > FileStorage.txt

echo `date` > result.txt
echo "IBM Cloud FileStorage Usage: Username = % ,  ( total )" >> result.txt

## volume usage 

while read line
do
 used_b=`ibmcloud sl file volume-list -u "$line" --column bytes_used | grep -v bytes_used`
 capacity_gb=`ibmcloud sl file volume-list -u "$line"  --column capacity_gb | grep -v capacity_gb`
 capacity_b=`echo $(($capacity_gb*10000000)) `
 tag=`ibmcloud sl file volume-list -u "$line" --column notes | grep -v notes`
 result=`awk "BEGIN { print $used_b/$capacity_b }"`
 echo $line, $tag = $result % , "(" $capacity_gb GB ")" 
 done <FileStorage.txt >> result.txt

MESSAGE=`cat result.txt`

## post to slack 

curl -X POST --data-urlencode "payload={\"username\": \"FileStorageCheck\",  \"text\": \"IBM Cloud : FileStorage Usage: \\n ${MESSAGE}\", \"icon_emoji\": \":cloud:\"}" https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxXXXx/XXxxxxxxXXXXXXXX #(<- channel のWebhook)

rm FileStorage.txt
rm result.txt
```

・Slackでの出力イメージ

![FSCheck.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/58b3fbf9-e8b8-698c-32d3-38ad3e255ff8.png)


以上です。