はじめに
IBM CloudポータルのClassic Infrastructure画面にある「Network」→「Bandwidth」→「Summary」メニューを開くと、「Bandwidth Summary」というセクションが表示されます。
これは、Classic Infrastructure内のすべてのデバイスが使用した送信(Outgoing)および受信(Incoming)の帯域幅を一覧で確認できる機能です。
私の検証環境では、利用しているのは1台のBare Metal Serverのみのため、表示される情報は少なく寂しい印象ですが、多数のBare Metal ServerやVirtual Serverを利用している環境であれば、このページに長いリストが表示されるはずです。
また、帯域幅の使用量に応じてソートも可能なため、最も多く、または、少ない帯域を使用しているサーバーを簡単に特定することができます。
制限事項:
ただし、この画面にはExport機能が用意されていないため、データの取得はポータル上で目視に頼ることになります。
そのため、毎回データを確認するにはIBM Cloudポータルへのログインが必要であり、閲覧者には該当リソースに対するIAM権限が求められます。
また、Cloudポータルの外でデータを共有・活用するには不便な面もあります。
本日のテーマ:
今回は、ibmcloud CLIコマンドと簡単なBashスクリプトを組み合わせることで、
この画面に表示される帯域幅の情報を取得し、CSVファイルとして保存する方法をご紹介します。これにより、後続の分析や他システムとの連携が容易になります。
具体的には、今回作成するCSVファイルでは、主に以下の項目を収集対象としています:
- Hostname
- Public NICのOutgoing Bandwidth
- Public NICのAllotment(IncomingとOutgoing Bandwidthの合計)
分析
「Bandwidth Summary」のドキュメントがこちらです。
https://cloud.ibm.com/docs/bandwidth-metering?topic=bandwidth-metering-get-started-with-bandwidth-metering&interface=ui
書類によって、特に「Bandwidth Metering」に特化した ibmcloud のコマンドやAPIは存在しないことを確認しました。
そのため、「Summary」画面に表示されている情報は、実際には各Bare Metal Server(BMS)やVirtual Server(VS)ごとのデータを集約して構成されていると推測されます。
そこで次のステップとして、BMSおよびVSそれぞれに対して ibmcloud コマンドを実行し、出力情報を確認します。必要な項目をBashスクリプトで抽出し、CSVファイルとして書き出していきます。
BMS用のスクリプト
BMSに関しては、以下のコマンドで各サーバーの詳細情報を確認することができ、その出力の中に「Bandwidth」という項目が含まれています。
ibmcloud sl hardware list # to find the Server ID
ibmcloud sl hardware bandwidth <Server ID>
私の検証環境では、以下のような出力が得られます(一部の内容はマスキングしています)。赤枠で囲んだ部分が、Bandwidthに関する情報です。Bashの awk コマンドで見ると、Bandwidthという見出し行の次の行に、以下のようなフィールドが並んでいます:
- 3番目のフィールド:数字「0.542050」、Public Outgoing
- 4番目のフィールド:数字「406」、Public Allotment
以上を踏まえ、アカウント内のすべてのBMSについて、Hostname、Outgoing Bandwidth(GB)、AllotmentをCSV形式で保存するスクリプトは以下の通りです。
for i in $(ibmcloud sl hardware list --column id| awk '(NR>1)'); do ibmcloud sl hardware detail $i | awk '
/^Hostname/ {host=$2}
/^Bandwidth/ {getline; out=$3; allot=$4}
END {print "Hostname,OutGB,Allotment"; print host "," out "," allot}
' > result.csv; done
検証環境で実行した結果、以下のようになります。
そのCSVファイルをExcelで開くと、以下のように表示されます。
Virtual Server用のスクリプト
<To Do>
現在の検証環境ではVSI(Virtual Server Instance)が作成されていないため、BMSのように実際の確認はできず、以下のスクリプトはあくまで推測ベースのものとなっています。
今後、VSIを含む検証環境が整い次第、改めて動作確認およびスクリプトの修正を行う予定です。
for i in $(ibmcloud sl vs list --column id| awk '(NR>1)'); do ibmcloud sl vs detail $i | awk '
/^Hostname/ {host=$2}
/^Bandwidth/ {getline; out=$3; allot=$4}
END {print "Hostname,OutGB,Allotment"; print host "," out "," allot}
' > result.csv; done
スクリプトの実行環境について
このスクリプトを実行するには、ibmcloud CLIがインストールされており、awk コマンドが使用できる環境が必要です。
もしローカルPCでうまく動作しない場合は、IBM Cloud Shellの利用をおすすめします。
IBM Cloud Shellは、IBM Cloudポータルの右上にあるメニューから起動でき、ibmcloud login を再度実行する必要もありません。
以上、少しでも皆さまの参考になれば幸いです。