URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

SolidFireのIOPSを取得するスクリプト

 昨年NetAppに買収されたSolidFireのストレージをお仕事で使ったので、その時にサクッと作ったやつ。
 SolidFireはWEBベースの管理ツールの他に標準でREST APIを備えているので、変な独自コマンドで扱うような製品より好感が持てます。データフォーマットもJSONなので、扱いが楽でいいです(というか、特別なことを何もしなくていい)。

 ストレージ全体のIOPSを取得するのが目的なので、APIリファレンスを参照して関連しそうなものを探しました。
 IOPSとして直接取れそうな値はこんなところかな。

GetClusterCapacityaverageIOPS00:00(UTC)を起点に24時間の平均IOPS
currentIOPS直近5秒のIOPS
peakIOPS00:00(UTC)を起点に24時間の最大IOPS
GetClusterStatsactualIOPS直近500ミリ秒のIOPS

 Read/WriteのIOPSは"readOPS"や"writeOPS"の差をとって計算すればいいのかと。

 とりあえず今回は上3つを取得することにしました。

#!/usr/bin/python import sys import json import pycurl from io import BytesIO sfuser = 'admin' sfpass = 'password' api_endpoint = 'https://192.168.0.1/json-rpc/8.0' api_params = {"method": "GetClusterCapacity", "params": {}, "id": "1" } tmpfile = '/var/tmp/sfiops.txt' def main(): response = BytesIO() conn = pycurl.Curl() conn.setopt(pycurl.URL, api_endpoint) conn.setopt(pycurl.SSL_VERIFYPEER, False) conn.setopt(pycurl.SSL_VERIFYHOST, False) conn.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC) conn.setopt(pycurl.USERPWD, "%s:%s" % (sfuser, sfpass)) conn.setopt(pycurl.POST, 1) conn.setopt(pycurl.HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json']) conn.setopt(pycurl.POSTFIELDS, json.dumps(api_params)) conn.setopt(pycurl.WRITEFUNCTION, response.write) conn.perform() http_code = conn.getinfo(pycurl.HTTP_CODE) if not http_code is 200: sys.exit(1) else: result = json.loads(response.getvalue()) f = open(tmpfile, 'w') f.write('current,average,peak\n' + str(result['result']['clusterCapacity']['currentIOPS']) + ',' + str(result['result']['clusterCapacity']['averageIOPS']) + ',' + str(result['result']['clusterCapacity']['peakIOPS'])) #print('Average IOPS {}'.format(result['result']['clusterCapacity']['averageIOPS'])) #print('Current IOPS {}'.format(result['result']['clusterCapacity']['currentIOPS'])) #print('Peak IOPS {}'.format(result['result']['clusterCapacity']['peakIOPS'])) f.close() if __name__ == "__main__": main() sys.exit(0)

 HTTPSリクエストはPycURLで送信しています。Pythonだと"requests"や"httplib"とかを使うことの方が多いでしょうかね。PycURLを使うことにしたのは細々したオプションの調整をしやすいことと、本番の実行環境に元から入っていた(追加で入れなくていい)からという理由です。後者の理由が大きいですね。
 最後のアウトプットがCSVなのも、他のものと合わせただけ。最終的にはZabbixで値を回収するんですが。
 RESTのURLには管理側のVIP(mvip)、APIバージョン(ストレージOSのバージョンと関連)を指定する。
 認証はBASIC認証。SSL証明書のチェックは無効化。
 SolidFireのAPIへのリクエストには、基本的にPOSTを使います。

 始めて使う製品なので、しばらくは集中して使い込んでいきたいな~。


    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

プロフィール

1020@管理人

都内を彷徨っているインフラエンジニアとかいう雑用係。いつだって眠い…。

最近のつぶやき

@umkn1020 (07/03-18:57)
RT @kamo_hiroyasu: 「人口の1割は複文が処理できないのだから、そのつもりで行動しろ」と助言することが時々あるのですが、「何もしなければ、42万人死亡する」を「42万人死亡する」と誤読して「外した」と煽る人がわらわらと湧いてきたことで、説得力が増しました。
@umkn1020 (07/03-18:49)
RT @taijijiji: 外資企業が日本市場でhiring難しいとは聞いていましたがこれほどとは。。日本人の転職の心理的ハードルの高さ、英語ポジションへの苦手意識が伺える。。英語は実質的な語学スキルよりも「やっていける自信がない」「怖い」「どうせ落とされる」というメンタリテ…
@umkn1020 (07/03-13:03)
RT @yuutosi_hiyuu: 声だして笑った https://t.co/EjqAUuT3z0
@umkn1020 (07/02-16:02)
Smart LifeでIFTTT使えなくなっていたのか…
@umkn1020 (07/01-17:23)
RT @rioriost: だーかーらー、HAクラスタをすぐ組もうとしない!w オンプレの発想をそのまま持ってくるんじゃなく、クラウドに合ったやり方を学びましょうよ。 できるよ、IaaSでHAクラスタも組めるよ。 でも、スタンバイノードのコストを払い続けるの、なんかおかし…

エントリーリスト

カテゴリーリスト

タグ