版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Linux系統(tǒng)自動化運維(Python版)(微課版)工業(yè)和信息化精品系列教材項目4
記錄日志與發(fā)送郵件人民郵電出版社能力CAPACITY要求學(xué)會使用logging模塊編程實現(xiàn)異常信息的日志記錄。學(xué)會使用logging模塊編程實現(xiàn)運維業(yè)務(wù)信息的日志記錄。學(xué)會使用Python內(nèi)置模塊編程實現(xiàn)郵件通知功能。學(xué)會使用Python內(nèi)置模塊編程發(fā)送運維報告郵件。任務(wù)4.2發(fā)送郵件任務(wù)4.1記錄日志任務(wù)4.1記錄日志任務(wù)說明01OPTION02OPTION03OPTION了解logging模塊及其基本用法了解logging模塊的組件和類學(xué)會在Python運維程序中使用日志跟蹤程序異常和錯誤04OPTION學(xué)會在Python運維程序中使用日志記錄業(yè)務(wù)運行數(shù)據(jù)任務(wù)4.1記錄日志相關(guān)知識4.1.1為什么要使用logging模塊所有日志記錄具有統(tǒng)一的格式,便于后續(xù)處理。具有靈活的配置和格式化功能,如配置日志保存路徑、記錄運行時間等??梢栽O(shè)置不同的日志級別,分級控制日志的記錄和輸出。支持日志文件回滾。便于應(yīng)用程序?qū)⑷罩居涗浥c來自第三方庫的消息整合。任務(wù)4.1記錄日志相關(guān)知識4.1.2logging模塊的日志級別日志級別數(shù)值函數(shù)應(yīng)用場景CRITICAL50logging.critical()出現(xiàn)嚴(yán)重錯誤,程序已經(jīng)不能繼續(xù)運行,系統(tǒng)即將崩潰ERROR40logging.error()出現(xiàn)嚴(yán)重問題,程序不能正常運行WARNING30logging.warning()雖然程序還在正常運行,但可能會發(fā)生錯誤INFO20()用于記錄程序中正常運行的一些信息,通常只記錄關(guān)鍵節(jié)點信息DEBUG10logging.debug()最低級別,常用于調(diào)試、查看詳細(xì)信息、診斷問題等任務(wù)4.1記錄日志相關(guān)知識4.1.3logging模塊的基本用法模塊級函數(shù)logging.debug()——記錄級別為DEBUG的日志消息()——記錄級別為INFO的日志消息logging.log(level,msg,*args,**kwargs)——記錄指定級別的日志消息logging.basicConfig(**kwargs)——配置logging模塊,指定logging模塊的默認(rèn)操作規(guī)則任務(wù)4.1記錄日志相關(guān)知識4.1.3logging模塊的基本用法日志記錄示例>>>importlogging#導(dǎo)入logging模塊>>>logging.debug('這是調(diào)試信息!')>>>('這是普通信息!')>>>logging.warning('這是警告信息!')WARNING:root:這是警告信息!>>>logging.error('這是錯誤!')ERROR:root:這是錯誤!>>>logging.critical('這是嚴(yán)重錯誤!!')CRITICAL:root:這是嚴(yán)重錯誤!!任務(wù)4.1記錄日志相關(guān)知識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('此消息應(yīng)記錄到日志文件')('同樣記錄到日志文件')logging.warning('也應(yīng)當(dāng)記錄到日志文件')logging.error('這是模擬的錯誤消息')任務(wù)4.1記錄日志相關(guān)知識4.1.4logging模塊的類logging模塊的日志系統(tǒng)組件日志組件類功能記錄器Logger創(chuàng)建日志記錄的對象,為程序提供使用接口處理器Handler將由記錄器創(chuàng)建的日志記錄發(fā)送到目的地輸出,目的地可以是sys.stdout和文件等。一個記錄器可以設(shè)置多個處理器,以便將同一條日志記錄輸出到不同的位置過濾器Filter提供更細(xì)粒度的工具來確定要輸出哪些日志記錄。每個處理器都可以設(shè)置自己的過濾器來實現(xiàn)日志過濾,保留實際項目中需要的日志格式化器Formatter決定日志記錄的最終輸出格式,可以實現(xiàn)同一條日志以不同的格式輸出到不同的地方任務(wù)4.1記錄日志相關(guān)知識4.1.4logging模塊的類記錄器與Logger類功能向程序提供運行時記錄消息的方法。根據(jù)日志消息級別或過濾器確定要對哪些日志消息進(jìn)行操作。將相關(guān)的日志消息傳遞給處理器。常用配置方法
setLevel():設(shè)置要處理的日志消息級別
addHandler()和removeHandler():在記錄器中添加和刪除處理器
addFilter()和removeFilter():在記錄器中添加和刪除過濾器創(chuàng)建日志消息
debug()、info()等:創(chuàng)建對應(yīng)級別的日志消息
exception():創(chuàng)建類似使用error()方法創(chuàng)建的日志消息,并同時轉(zhuǎn)儲堆棧跟蹤
log():將日志級別作為顯式參數(shù)任務(wù)4.1記錄日志相關(guān)知識4.1.4logging模塊的類處理器與Handler類功能將所有日志消息發(fā)送到指定的日志文件。將所有錯誤或更高級別的日志消息發(fā)送到標(biāo)準(zhǔn)輸出。將所有關(guān)鍵消息發(fā)送到指定的電子郵件地址。常用配置方法
setLevel():指定被分派的最低日志級別。
setFormatter():選擇要使用的格式化器。
addFilter()和removeFilter():為處理器配置和移除過濾器。任務(wù)4.1記錄日志相關(guān)知識4.1.4logging模塊的類日志事件信息流任務(wù)4.1記錄日志相關(guān)知識4.1.4logging模塊的類使用類實現(xiàn)日志記錄的步驟(1)創(chuàng)建日志記錄的對象(2)配置記錄器(3)記錄日志任務(wù)4.1記錄日志相關(guān)知識4.1.5日志記錄的配置使用日志配置文件importlogging.configlogging.config.fileConfig('logging.conf')使用字典配置信息withopen("YAML文件","r")asf:config=yaml.load(f)logging.config.dictConfig(config)任務(wù)4.1記錄日志任務(wù)實現(xiàn)任務(wù)4.1.1將日志消息同時輸出到屏幕和文件importlogging#創(chuàng)建記錄器,將其命名為Testlogger=logging.getLogger("Test")#默認(rèn)日志級別為WARNING,這里改為DEBUGlogger.setLevel(logging.DEBUG)#創(chuàng)建FileHandler處理器,將日志消息輸出到文件中,并設(shè)置特定的消息格式和日期格式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)#創(chuàng)建StreamHandler處理器,將WARNING或更高級別的日志消息輸出到控制臺,設(shè)置特定消息格式console=logging.StreamHandler()console.setLevel(logging.WARNING)formatter2=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')console.setFormatter(formatter2)任務(wù)4.1記錄日志任務(wù)實現(xiàn)任務(wù)4.1.1將日志消息同時輸出到屏幕和文件#將處理器添加到記錄器logger.addHandler(logfile)logger.addHandler(console)#輸出不同級別的日志消息logger.debug('debug,調(diào)試信息')('info,一般信息')logger.warning('warning,警告信息')logger.error('error,錯誤信息')logger.critical('critical,嚴(yán)重的錯誤信息')任務(wù)4.1記錄日志任務(wù)實現(xiàn)任務(wù)4.1.2使用日志文件記錄異常處理信息importlogging#創(chuàng)建記錄器logger=logging.getLogger(__name__)logger.setLevel(level=logging.DEBUG)#創(chuàng)建格式化器formatter=logging.Formatter('%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s-%(message)s')#創(chuàng)建FileHandler處理器,將日志消息輸出到文件file_handler=logging.FileHandler('traceback.log')file_handler.setFormatter(formatter)logger.addHandler(file_handler)#測試異常處理的函數(shù)deffunc(num1,num2):
if__name__=='__main__':func(2,0)#除以0觸發(fā)異常任務(wù)4.1記錄日志任務(wù)實現(xiàn)任務(wù)4.1.1將日志消息同時輸出到屏幕和文件讀取INI文件importconfigparserconfig=configparser.ConfigParser()#實例化ConfigParser類config.read("example1.ini")#讀取配置文件print("讀取所有選項值:")#遍歷整個字典forsectioninconfig.sections():#首先讀取節(jié)
print(f"節(jié):[{section}]")forkeyinconfig[section]:#讀取每個節(jié)的選項和值
print(f"選項:{key},值:{config[section][key]}")#輸出選項和值print("讀取個別選項值:")#從字典中讀取指定元素print(f"版本:{config['Global']['version']}")print(f"發(fā)行商:{config['Preferences']['app.distributor']}")任務(wù)4.1記錄日志任務(wù)實現(xiàn)任務(wù)4.1.3使用日志記錄系統(tǒng)監(jiān)控異常信息#從sysinfo_bypsutil.py文件導(dǎo)入report()和gather_monitor_data()函數(shù)fromsysinfo_bypsutilimportreportfromsysinfo_bypsutilimportgather_monitor_dataimportlogging#日志文件基本設(shè)置logging.basicConfig(format='%(asctime)s%(message)s',level=logging.WARNING,filename='sys_overload.log')'''定義要執(zhí)行的任務(wù)'''defmonjob():print('監(jiān)測時間:%s'%datetime.now())report()logging.warning('執(zhí)行一次監(jiān)測!')data=gather_monitor_data()threshold=80#過載閾值(百分比)
ifdata['cpu_percent']>threshold:logging.warning(f"CPU過載!使用率達(dá){data['cpu_percent']}%")任務(wù)4.2發(fā)送郵件任務(wù)4.1記錄日志任務(wù)4.2發(fā)送郵件任務(wù)說明01OPTION02OPTION03OPTION了解smtplib模塊及其基本用法了解email模塊及其基本用法掌握通過郵件發(fā)送通知信息的程序編寫方法04OPTION掌握發(fā)送HTML格式郵件的程序編寫方法任務(wù)4.2發(fā)送郵件相關(guān)知識4.2.1smtplib模塊及其基本用法創(chuàng)建SMTP對象importsmtplibsmtpObj=smtplib.SMTP(host='',port=0,local_hostname=None)SMTP對象的發(fā)送郵件方法SMTP.sendmail(from_addr,to_addrs,msg)任務(wù)4.2發(fā)送郵件相關(guān)知識4.2.1smtplib模塊及其基本用法使用smtplib模塊發(fā)送郵件的基本步驟(1)創(chuàng)建SMTP對象并連接SMTP服務(wù)器(2)使用郵件賬號登錄SMTP服務(wù)器(3)調(diào)用SMTP對象中的方法發(fā)送郵件到收件人地址任務(wù)4.2發(fā)送郵件相關(guān)知識4.2.2email模塊及其基本用法構(gòu)造純文本郵件fromemail.messageimportEmailMessagemsg=EmailMessage()#創(chuàng)建EmailMessage對象msg['Subject']='郵件主題'msg['From']='發(fā)件人地址'msg['To']='收件人地址'msg.set_content('郵件正文')任務(wù)4.2發(fā)送郵件相關(guān)知識4.2.2email模塊及其基本用法構(gòu)造帶附件的郵件importmimetypesfromemail.messageimportEmailMessage'''定義獲取指定文件的MIME類型的函數(shù)'''defget_mimetype(path):ctype,encoding=mimetypes.guess_type(path)ifctypeisNoneorencodingisnotNone:ctype='application/octet-stream'maintype,subtype=ctype.split('/',1)returndict(maintype=maintype,subtype=subtype)#創(chuàng)建EmailMessage對象并設(shè)置郵件基本信息msg=EmailMessage()msg['Subject']='郵件主題'msg['From']='發(fā)件人地址'msg['To']='收件人地址'msg.set_content('郵件正文')任務(wù)4.2發(fā)送郵件相關(guān)知識4.2.2email模塊及其基本用法構(gòu)造帶附件的郵件#將圖片文件作為附件添加到郵件中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)#最后發(fā)送該郵件,代碼省略任務(wù)4.2發(fā)送郵件任務(wù)實現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報警通知配置郵箱使其支持第三方郵件客戶端任務(wù)4.2發(fā)送郵件任務(wù)實現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報警通知編寫一個純文本郵件發(fā)送程序importsmtplibfromemail.messageimportEmailMessagemail_host=""#設(shè)置服務(wù)器mail_user="XXX"#郵箱的用戶名(不是完整的郵箱地址)mail_pass="UDYRCXISROAHNQAY"#郵箱授權(quán)密碼sender="XXX@163.com"#發(fā)件人地址receivers=["XXX@163.com","YYY@"]#收件人地址列表,可以有多個地址任務(wù)4.2發(fā)送郵件任務(wù)實現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報警通知編寫一個純文本郵件發(fā)送程序'''發(fā)送文本郵件的函數(shù)'''defsend_mail(subject,content):msg=EmailMessage()msg["Subject"]=subject#郵件主題
msg["From"]=sender#發(fā)件人
msg["To"]=",".join(receivers)#收件人列表
msg.set_content(content)#郵件體(正文)
s=smtplib.SMTP()#創(chuàng)建SMTP對象
try:s.connect(mail_host,25)#建立SMTP連接
s.login(mail_user,mail_pass)#提供登錄賬號和密碼
s.sendmail(sender,receivers,msg.as_string())#發(fā)送郵件
print("郵件發(fā)送成功!")exceptsmtplib.SMTPExceptionase:print(f"發(fā)送失敗,錯誤原因:{e}")finally:s.quit()任務(wù)4.2發(fā)送郵件任務(wù)實現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報警通知編寫日志監(jiān)控的郵件發(fā)送報警程序fromemail_sendimportsend_textmail#從email_send模塊中導(dǎo)入send_textmail()函數(shù)importsocket…defmonjob():print('監(jiān)測時間:%s'%datetime.now())report()logging.warning('執(zhí)行一次監(jiān)測!')data=gather_monitor_data()threshold=80#過載閾值(百分比)
alert_text=""
任務(wù)4.2發(fā)送郵件任務(wù)實現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報警通知編寫日志監(jiān)控的郵件發(fā)送報警程序ifdata['cpu_percent']>threshold:logging.warning(f"CPU過載!使用率達(dá){data['cpu_percent']}%")alert_text+=f"CPU過載!使用率達(dá){data['cpu_percent']}%"ifdata['mem_percent']>threshold:loggi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州財經(jīng)職業(yè)學(xué)院《社會保障》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽幼兒師范高等專科學(xué)?!吨袑W(xué)政治教學(xué)法與技能訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年江蘇省安全員C證考試題庫
- 2025福建建筑安全員-C證考試題庫
- 貴陽康養(yǎng)職業(yè)大學(xué)《酒店規(guī)劃與設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州中醫(yī)藥大學(xué)《高分子化學(xué)與物理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年安徽省建筑安全員-C證(專職安全員)考試題庫
- 2025遼寧省建筑安全員C證考試(專職安全員)題庫附答案
- 廣州醫(yī)科大學(xué)《混凝土結(jié)構(gòu)基本原理(建筑工程)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年廣東建筑安全員《B證》考試題庫
- 礦井軌道質(zhì)量標(biāo)準(zhǔn)及架線維護(hù)規(guī)程
- 人教版高中化學(xué)選修二測試題及答案解析
- 打字測試評分標(biāo)準(zhǔn)
- 2023年報告文學(xué)研究(自考)(重點)題庫(帶答案)
- GB/T 18691.5-2021農(nóng)業(yè)灌溉設(shè)備灌溉閥第5部分:控制閥
- 《左傳》簡介課件
- 2023學(xué)年完整版高中英語2UNIT2Let'scelebrate!TherealfatherCh
- 湖北省武漢市江漢區(qū)2021-2022七年級初一上學(xué)期期末數(shù)學(xué)試卷+答案
- 手機領(lǐng)用申請單
- 云南風(fēng)光課件
- 城鎮(zhèn)天然氣工程施工組織設(shè)計方案
評論
0/150
提交評論