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

付费下载

下载本文档

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

文档简介

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

记录日志与发送邮件人民邮电出版社能力CAPACITY要求学会使用logging模块编程实现异常信息的日志记录。学会使用logging模块编程实现运维业务信息的日志记录。学会使用Python内置模块编程实现邮件通知功能。学会使用Python内置模块编程发送运维报告邮件。任务4.2发送邮件任务4.1记录日志任务4.1记录日志任务说明01OPTION02OPTION03OPTION了解logging模块及其基本用法了解logging模块的组件和类学会在Python运维程序中使用日志跟踪程序异常和错误04OPTION学会在Python运维程序中使用日志记录业务运行数据任务4.1记录日志相关知识4.1.1为什么要使用logging模块所有日志记录具有统一的格式,便于后续处理。具有灵活的配置和格式化功能,如配置日志保存路径、记录运行时间等。可以设置不同的日志级别,分级控制日志的记录和输出。支持日志文件回滚。便于应用程序将日志记录与来自第三方库的消息整合。任务4.1记录日志相关知识4.1.2logging模块的日志级别日志级别数值函数应用场景CRITICAL50logging.critical()出现严重错误,程序已经不能继续运行,系统即将崩溃ERROR40logging.error()出现严重问题,程序不能正常运行WARNING30logging.warning()虽然程序还在正常运行,但可能会发生错误INFO20()用于记录程序中正常运行的一些信息,通常只记录关键节点信息DEBUG10logging.debug()最低级别,常用于调试、查看详细信息、诊断问题等任务4.1记录日志相关知识4.1.3logging模块的基本用法模块级函数logging.debug()——记录级别为DEBUG的日志消息()——记录级别为INFO的日志消息logging.log(level,msg,*args,**kwargs)——记录指定级别的日志消息logging.basicConfig(**kwargs)——配置logging模块,指定logging模块的默认操作规则任务4.1记录日志相关知识4.1.3logging模块的基本用法日志记录示例>>>importlogging#导入logging模块>>>logging.debug('这是调试信息!')>>>('这是普通信息!')>>>logging.warning('这是警告信息!')WARNING:root:这是警告信息!>>>logging.error('这是错误!')ERROR:root:这是错误!>>>logging.critical('这是严重错误!!')CRITICAL:root:这是严重错误!!任务4.1记录日志相关知识4.1.3logging模块的基本用法定制日志记录importlogginglogging.basicConfig(level=logging.DEBUG,filename='test_tofile.log',datefmt='%Y/%m/%d%H:%M:%S',format='%(asctime)s-%(name)s-%(levelname)s-%(message)s-%(module)s-%(lineno)d')logging.debug('此消息应记录到日志文件')('同样记录到日志文件')logging.warning('也应当记录到日志文件')logging.error('这是模拟的错误消息')任务4.1记录日志相关知识4.1.4logging模块的类logging模块的日志系统组件日志组件类功能记录器Logger创建日志记录的对象,为程序提供使用接口处理器Handler将由记录器创建的日志记录发送到目的地输出,目的地可以是sys.stdout和文件等。一个记录器可以设置多个处理器,以便将同一条日志记录输出到不同的位置过滤器Filter提供更细粒度的工具来确定要输出哪些日志记录。每个处理器都可以设置自己的过滤器来实现日志过滤,保留实际项目中需要的日志格式化器Formatter决定日志记录的最终输出格式,可以实现同一条日志以不同的格式输出到不同的地方任务4.1记录日志相关知识4.1.4logging模块的类记录器与Logger类功能向程序提供运行时记录消息的方法。根据日志消息级别或过滤器确定要对哪些日志消息进行操作。将相关的日志消息传递给处理器。常用配置方法

setLevel():设置要处理的日志消息级别

addHandler()和removeHandler():在记录器中添加和删除处理器

addFilter()和removeFilter():在记录器中添加和删除过滤器创建日志消息

debug()、info()等:创建对应级别的日志消息

exception():创建类似使用error()方法创建的日志消息,并同时转储堆栈跟踪

log():将日志级别作为显式参数任务4.1记录日志相关知识4.1.4logging模块的类处理器与Handler类功能将所有日志消息发送到指定的日志文件。将所有错误或更高级别的日志消息发送到标准输出。将所有关键消息发送到指定的电子邮件地址。常用配置方法

setLevel():指定被分派的最低日志级别。

setFormatter():选择要使用的格式化器。

addFilter()和removeFilter():为处理器配置和移除过滤器。任务4.1记录日志相关知识4.1.4logging模块的类日志事件信息流任务4.1记录日志相关知识4.1.4logging模块的类使用类实现日志记录的步骤(1)创建日志记录的对象(2)配置记录器(3)记录日志任务4.1记录日志相关知识4.1.5日志记录的配置使用日志配置文件importlogging.configlogging.config.fileConfig('logging.conf')使用字典配置信息withopen("YAML文件","r")asf:config=yaml.load(f)logging.config.dictConfig(config)任务4.1记录日志任务实现任务4.1.1将日志消息同时输出到屏幕和文件importlogging#创建记录器,将其命名为Testlogger=logging.getLogger("Test")#默认日志级别为WARNING,这里改为DEBUGlogger.setLevel(logging.DEBUG)#创建FileHandler处理器,将日志消息输出到文件中,并设置特定的消息格式和日期格式logfile=logging.FileHandler(filename='mylog.log',mode='w')formatter1=logging.Formatter(fmt='%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s%(message)s',datefmt='%a,%d%b%Y%H:%M:%S')logfile.setFormatter(formatter1)#创建StreamHandler处理器,将WARNING或更高级别的日志消息输出到控制台,设置特定消息格式console=logging.StreamHandler()console.setLevel(logging.WARNING)formatter2=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')console.setFormatter(formatter2)任务4.1记录日志任务实现任务4.1.1将日志消息同时输出到屏幕和文件#将处理器添加到记录器logger.addHandler(logfile)logger.addHandler(console)#输出不同级别的日志消息logger.debug('debug,调试信息')('info,一般信息')logger.warning('warning,警告信息')logger.error('error,错误信息')logger.critical('critical,严重的错误信息')任务4.1记录日志任务实现任务4.1.2使用日志文件记录异常处理信息importlogging#创建记录器logger=logging.getLogger(__name__)logger.setLevel(level=logging.DEBUG)#创建格式化器formatter=logging.Formatter('%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s-%(message)s')#创建FileHandler处理器,将日志消息输出到文件file_handler=logging.FileHandler('traceback.log')file_handler.setFormatter(formatter)logger.addHandler(file_handler)#测试异常处理的函数deffunc(num1,num2):

if__name__=='__main__':func(2,0)#除以0触发异常任务4.1记录日志任务实现任务4.1.1将日志消息同时输出到屏幕和文件读取INI文件importconfigparserconfig=configparser.ConfigParser()#实例化ConfigParser类config.read("example1.ini")#读取配置文件print("读取所有选项值:")#遍历整个字典forsectioninconfig.sections():#首先读取节

print(f"节:[{section}]")forkeyinconfig[section]:#读取每个节的选项和值

print(f"选项:{key},值:{config[section][key]}")#输出选项和值print("读取个别选项值:")#从字典中读取指定元素print(f"版本:{config['Global']['version']}")print(f"发行商:{config['Preferences']['app.distributor']}")任务4.1记录日志任务实现任务4.1.3使用日志记录系统监控异常信息#从sysinfo_bypsutil.py文件导入report()和gather_monitor_data()函数fromsysinfo_bypsutilimportreportfromsysinfo_bypsutilimportgather_monitor_dataimportlogging#日志文件基本设置logging.basicConfig(format='%(asctime)s%(message)s',level=logging.WARNING,filename='sys_overload.log')'''定义要执行的任务'''defmonjob():print('监测时间:%s'%datetime.now())report()logging.warning('执行一次监测!')data=gather_monitor_data()threshold=80#过载阈值(百分比)

ifdata['cpu_percent']>threshold:logging.warning(f"CPU过载!使用率达{data['cpu_percent']}%")任务4.2发送邮件任务4.1记录日志任务4.2发送邮件任务说明01OPTION02OPTION03OPTION了解smtplib模块及其基本用法了解email模块及其基本用法掌握通过邮件发送通知信息的程序编写方法04OPTION掌握发送HTML格式邮件的程序编写方法任务4.2发送邮件相关知识4.2.1smtplib模块及其基本用法创建SMTP对象importsmtplibsmtpObj=smtplib.SMTP(host='',port=0,local_hostname=None)SMTP对象的发送邮件方法SMTP.sendmail(from_addr,to_addrs,msg)任务4.2发送邮件相关知识4.2.1smtplib模块及其基本用法使用smtplib模块发送邮件的基本步骤(1)创建SMTP对象并连接SMTP服务器(2)使用邮件账号登录SMTP服务器(3)调用SMTP对象中的方法发送邮件到收件人地址任务4.2发送邮件相关知识4.2.2email模块及其基本用法构造纯文本邮件fromemail.messageimportEmailMessagemsg=EmailMessage()#创建EmailMessage对象msg['Subject']='邮件主题'msg['From']='发件人地址'msg['To']='收件人地址'msg.set_content('邮件正文')任务4.2发送邮件相关知识4.2.2email模块及其基本用法构造带附件的邮件importmimetypesfromemail.messageimportEmailMessage'''定义获取指定文件的MIME类型的函数'''defget_mimetype(path):ctype,encoding=mimetypes.guess_type(path)ifctypeisNoneorencodingisnotNone:ctype='application/octet-stream'maintype,subtype=ctype.split('/',1)returndict(maintype=maintype,subtype=subtype)#创建EmailMessage对象并设置邮件基本信息msg=EmailMessage()msg['Subject']='邮件主题'msg['From']='发件人地址'msg['To']='收件人地址'msg.set_content('邮件正文')任务4.2发送邮件相关知识4.2.2email模块及其基本用法构造带附件的邮件#将图片文件作为附件添加到邮件中file_name='test_atta.png'#要作为附件的图片文件file_type=get_mimetype(file_name)#获取文件的MIME类型withopen(file_name,'rb')asfp:msg.add_attachment(fp.read(),maintype=file_type["maintype"],subtype=file_type["subtype"],filename=file_name)#将压缩包作为附件添加到邮件中file_name='test_atta.zip'#要作为附件的压缩包文件file_type=get_mimetype(file_name)withopen(file_name,'rb')asfp:msg.add_attachment(fp.read(),maintype=file_type["maintype"],subtype=file_type["subtype"],filename=file_name)#最后发送该邮件,代码省略任务4.2发送邮件任务实现任务4.2.1通过邮件发送报警通知配置邮箱使其支持第三方邮件客户端任务4.2发送邮件任务实现任务4.2.1通过邮件发送报警通知编写一个纯文本邮件发送程序importsmtplibfromemail.messageimportEmailMessagemail_host=""#设置服务器mail_user="XXX"#邮箱的用户名(不是完整的邮箱地址)mail_pass="UDYRCXISROAHNQAY"#邮箱授权密码sender="XXX@163.com"#发件人地址receivers=["XXX@163.com","YYY@"]#收件人地址列表,可以有多个地址任务4.2发送邮件任务实现任务4.2.1通过邮件发送报警通知编写一个纯文本邮件发送程序'''发送文本邮件的函数'''defsend_mail(subject,content):msg=EmailMessage()msg["Subject"]=subject#邮件主题

msg["From"]=sender#发件人

msg["To"]=",".join(receivers)#收件人列表

msg.set_content(content)#邮件体(正文)

s=smtplib.SMTP()#创建SMTP对象

try:s.connect(mail_host,25)#建立SMTP连接

s.login(mail_user,mail_pass)#提供登录账号和密码

s.sendmail(sender,receivers,msg.as_string())#发送邮件

print("邮件发送成功!")exceptsmtplib.SMTPExceptionase:print(f"发送失败,错误原因:{e}")finally:s.quit()任务4.2发送邮件任务实现任务4.2.1通过邮件发送报警通知编写日志监控的邮件发送报警程序fromemail_sendimportsend_textmail#从email_send模块中导入send_textmail()函数importsocket…defmonjob():print('监测时间:%s'%datetime.now())report()logging.warning('执行一次监测!')data=gather_monitor_data()threshold=80#过载阈值(百分比)

alert_text=""

任务4.2发送邮件任务实现任务4.2.1通过邮件发送报警通知编写日志监控的邮件发送报警程序ifdata['cpu_percent']>threshold:logging.warning(f"CPU过载!使用率达{data['cpu_percent']}%")alert_text+=f"CPU过载!使用率达{data['cpu_percent']}%"ifdata['mem_percent']>threshold:loggi

温馨提示

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

评论

0/150

提交评论