版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)工業(yè)和信息化精品系列教材項(xiàng)目4
記錄日志與發(fā)送郵件人民郵電出版社能力CAPACITY要求學(xué)會(huì)使用logging模塊編程實(shí)現(xiàn)異常信息的日志記錄。學(xué)會(huì)使用logging模塊編程實(shí)現(xiàn)運(yùn)維業(yè)務(wù)信息的日志記錄。學(xué)會(huì)使用Python內(nèi)置模塊編程實(shí)現(xiàn)郵件通知功能。學(xué)會(huì)使用Python內(nèi)置模塊編程發(fā)送運(yùn)維報(bào)告郵件。任務(wù)4.2發(fā)送郵件任務(wù)4.1記錄日志任務(wù)4.1記錄日志任務(wù)說明01OPTION02OPTION03OPTION了解logging模塊及其基本用法了解logging模塊的組件和類學(xué)會(huì)在Python運(yùn)維程序中使用日志跟蹤程序異常和錯(cuò)誤04OPTION學(xué)會(huì)在Python運(yùn)維程序中使用日志記錄業(yè)務(wù)運(yùn)行數(shù)據(jù)任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.1為什么要使用logging模塊所有日志記錄具有統(tǒng)一的格式,便于后續(xù)處理。具有靈活的配置和格式化功能,如配置日志保存路徑、記錄運(yùn)行時(shí)間等??梢栽O(shè)置不同的日志級(jí)別,分級(jí)控制日志的記錄和輸出。支持日志文件回滾。便于應(yīng)用程序?qū)⑷罩居涗浥c來自第三方庫的消息整合。任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.2logging模塊的日志級(jí)別日志級(jí)別數(shù)值函數(shù)應(yīng)用場(chǎng)景CRITICAL50logging.critical()出現(xiàn)嚴(yán)重錯(cuò)誤,程序已經(jīng)不能繼續(xù)運(yùn)行,系統(tǒng)即將崩潰ERROR40logging.error()出現(xiàn)嚴(yán)重問題,程序不能正常運(yùn)行WARNING30logging.warning()雖然程序還在正常運(yùn)行,但可能會(huì)發(fā)生錯(cuò)誤INFO20()用于記錄程序中正常運(yùn)行的一些信息,通常只記錄關(guān)鍵節(jié)點(diǎn)信息DEBUG10logging.debug()最低級(jí)別,常用于調(diào)試、查看詳細(xì)信息、診斷問題等任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.3logging模塊的基本用法模塊級(jí)函數(shù)logging.debug()——記錄級(jí)別為DEBUG的日志消息()——記錄級(jí)別為INFO的日志消息logging.log(level,msg,*args,**kwargs)——記錄指定級(jí)別的日志消息logging.basicConfig(**kwargs)——配置logging模塊,指定logging模塊的默認(rèn)操作規(guī)則任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.3logging模塊的基本用法日志記錄示例>>>importlogging#導(dǎo)入logging模塊>>>logging.debug('這是調(diào)試信息!')>>>('這是普通信息!')>>>logging.warning('這是警告信息!')WARNING:root:這是警告信息!>>>logging.error('這是錯(cuò)誤!')ERROR:root:這是錯(cuò)誤!>>>logging.critical('這是嚴(yán)重錯(cuò)誤!!')CRITICAL:root:這是嚴(yán)重錯(cuò)誤!!任務(wù)4.1記錄日志相關(guān)知識(shí)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('這是模擬的錯(cuò)誤消息')任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.4logging模塊的類logging模塊的日志系統(tǒng)組件日志組件類功能記錄器Logger創(chuàng)建日志記錄的對(duì)象,為程序提供使用接口處理器Handler將由記錄器創(chuàng)建的日志記錄發(fā)送到目的地輸出,目的地可以是sys.stdout和文件等。一個(gè)記錄器可以設(shè)置多個(gè)處理器,以便將同一條日志記錄輸出到不同的位置過濾器Filter提供更細(xì)粒度的工具來確定要輸出哪些日志記錄。每個(gè)處理器都可以設(shè)置自己的過濾器來實(shí)現(xiàn)日志過濾,保留實(shí)際項(xiàng)目中需要的日志格式化器Formatter決定日志記錄的最終輸出格式,可以實(shí)現(xiàn)同一條日志以不同的格式輸出到不同的地方任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.4logging模塊的類記錄器與Logger類功能向程序提供運(yùn)行時(shí)記錄消息的方法。根據(jù)日志消息級(jí)別或過濾器確定要對(duì)哪些日志消息進(jìn)行操作。將相關(guān)的日志消息傳遞給處理器。常用配置方法
setLevel():設(shè)置要處理的日志消息級(jí)別
addHandler()和removeHandler():在記錄器中添加和刪除處理器
addFilter()和removeFilter():在記錄器中添加和刪除過濾器創(chuàng)建日志消息
debug()、info()等:創(chuàng)建對(duì)應(yīng)級(jí)別的日志消息
exception():創(chuàng)建類似使用error()方法創(chuàng)建的日志消息,并同時(shí)轉(zhuǎn)儲(chǔ)堆棧跟蹤
log():將日志級(jí)別作為顯式參數(shù)任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.4logging模塊的類處理器與Handler類功能將所有日志消息發(fā)送到指定的日志文件。將所有錯(cuò)誤或更高級(jí)別的日志消息發(fā)送到標(biāo)準(zhǔn)輸出。將所有關(guān)鍵消息發(fā)送到指定的電子郵件地址。常用配置方法
setLevel():指定被分派的最低日志級(jí)別。
setFormatter():選擇要使用的格式化器。
addFilter()和removeFilter():為處理器配置和移除過濾器。任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.4logging模塊的類日志事件信息流任務(wù)4.1記錄日志相關(guān)知識(shí)4.1.4logging模塊的類使用類實(shí)現(xiàn)日志記錄的步驟(1)創(chuàng)建日志記錄的對(duì)象(2)配置記錄器(3)記錄日志任務(wù)4.1記錄日志相關(guān)知識(shí)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ù)實(shí)現(xiàn)任務(wù)4.1.1將日志消息同時(shí)輸出到屏幕和文件importlogging#創(chuàng)建記錄器,將其命名為Testlogger=logging.getLogger("Test")#默認(rèn)日志級(jí)別為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或更高級(jí)別的日志消息輸出到控制臺(tái),設(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ù)實(shí)現(xiàn)任務(wù)4.1.1將日志消息同時(shí)輸出到屏幕和文件#將處理器添加到記錄器logger.addHandler(logfile)logger.addHandler(console)#輸出不同級(jí)別的日志消息logger.debug('debug,調(diào)試信息')('info,一般信息')logger.warning('warning,警告信息')logger.error('error,錯(cuò)誤信息')logger.critical('critical,嚴(yán)重的錯(cuò)誤信息')任務(wù)4.1記錄日志任務(wù)實(shí)現(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)#測(cè)試異常處理的函數(shù)deffunc(num1,num2):
if__name__=='__main__':func(2,0)#除以0觸發(fā)異常任務(wù)4.1記錄日志任務(wù)實(shí)現(xiàn)任務(wù)4.1.1將日志消息同時(shí)輸出到屏幕和文件讀取INI文件importconfigparserconfig=configparser.ConfigParser()#實(shí)例化ConfigParser類config.read("example1.ini")#讀取配置文件print("讀取所有選項(xiàng)值:")#遍歷整個(gè)字典forsectioninconfig.sections():#首先讀取節(jié)
print(f"節(jié):[{section}]")forkeyinconfig[section]:#讀取每個(gè)節(jié)的選項(xiàng)和值
print(f"選項(xiàng):{key},值:{config[section][key]}")#輸出選項(xiàng)和值print("讀取個(gè)別選項(xiàng)值:")#從字典中讀取指定元素print(f"版本:{config['Global']['version']}")print(f"發(fā)行商:{config['Preferences']['app.distributor']}")任務(wù)4.1記錄日志任務(wù)實(shí)現(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)測(cè)時(shí)間:%s'%datetime.now())report()logging.warning('執(zhí)行一次監(jiān)測(cè)!')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)知識(shí)4.2.1smtplib模塊及其基本用法創(chuàng)建SMTP對(duì)象importsmtplibsmtpObj=smtplib.SMTP(host='',port=0,local_hostname=None)SMTP對(duì)象的發(fā)送郵件方法SMTP.sendmail(from_addr,to_addrs,msg)任務(wù)4.2發(fā)送郵件相關(guān)知識(shí)4.2.1smtplib模塊及其基本用法使用smtplib模塊發(fā)送郵件的基本步驟(1)創(chuàng)建SMTP對(duì)象并連接SMTP服務(wù)器(2)使用郵件賬號(hào)登錄SMTP服務(wù)器(3)調(diào)用SMTP對(duì)象中的方法發(fā)送郵件到收件人地址任務(wù)4.2發(fā)送郵件相關(guān)知識(shí)4.2.2email模塊及其基本用法構(gòu)造純文本郵件fromemail.messageimportEmailMessagemsg=EmailMessage()#創(chuàng)建EmailMessage對(duì)象msg['Subject']='郵件主題'msg['From']='發(fā)件人地址'msg['To']='收件人地址'msg.set_content('郵件正文')任務(wù)4.2發(fā)送郵件相關(guān)知識(shí)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對(duì)象并設(shè)置郵件基本信息msg=EmailMessage()msg['Subject']='郵件主題'msg['From']='發(fā)件人地址'msg['To']='收件人地址'msg.set_content('郵件正文')任務(wù)4.2發(fā)送郵件相關(guān)知識(shí)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ù)實(shí)現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報(bào)警通知配置郵箱使其支持第三方郵件客戶端任務(wù)4.2發(fā)送郵件任務(wù)實(shí)現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報(bào)警通知編寫一個(gè)純文本郵件發(fā)送程序importsmtplibfromemail.messageimportEmailMessagemail_host=""#設(shè)置服務(wù)器mail_user="XXX"#郵箱的用戶名(不是完整的郵箱地址)mail_pass="UDYRCXISROAHNQAY"#郵箱授權(quán)密碼sender="XXX@163.com"#發(fā)件人地址receivers=["XXX@163.com","YYY@"]#收件人地址列表,可以有多個(gè)地址任務(wù)4.2發(fā)送郵件任務(wù)實(shí)現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報(bào)警通知編寫一個(gè)純文本郵件發(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對(duì)象
try:s.connect(mail_host,25)#建立SMTP連接
s.login(mail_user,mail_pass)#提供登錄賬號(hào)和密碼
s.sendmail(sender,receivers,msg.as_string())#發(fā)送郵件
print("郵件發(fā)送成功!")exceptsmtplib.SMTPExceptionase:print(f"發(fā)送失敗,錯(cuò)誤原因:{e}")finally:s.quit()任務(wù)4.2發(fā)送郵件任務(wù)實(shí)現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報(bào)警通知編寫日志監(jiān)控的郵件發(fā)送報(bào)警程序fromemail_sendimportsend_textmail#從email_send模塊中導(dǎo)入send_textmail()函數(shù)importsocket…defmonjob():print('監(jiān)測(cè)時(shí)間:%s'%datetime.now())report()logging.warning('執(zhí)行一次監(jiān)測(cè)!')data=gather_monitor_data()threshold=80#過載閾值(百分比)
alert_text=""
任務(wù)4.2發(fā)送郵件任務(wù)實(shí)現(xiàn)任務(wù)4.2.1通過郵件發(fā)送報(bào)警通知編寫日志監(jiān)控的郵件發(fā)送報(bào)警程序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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度鄉(xiāng)村旅游用地經(jīng)營權(quán)出租管理協(xié)議3篇
- 2024年城市更新項(xiàng)目物業(yè)管理費(fèi)收取與城市風(fēng)貌改造合同3篇
- 2024中介二手房買賣合同電子版范本3篇
- 2024商業(yè)街店鋪?zhàn)赓U及夜間經(jīng)濟(jì)開發(fā)合作合同3篇
- 2024年度農(nóng)業(yè)綜合開發(fā)擔(dān)保合同范本(新修訂)3篇
- 2024年度高檔別墅區(qū)物業(yè)管理委托合同書3篇
- 2024年度知識(shí)產(chǎn)權(quán)質(zhì)押擔(dān)保合同范本(專業(yè)版)3篇
- 2024中金大摩業(yè)務(wù)交接及分手補(bǔ)償協(xié)議2篇
- 2024年單位部門采購合同(31篇)
- 成都銀行2023年年度股東會(huì)材料
- 隱患排查治理管理規(guī)定
- 2025材料供貨合同樣本
- 豪華酒店翻新工程協(xié)議
- 教科版2022-2023學(xué)年度上學(xué)期三年級(jí)科學(xué)上冊(cè)期末測(cè)試卷及答案(含八套題)
- 國家開放大學(xué)電大《11662會(huì)計(jì)信息系統(tǒng)(本)》期末終考題庫及標(biāo)準(zhǔn)參考答案
- 水產(chǎn)動(dòng)物增養(yǎng)殖學(xué)蝦蟹類增養(yǎng)殖終極版
- 安規(guī)PIN腳尺寸
- 工程部獎(jiǎng)懲制度
- 出境竹木草制品生產(chǎn)企業(yè)衛(wèi)生防疫管理手冊(cè)
- 承建紅磚燒成隧道窯合同協(xié)議書范本模板
- 大班上學(xué)期周計(jì)劃1—20周精編版
評(píng)論
0/150
提交評(píng)論