利用pg在pool以及osd的分布关系可以更好的分析pg的分布是否均匀
pool: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17| SUM ------------------------------------------------------------------------------------------------------- osd.0 29 9 13 12 10 14 9 14 7 13 10 9 11 18 355 329 305 49| 1216 osd.1 25 11 6 11 16 10 7 7 13 11 9 8 15 14 316 369 339 40| 1227 osd.2 23 10 12 10 16 13 8 11 14 10 10 11 14 23 344 339 340 37| 1245 osd.3 22 8 8 10 10 9 9 12 12 9 12 9 8 21 325 337 361 40| 1222 osd.4 13 15 11 10 12 9 14 6 13 10 10 14 13 25 344 358 358 39| 1274 osd.5 13 9 11 9 8 12 15 13 10 15 9 12 7 24 339 327 355 46| 1234 osd.6 25 13 10 10 11 7 8 10 8 8 13 6 9 23 322 337 349 46| 1215 osd.7 16 9 10 12 5 12 16 11 10 14 9 15 9 18 358 348 335 45| 1252 osd.8 26 12 15 12 8 10 10 12 9 6 14 12 10 26 369 328 330 42| 1251 ------------------------------------------------------------------------------------------------------- SUM: 192 96 96 96 96 96 96 96 96 96 96 96 96 192 3072 3072 3072 384 MAX: 29 15 15 12 16 14 16 14 14 15 14 15 15 26 369 369 361 49 MAX osd: .0 .4 .8 .0 .1 .0 .7 .0 .2 .5 .8 .7 .1 .8 .8 .1 .3 .0 osd Sum: 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 MIN osd: .5 .3 .1 .5 .7 .6 .1 .4 .0 .8 .1 .6 .5 .1 .1 .5 .0 .2
首先获取pg的query数据。利用Ansible模块获取数据。数据如下:
"ceph_facts": {
"update_pg_state": {
"osds": {
"0": {
"0": {
"pgsize": 29
},
"1": {
"pgsize": 9
},
"10": {
"pgsize": 10
},
"11": {
"pgsize": 9
...
"pgsum": 96
}
}
}
}
利用python分析该数据:
def ceph_pg_parser(stat_dic):
_str = ""
pg_stat = stat_dic.get('ceph_facts')
pool_pgs = pg_stat.get('update_pg_state',[]).get('pools',[])
osd_pgs = pg_stat.get('update_pg_state',[]).get('osds',[])
if len(pool_pgs) < 0 and len(osd_pgs) < 0: return
_str += "pool%-3s" % ":"
for pg in sorted(pool_pgs,key=int):
_str += "%5s" % pg
_str += "|%5s" % "SUM\n"
_str += "--------" + "-----" * len(pool_pgs) + "-----\n"
for osdid in sorted(osd_pgs,key=int):
_str += "osd.%-4s" % osdid
for pg in sorted(pool_pgs,key=int):
if pool_pgs[pg].has_key(osdid):
_str += "%5s" % pool_pgs[pg][osdid]['pgsize']
else:
_str += "%5s" % 0
_str += "|%5s\n" % osd_pgs[osdid]['pgsum']
_str += "--------" + "-----" * len(pool_pgs) + "-----\n"
_str += "SUM: "
for pg in sorted(pool_pgs,key=int):
_str += "%5s" % pool_pgs[pg]['pgsum']
_str += "\n"
_str += "MAX: "
for pg in sorted(pool_pgs,key=int):
_str += "%5s" % pool_pgs[pg]['max']
_str += "\n"
_str += "MAX osd:"
for pg in sorted(pool_pgs,key=int):
_str += "%5s" % ("." + str(pool_pgs[pg]['max_osd_id']))
_str += "\n"
_str += "OSD Sum:"
for pg in sorted(pool_pgs,key=int):
_str += "%5d" % (len(pool_pgs[pg])-int(5))
_str += "\n"
_str += "MIN osd:"
for pg in sorted(pool_pgs,key=int):
_str += "%5s" % ("." + str(pool_pgs[pg]['min_osd_id']))
_str += "\n"
return _str