URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

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

 昨日の続き。
 もうちょっと手を入れてみた。

 同じシステムで使っている他のストレージはRead/Write/TotalのそれぞれのIOPSを監視しているのですが、SolidFireでも同じ事をしたい。しかし、SolidFireの管理GUIではRead IOPSやWrite IOPSを確認できるのですが、REST APIから取れる値には見当たらない。
 ユーザーガイドを読んでいたら、以下のように記載されていました。

Input / Output Calculations:
The calculations and keys used for Input / Output are shown below.
・"Read IOPS": current (readOps) - previous (readOps)
・"Write IOPS": current (writeOps) - previous (writeOps)
・"Total IOPS": readOps + writeOps

 ようは"readOPS"と"writeOPS"を2回とって計算すればいいわけですね。
 昨日のスクリプトをちょっと変更。

#!/usr/bin/python import sys import time 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": "GetClusterStats", "params": {}, "id": "1" } delta = 30 tmpfile = '/var/tmp/sfiops.txt' def main(): data1 = get_clusterstats() time.sleep(delta) data2 = get_clusterstats() rio = (data2['result']['clusterStats']['readOps'] - data1['result']['clusterStats']['readOps']) / delta wio = (data2['result']['clusterStats']['writeOps'] - data1['result']['clusterStats']['writeOps']) / delta tio = rio + wio f = open(tmpfile, 'w') f.write('total,read,write\n' + str(tio) + ',' + str(rio) + ',' + str(wio)) #print('Total IOPS {}'.format(tio)) #print('Read IOPS {}'.format(rio)) #print('Write IOPS {}'.format(wio)) f.close() def get_clusterstats(): 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: return json.loads(response.getvalue()) if __name__ == "__main__": main() sys.exit(0)

 変数"delta"で値をとる間隔(秒)を設定しています。

 余談ですが、SolidFireは専用の仮想アプライアンスを通してメーカーに統計情報を送ることができます。その情報はActive IQというサイトで見ることができるので、SolidFireだけであれば自前の監視システムは要らないかもしれません。
 実際はストレージしかないシステムなんてほとんどないでしょうから、統合監視をするなら結局は作り込まないといけないということですね。


            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 (08/05-14:47)
RT @itmedia_news: 練馬区で大規模停電 企業や在宅勤務者に大ダメージ https://t.co/AYfYqrt9Fe
@umkn1020 (08/05-11:57)
みんな楽しんでそうで何より(^^;) : [ITmedia News] 「Windows 365」の無料試用枠、1日で予定数に達して終了(再開予定あり) https://t.co/Vrc0ny9jHp
@umkn1020 (08/04-23:17)
夏休みじゃないけど、7月以降は浪費のペースが加速しててちょっと反省 : 夏休みに使うお金 過去最低に - Yahoo!ニュース https://t.co/NwvAV2q6kj
@umkn1020 (08/04-13:39)
シャープマスクって今は抽選に当たると最大10箱購入できるのか。買わんけどw
@umkn1020 (08/04-10:04)
ここ最近、何回か佐川に集荷をお願いしているけど、伝票に「集荷前 要電話連絡」と記載されていても実際に連絡来たことないなぁ

エントリーリスト

カテゴリーリスト

タグ