python如何实现统计osd-pg并导出到csv
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,python如何实现统计osd-pg并导出到csv,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分析当前集群各个OSD的pg分布情况
千家信息网最后更新 2026年10月31日python如何实现统计osd-pg并导出到csv
python如何实现统计osd-pg并导出到csv,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
分析当前集群各个OSD的pg分布情况
import jsonfrom collections import OrderedDictimport csvimport subprocessdef get_pg_dump(): cmd = "ceph pg dump --format=json" out = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) result = out.stdout.readlines()[1].split('\n')[0] return resultcsv_file = './demo.csv' #生成的csv文件路径pg_data = json.loads(get_pg_dump())pg_dict = {}osd_pg_dict = {}for i in pg_data: for j in pg_data['pg_stats']: pg_dict[j['pgid']] = j['up']pool_pg_total = {}osd_pg_num_dict = {}tmp_pool_list = {}tmp_osd_list = {}start_osd = 0start_pool_id = 0all_result = {}for i in pg_dict: pool_id = int(i.split('.')[0]) for osd_id in pg_dict[i]: tmp_pool_list[pool_id] = pool_id tmp_osd_list[osd_id] = osd_idnum_pool = max(tmp_pool_list.iterkeys(), key=lambda k: tmp_pool_list[k]) + 1num_osd = max(tmp_osd_list.iterkeys(), key=lambda k: tmp_osd_list[k]) + 1pool_totol_pg = [0] * num_poolmax_osd_list = [0] * num_poolmin_osd_list = [999] * num_poolmax_osdid_list = ['No_OSD'] * num_poolmin_osdid_list = ['No_OSD'] * num_poolave_osd_list = [0] * num_poolave_osd_list_result = [0] * num_poolmin_osd_per_list = [0] * num_poolmax_osd_per_list = [0] * num_poolfor i in range(0,num_osd): keyname = str(i) all_result[keyname] = [0] * num_poolfor i in pg_dict: pool_id = int(i.split('.')[0]) for osd_id in pg_dict[i]: tmp_keyname = str(osd_id) tmp_list = all_result[tmp_keyname] tmp_list[pool_id] = tmp_list[pool_id] +1for i in all_result: tmp_num = 0 for j in all_result[i]: if j < min_osd_list[tmp_num] and j != 0: min_osd_list[tmp_num] = j min_osdid_list[tmp_num] = i if j > max_osd_list[tmp_num]: max_osd_list[tmp_num] = j max_osdid_list[tmp_num] = i if j != 0: ave_osd_list[tmp_num] = ave_osd_list[tmp_num] + 1 pool_totol_pg[tmp_num] = pool_totol_pg[tmp_num] + j tmp_num = tmp_num + 1for i in range(0,len(ave_osd_list)): if ave_osd_list[i] != 0: ave_osd_list_result[i] = pool_totol_pg[i]/ave_osd_list[i]all_result = OrderedDict(sorted(all_result.items(), key=lambda t: int(t[0])))for i in range(0,num_pool): if max_osd_list[i] != 0: max_osd_per_list[i] = round(100*(max_osd_list[i]-ave_osd_list_result[i])/float(ave_osd_list_result[i]),2)for i in range(0, num_pool): if min_osd_list[i] != 999: min_osd_per_list[i] = round(100 * (min_osd_list[i] - ave_osd_list_result[i])/float(ave_osd_list_result[i]),2)with open(csv_file, 'w') as csvfile: pool_list = [] for i in range(0,num_pool): pool_list.append('pool-'+str(i)) fieldnames = ['osd_name'] + pool_list + ['total'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for i in all_result: tmp_dict = {'osd_name': i,'total':sum(all_result[i])} tmp_num = 0 for j in all_result[i]: keyname = 'pool-' + str(tmp_num) tmp_num = tmp_num + 1 tmp_dict[keyname] = j writer.writerow(tmp_dict) fieldnames = ['SUM'] + pool_totol_pg + [sum(pool_totol_pg)] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['AVE'] + ave_osd_list_result + [sum(ave_osd_list_result)] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['MAX'] + max_osd_list + [sum(max_osd_list)] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['MAX-OSD-ID'] + max_osdid_list writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['MAX-PER'] + max_osd_per_list + [sum(max_osd_per_list)] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['MIN'] + min_osd_list + [sum(min_osd_list)] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['MIN-OSD-ID'] + min_osdid_list writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() fieldnames = ['MIN-PER'] + min_osd_per_list + [sum(min_osd_per_list)] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader()print '---------------------------------------------------------------------------'for i in all_result: print i,all_result[i],sum(all_result[i])print '---------------------------------------------------------------------------'print 'SUM',pool_totol_pgprint 'MAX',max_osd_listprint 'MIN-OSD-ID',max_osdid_listprint 'MIN',min_osd_listprint 'MIN-OSD-ID',min_osdid_listprint 'AVE',ave_osd_list_resultprint 'MIN-PER',min_osd_per_listprint 'MAX-PER',max_osd_per_list关于python如何实现统计osd-pg并导出到csv问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
问题
统计
更多
分析
帮助
解答
易行
简单易行
内容
小伙
小伙伴
情况
文件
方法
知识
篇文章
行业
资讯
资讯频道
路径
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
互联网佳科技有限公司
互联网科技活动banner
联恩商钥互联网科技有限公司
卫星互联网科技股票
天速互联网络科技有限公司
中国的互联网科技企业的崛起
现代互联网科技股
黑科技闪耀互联网之光
江阴互联网智能科技产品进口
科技类公司包括互联网吗
互联网科技和法律行业
为客找房互联网科技公司怎么样
互联网第三次科技革命特征
互联网科技包装股
科技互联网行业投资研究
北京天晋互联网科技有限公司
三亚科技创新互联网基地
互联网科技大会大佬
互联网科技快速发展优美句子
礼当家互联网科技
赫美联合互联网科技
上海亿帐通互联网科技
互联网科技中介
苏州五指互联网络科技有限
互联网科技的全部知识
科技互联网的核心竞争力
互联网公司高科技产品
领航科技大厦互联网公司
福州德业互联网科技