python如何实现统计osd-pg并导出到csv
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,python如何实现统计osd-pg并导出到csv,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分析当前集群各个OSD的pg分布情况
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
中央关于网络安全的规定
成都数据库招聘
gof3无法连接服务器
郑州能通网络技术有限公司
网络技术个人学业规划
黑龙江网络安全宣传周收官
查询数据库表的个数
怎样远程控制服务器
2018年金融行业网络安全
收缩数据库时恢复简单模式
网络安全礼品二维码
oracle数据库免费
文本数据库下载
酒店最好的服务器
国家积极开发 网络技术研发
青白江未土埠软件开发工作室
辽宁蓝牙软件开发
做数据库用什么工具
dhcp 备份服务器
网络安全监测装置针对服务器
常用开源数据库
富士康软件开发跳槽容易吗
网络安全工程师在哪考试
多台服务器虚拟化
网络安全监督管理6
台达服务器显示al011
绍兴工业网络技术口碑推荐
软件开发工具要点
亚州互联网科技有限公司
net软件开发技术