Linux系统自动化运维(Python版)(微课版)-项目5_第1页
Linux系统自动化运维(Python版)(微课版)-项目5_第2页
Linux系统自动化运维(Python版)(微课版)-项目5_第3页
Linux系统自动化运维(Python版)(微课版)-项目5_第4页
Linux系统自动化运维(Python版)(微课版)-项目5_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux系统自动化运维(Python版)(微课版)工业和信息化精品系列教材项目5

运维数据记录与可视化人民邮电出版社能力CAPACITY要求了解运维数据记录的手段,学会使用CSV文件和SQLite数据库记录运维数据。了解数据可视化技术,熟悉Matplotlib库和Dash框架的基本用法。学会使用Matplotlib库编程绘制统计图表。学会使用Dash框架编程实现生成基于Web的可视化报表。任务5.2可视化运维数据任务5.1记录运维数据任务5.1记录运维数据任务说明01OPTION02OPTION03OPTION了解纯文本的CSV文件及其Python操作方法了解Excel文件及其Python操作方法学会编写通过CSV文件记录系统监控数据的Python程序04OPTION学会编写通过SQLite数据库记录系统监控数据的Python程序任务5.1记录运维数据相关知识5.1.1纯文本的CSV文件使用内置的csv模块处理CSV文件

csv.reader:以列表的形式返回读取的数据。

csv.writer:以列表的形式写入数据。

csv.DictReader:以字典的形式返回读取的数据。

csv.DictWriter:以字典的形式写入数据任务5.1记录运维数据相关知识5.1.1纯文本的CSV文件使用Pandas库处理CSV文件安装Pandas库pipinstallpandas读取CSV文件importpandasaspddf=pd.read_csv('CSV文件')使用to_csv()方法将DataFrame对象存储为CSV文件importpandasaspddf=pd.DataFrame(dict)#通过二维数组或字典创建DataFrame对象df.to_csv('CSV文件')任务5.1记录运维数据相关知识5.1.2功能强大的Excel文件Excel文件处理Excel操作库功能不足xlrd/xlwt读写.xls文件,可设置单元格格式不支持读写.xlsx文件openpyxl读写.xlsx文件,支持Excel大多数功能,可以设置单元格格式,支持图片、公式、图表等操作不支持读写.xls文件xlwings支持.xls和.xlsx格式,几乎支持Excel全部功能,可以调用Excel文件中的VBA程序需要运行环境中安装了Excel软件XlsxWriter创建.xlsx/.xls文件,可以设置单元格格式,支持图片、公式、图表等操作不能打开和修改已有的Excel文件任务5.1记录运维数据相关知识5.1.2功能强大的Excel文件openpyxl库的基本用法安装该库pipinstallopenpyxl遍历某工作表的示例程序importopenpyxlwb=openpyxl.load_workbook('xlsx文件')#根据路径读取.xlsx文件sheet=wb.worksheets[0]#获取第1个工作表#也可通过工作表名获取工作表:sheet=wb.get_sheet_by_name('工作表名')forrowinsheet:#遍历工作表中的行

forcellinrow:#遍历行中的单元格

print(cell.value,end="")#同一行,不换行

print()#遍历完一行,必须换行forcolinsheet.columns:#遍历工作表中的列

forcellincol:#遍历列中的单元格

print(cell.value,end='')print()任务5.1记录运维数据相关知识5.1.2功能强大的Excel文件使用openpyxl库创建Excel文件fromopenpyxlimportWorkbookwb=Workbook(write_only=True)#实例化Workbook类生成工作簿对象ws=wb.create_sheet()#创建一个工作表ws.append(['部门','服务器','得分'])#添加第一行数据rows=[#定义一个包含元组的列表(提供二维表数据)

('信息部','A01',95),('信息部','A02',78),('信息部','A03',92),('业务部','B01',82),('业务部','B02',66),('业务部','B03',88)]forrowinrows:#将上述二维表数据逐行添加到工作表

ws.append(row)wb.save("servertest.xlsx")任务5.1记录运维数据相关知识5.1.2功能强大的Excel文件使用openpyxl库创建Excel图表fromopenpyxlimportload_workbookfromopenpyxl.chartimportBarChart3D,Reference#BarChart3D为三维柱形图wb=load_workbook('servertest.xlsx')#打开.xlsx文件ws=wb.active#获取当前的工作表对象(第1个工作表)#选择图表的数据源,返回范围内的所有单元格data=Reference(ws,min_col=3,min_row=2,max_col=3,max_row=8)#选择要显示的x轴坐标标记内容x_label=Reference(ws,min_col=2,min_row=2,max_row=8)chart=BarChart3D() #创建BarChart3D对象(三维柱形图)chart.title="服务器性能测试" #给BarChart3D对象添加标题chart.add_data(data) #给BarChart3D对象添加数据源chart.set_categories(x_label) #给BarChart3D对象添加坐标轴标记ws.add_chart(chart,"E5") #在工作表上添加图表,并指定图表左上角锚定的单元格wb.save("server_bar3d.xlsx") #保存工作薄任务5.1记录运维数据相关知识5.1.2功能强大的Excel文件使用openpyxl库创建Excel图表任务5.1记录运维数据相关知识

5.1.3使用数据库存储件数据库简介SQL数据库MySQLMariaDBPostgreSQLSQLite时间序列数据库(TSDB)TimescaleDBKairosDBInfluxDBCrateDB任务5.1记录运维数据相关知识

5.1.3使用数据库存储件SQLite数据库的基本操作(1)导入sqlite3模块。importsqlite3(2)创建或打开数据库。con=sqlite3.connect("test.db")(3)操作数据库连接对象。

cur=conn.cursor()(4)使用数据库游标。方法功能execute()执行SQL语句executemany()执行多条SQL语句fetchone()从结果集中取出一条记录,并将游标指向下一条记录fetchmany()从结果集中一次性取出多条记录fetchall()从结果集中取出所有记录close()关闭游标任务5.1记录运维数据任务实现任务5.1.1使用CSV文件记录系统监控数据将监控数据记录到CSV文件┈┈#导入csv模块importcsv┈┈file_name="sysinfo.csv"#指定的CSV文件'''定义要执行的任务'''defmonjob():print('监测时间:%s'%datetime.now())data=gather_monitor_data()data['mon_time']=datetime.now().strftime('%Y-%m-%d%H:%M:%S')#创建标题列表

header_list=data.keys()任务5.1记录运维数据任务实现任务5.1.1使用CSV文件记录系统监控数据将监控数据记录到CSV文件#创建数据列表,列表的每个元素都是字典

data_list=[]data_list.append(data)csv_lines=0ifos.path.exists(file_name):csv_lines=len(open(file_name).readlines())#以追加方式打开文件。注意添加参数newline="",否则会在每两行数据之间都插入一空白行

withopen(file_name,mode="a",encoding="utf-8-sig",newline="")asf:#基于打开的文件创建csv.DictWriter对象,将标题列表作为参数传入

writer=csv.DictWriter(f,header_list)ifcsv_lines==0:#如果CSV文件没有内容,则写入标题行

#写入标题行

writer.writeheader()#写入数据行

writer.writerows(data_list)if__name__=='__main__’:┈┈任务5.1记录运维数据任务实现任务5.1.1使用CSV文件记录系统监控数据将监控数据记录到CSV文件任务5.1记录运维数据任务实现任务5.1.2使用SQLite数据库记录系统监控数据使用SQLite数据库记录数据┈┈importsqlite3#导入sqlite3模块┈┈db_file="sys_mon.db3"'''定义数据库表'''defdb_define():#连接数据库

con=sqlite3.connect(db_file,timeout=10,check_same_thread=False)#创建游标

cur=con.cursor()#创建表(如果存在该表就不创建)

cur.execute('CREATETABLEIFNOTEXISTSsysinfo(idINTEGERPRIMARYKEY,cpu_countINT,cpu_percentREAL,mem_totalTEXT,mem_usedTEXT,mem_freeTEXT,mem_percentREAL,disk_totalTEXT,disk_usedTEXT,disk_freeTEXT,disk_percentREAL,disk_readTEXT,disk_writeTEXT,net_sentTEXT,net_recvTEXT,mon_timeTEXT)')mit()cur.close()con.close()任务5.1记录运维数据任务实现任务5.1.2使用SQLite数据库记录系统监控数据使用SQLite数据库记录数据'''定义要执行的任务'''defmonjob():print('监测时间:%s'%datetime.now())data=gather_monitor_data()data['mon_time']=datetime.now().strftime('%Y-%m-%d%H:%M:%S')field_names=','.join(data.keys()) #从字典数据中获取字段名并转换为字符串

field_values='' #定义字段值变量

#从字典数据中获取字段值并连接成字符串

forindex,iteminenumerate(data.values()):ifisinstance(item,str):item='\''+item+'\''else:item=str(item)ifindex>0:field_values=field_values+","+itemelse:field_values=field_values+item#插入记录语句

statement="INSERTINTOsysinfo("+field_names+")VALUES("+field_values+")"con=sqlite3.connect(db_file,timeout=10,check_same_thread=False)cur=con.cursor()cur.execute(statement)#执行插入操作

mit()cur.close()con.close()if__name__=='__main__':db_define()#创建数据库和表#以下代码省略任务5.1记录运维数据任务实现任务5.1.2使用SQLite数据库记录系统监控数据使用SQLite数据库记录数据'''定义要执行的任务'''defmonjob():print('监测时间:%s'%datetime.now())data=gather_monitor_data()data['mon_time']=datetime.now().strftime('%Y-%m-%d%H:%M:%S')field_names=','.join(data.keys()) #从字典数据中获取字段名并转换为字符串

field_values='' #定义字段值变量

#从字典数据中获取字段值并连接成字符串

forindex,iteminenumerate(data.values()):ifisinstance(item,str):item='\''+item+'\''else:item=str(item)ifindex>0:field_values=field_values+","+itemelse:field_values=field_values+item任务5.1记录运维数据任务实现任务5.1.2使用SQLite数据库记录系统监控数据使用SQLite数据库记录数据#插入记录语句

statement="INSERTINTOsysinfo("+field_names+")VALUES("+field_values+")"con=sqlite3.connect(db_file,timeout=10,check_same_thread=False)cur=con.cursor()cur.execute(statement)#执行插入操作

mit()cur.close()con.close()if__name__=='__main__':db_define()#创建数据库和表┈┈任务5.1记录运维数据任务实现任务5.1.2使用SQLite数据库记录系统监控数据读取记录到SQlite数据库的监控数据importsqlite3db_file="sys_mon.db3"con=sqlite3.connect(db_file,timeout=10,check_same_thread=False)cur=con.cursor()#执行查询语句cur.execute('SELECT*FROMsysinfo')values=cur.fetchall()cur.close()con.close()#显示所有记录forrecinvalues:print(rec)任务5.1记录运维数据任务实现任务5.1.2使用SQLite数据库记录系统监控数据读取记录到SQlite数据库的监控数据任务5.2可视化运维数据任务5.1记录运维数据任务5.2可视化运维数据任务说明01OPTION02OPTION03OPTION了解Matplotlib库及其基本用法了解Dash框架及其基本用法学会使用Matplotlib库编程绘制图表04OPTION学会基于Dash框架实现Web可视化数据仪表盘任务5.2可视化运维数据相关知识5.2.1经典的Python绘图库Matplotlib安装Matplotlib库pipinstallmatplotlib绘制简单的图形#使用import导入Pyplot模块并设置一个别名pltimportmatplotlib.pyplotaspltx=[0,5]y=[0,10]plt.plot(x,y)plt.xlabel("x-label")plt.ylabel("y-label")plt.show()任务5.2可视化运维数据相关知识5.2.1经典的Python绘图库Matplotlib绘制多子图importmatplotlib.pyplotasplt#导入NumPy库importnumpyasnp#第1个子图x1=np.array([0,1,2,3,4,5,6])y1=np.random.randint(low=1,high=100,size=7).tolist()#产生随机数plt.subplot(1,2,1)plt.bar(x1,y1)#绘制柱形图plt.title("Graph1")#第2个子图x2=np.array([1,2,3,4])y2=np.array([1,4,9,16])plt.subplot(1,2,2)plt.scatter(x2,y2)#绘制散点图plt.title("Graph2")plt.suptitle("Testsubplot")#总标题plt.show()任务5.2可视化运维数据相关知识5.2.2高效、简洁的Web可视化框架DashDash简介编程简单。快速实现数据可视化交互设计。具有丰富的应用场景。安装Dash

pipinstalldashpipinstallpandas任务5.2可视化运维数据相关知识5.2.2高效、简洁的Web可视化框架Dash编写Dash程序(布局定义应用程序的外观)#导入所需的库,每个库都为程序提供了一个构建模块fromdashimportDash,html,dccimportplotly.expressaspximportpandasaspd#创建Dash类的对象,以初始化程序app=Dash(__name__)#预设样式(字典形式)colors={'background':'#111111','text':'#7FDBFF'}#定义数据来源,DataFrame是一个表格型的数据结构df=pd.DataFrame({"服务器":["A01","A02","A03","B01","B02","B03"],"得分":[95,78,92,82,66,88],"部门":["信息部","信息部","信息部","业务部","业务部","业务部"]})任务5.2可视化运维数据相关知识5.2.2高效、简洁的Web可视化框架Dash编写Dash程序(布局定义应用程序的外观)#绘制柱形图fig=px.bar(df,x="服务器",y="得分",color="部门",barmode="stack")#更改柱形图样式fig.update_layout(┈┈)#app对象的layout属性使用由Dash组件构成的树结构定义程序的外观app.layout=html.Div(style={'backgroundColor':colors['background']},#全局样式(字典形式)

┈┈if__name__=='__main__':app.run_server(debug=True)#运行Dash程序任务5.2可视化运维数据相关知识5.2.2高效、简洁的Web可视化框架Dash为Dash程序提供交互性#导入所需的库,每个库都为程序提供了一个构建模块fromdashimportDash,dcc,html,Input,Outputapp=Dash(__name__)#定义布局app.layout=html.Div([┈┈])score_dict={'A01':95,'A02':78,'B01':82,'B02':66}#装饰器@app.callback(Output(component_id='score',component_property='children'),Input(component_id='server',component_property='value'))defgetScore(server):#回调函数

returnscore_dict[server]if__name__=='__main__':app.run_server(debug=True)任务5.2可视化运维数据任务实现任务5.2.1基于Matplotlib库生成系统监控数据统计图表importmatplotlib.pyplotaspltimportpandasaspddf=pd.read_csv('sysinfo.csv')#读取CSV文件产生DataFrame对象#从DataFrame对象获取所需的序列x1=df['mon_time'].apply(lambdax:x.split('')[1])#使用匿名函数处理日期格式y1=df['cpu_percent']y2=df['mem_percent']y3=df['disk_percent']plt.rcParams['font.family']=['ARPLUKaiCN']#设置字体解决中文显示问题plt.title('系统监控数据',fontsize='18')#设置图表标题内容及其字体大小plt.plot(x1,y1,label='CPU',color='r',marker='8')#红色,八角形标记plt.plot(x1,y2,label='内存',color='g',marker='o')#绿色,实心圆标记plt.plot(x1,y3,label='磁盘',color='b',marker='*')#蓝色,星号标记plt.grid(axis='y')#显示网格关闭y轴plt.ylabel('使用率')plt.legend(['CPU','内存','磁盘'])#设置图例plt.show()任务5.2可视化运维数据任务实现任务5.2.1基于Matplotlib库生成系统监控数据统计图表任务5.2可视化运维数据任务实现任务5.2.2通过Dash框架实现系统监控数据仪表盘了解Dash多页面应用(1)为每个页面创建一个.py文件作为Dash页面文件,并将其置于pages目录中。(2)在每个页面文件中添加如下Dash页面注册语句。dash.register_page(__name__)(3)在pages目录的上级目录中创建主程序文件。其中通过以下语句声明Dash应用。app=Dash(__name__,use_pages=True)任务5.2可视化运维数据任务实现任务5.2.2通过Dash框架实现系统监控数据仪表盘编写Dash程序(1)在当前项目目录下创建pages子目录。(2)在pages子目录中创建名为mon_table.py的Dash页面文件。importdashfromdashimporthtmlimportpandasaspddash.register_page(__name__,title='显示表格',path='/')#指定数据来源df=pd.read_csv('sysinfo.csv')#定义生成Web表格的函数defgenerate_table(dataframe,max_rows=10):returnhtml.Table([┈┈])#布局定义layout=html.Div([html.H4(children='系统监控数据表格'),generate_table(df)#重用组件])任务5.2可视化运维数据任务实现任务5.2.2通过Dash框架实现系统监控数据仪表盘编写Dash程序(3)在pages子目录中创建名为mon_scatter.py的Dash页面文件。importdashfromdashimporthtml,dccimportplotly.graph_objsasgofromplotly.subplotsimportmake_subplotsimportpandasaspddash.register_page(__name__,title='查看散点图')df=pd.read_csv('sysinfo.csv')#生成子图画布对象fig=make_subplots(specs=[[{"secondary_y":True}]])#添加轨迹(图表)fig.add_trace(go.Scatter(x=df["mon_time"],y=df["cpu_percent"],name="CPU"),secondary_y=False,)fig.add_trace(go.Scatter(x=df["mon_time"],y=df["mem_percent"],name="内存"),secondary_y=True

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论