




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第五章Python運維5.1系統(tǒng)信息獲取5.2文件系統(tǒng)監(jiān)控5.3Python日志生成與分析習(xí)題
5.1系統(tǒng)信息獲取
5.1.1
系統(tǒng)性能信息獲取系統(tǒng)性能信息對于安全運維來說十分重要,psutil(Pythonsystemandprocessutilities)是一個跨平臺的進(jìn)程管理和系統(tǒng)工具的Python庫,可以處理系統(tǒng)CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息。psutil主要用于系統(tǒng)資源的監(jiān)控、分析,以及對進(jìn)程進(jìn)行一定的管理。通過psutil可以實現(xiàn)如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset和pmap這些命令的功能,可在Linux、Windows、OSX、Freebsd和SunSolaris等系統(tǒng)中工作。
Windows和Linux安裝psutil的源代碼步驟如下:
(1)
Windows系統(tǒng)命令行窗口輸入命令:
pipinstallpsutil
(2)?Linux系統(tǒng)在終端輸入命令:
#wget/packages/source/p/psutil/psutil-2.0.0.tar.gz
#tar-xzvfpsutil-2.0.0.tar.gz
#cdpsutil-2.0.0
#pythonsetup.pyinstall
1.
CPU信息
操作系統(tǒng)的CPU利用率包含以下幾個部分:
(1)
User
time:用戶時間進(jìn)程百分比。
(2)
System
Time:內(nèi)核進(jìn)程和終端的時間百分比。
(3)
Wait
IO:由于IO等待使CPU處于空閑狀態(tài)的時間百分比。
(4)
Idle:CPU處于空閑狀態(tài)的時間百分比。
2.內(nèi)存信息
Linux系統(tǒng)的內(nèi)存利用率信息涉及total(內(nèi)存總數(shù))、used(已使用的內(nèi)存數(shù))、free(空閑內(nèi)存數(shù))、buffers(緩沖使用數(shù))、cache(緩存使用數(shù))、swap(交換分區(qū)使用數(shù))等,可分別使用psutil.virtual_memory()與psutil.swap_memory()方法獲取這些信息,具體操作代碼如下:
3.磁盤信息
在系統(tǒng)的所有磁盤信息中,我們更加關(guān)注磁盤的利用率及IO信息,其中磁盤利用率使用psutil.disk_usage()方法獲取。
磁盤IO信息包括:read_count(讀IO數(shù))、write_count(寫IO數(shù))、read_bytesIO(讀字節(jié)數(shù))、write_bytesIO(寫字節(jié)數(shù))、read_time(磁盤讀時間)和write_time(磁盤寫時間),這些IO信息可以使用psutil.disk_io_counters()方法獲取,具體操作代碼如下:
4.網(wǎng)絡(luò)信息
系統(tǒng)的網(wǎng)絡(luò)信息與磁盤IO信息類似,涉及幾個關(guān)鍵點,包括bytes_sent(發(fā)送字節(jié)數(shù))、bytes_recv(接收字節(jié)數(shù))、packets_sent(發(fā)送數(shù)據(jù)包數(shù))、packets_recv(接收數(shù)據(jù)包數(shù))等。這些網(wǎng)絡(luò)信息使用_io_counters()方法獲取,具體操作代碼如下:
5.其他信息
除了前面介紹的幾個獲取系統(tǒng)基本信息的方法,psutil模塊還支持獲取用戶登錄、開機時間等信息,具體操作代碼如下:
5.1.2進(jìn)程信息獲取
獲得當(dāng)前系統(tǒng)的進(jìn)程信息,可以讓運維人員得知應(yīng)用程序的運行狀態(tài),包括進(jìn)程的啟動時間、查看或設(shè)置CPU親和度、內(nèi)存使用率、IO信息、Socket連接、線程數(shù)等。這些信息可以給運維人員提供指定進(jìn)程是否存活以及資源利用等情況,為開發(fā)人員的代碼優(yōu)化、問題定位提供很好的參考依據(jù)。
5.1.3
/proc文件系統(tǒng)
Linux系統(tǒng)的/proc文件虛擬系統(tǒng)是一種內(nèi)核和內(nèi)核模塊,用來向進(jìn)程發(fā)送信息的機制(所以叫做“/proc”)。這個文件虛擬系統(tǒng)允許與內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)交互,獲取有關(guān)進(jìn)程的有用信息,在運行中(onthefly)改變設(shè)置(通過改變內(nèi)核參數(shù))。與其他文件系統(tǒng)不同,/proc存在于內(nèi)存而不是硬盤中。/proc文件系統(tǒng)提供的信息如下:
(1)進(jìn)程信息:系統(tǒng)中的任何一個進(jìn)程,在/proc的子目錄中都有一個和該進(jìn)程ID號所對應(yīng)的目錄,因此這些目錄也稱為進(jìn)程目錄,其中包含cmdline、mem、root、stat、statm、status等子目錄。從上述子目錄可以獲得有關(guān)進(jìn)程的詳細(xì)信息。
(2)系統(tǒng)信息:如果需要了解整個系統(tǒng)信息,那么也可以從/proc/stat中獲取,其中包括CPU占用情況、磁盤空間、內(nèi)存對換、中斷等。
(3)
CPU信息:利用/proc/CPUinfo文件可以獲得中央處理器的當(dāng)前準(zhǔn)確信息。
(4)負(fù)載信息:/proc/loadavg文件包含系統(tǒng)負(fù)載信息。
(5)系統(tǒng)內(nèi)存信息:/proc/meminfo文件包含系統(tǒng)內(nèi)存的詳細(xì)信息,包括物理內(nèi)存的數(shù)量、可用交換空間的數(shù)量,以及空閑內(nèi)存的數(shù)量等。
/proc文件說明如表5-1所示。
(2)系統(tǒng)信息:如果需要了解整個系統(tǒng)信息,那么也可以從/proc/stat中獲取,其中包括CPU占用情況、磁盤空間、內(nèi)存對換、中斷等。
(3)
CPU信息:利用/proc/CPUinfo文件可以獲得中央處理器的當(dāng)前準(zhǔn)確信息。
(4)負(fù)載信息:/proc/loadavg文件包含系統(tǒng)負(fù)載信息。
(5)系統(tǒng)內(nèi)存信息:/proc/meminfo文件包含系統(tǒng)內(nèi)存的詳細(xì)信息,包括物理內(nèi)存的數(shù)量、可用交換空間的數(shù)量,以及空閑內(nèi)存的數(shù)量等。
/proc文件說明如表5-1所示。
下面根據(jù)?/proc虛擬文件系統(tǒng)來獲取相關(guān)信息。
[例5-1]
獲取CPU詳細(xì)信息。
[例5-2]
獲取系統(tǒng)的負(fù)載信息。
[例5-3]
獲取內(nèi)存使用情況。
[例5-4]獲取網(wǎng)絡(luò)接口的輸入和輸出。
[例5-5]
利用pwd模塊核查用戶信息。pwd模塊提供了一個Unix密碼數(shù)據(jù)庫即/etc/passwd的操作接口,這個數(shù)據(jù)庫包含本地用戶的賬戶信息。
5.1.4調(diào)用Linux命令獲取信息
在一些離線服務(wù)端上我們無法下載與安裝用于管理和監(jiān)控系統(tǒng)的第三方包,此時Python可以執(zhí)行Linux系統(tǒng)內(nèi)部的命令來獲取系統(tǒng)的信息。
Python執(zhí)行Linux命令有三種方式:
(1)使用os.system(“cmd”)。
(2)使用Popen模塊產(chǎn)生新的process。
(3)使用commands.getstatusoutput。
首先介紹Linux查看系統(tǒng)信息的常用命令。
(1)基本系統(tǒng)信息:
#cat/etc/issue #操作系統(tǒng)信息
#cat/proc/version #內(nèi)核信息
#hostname #主機信息
(2)網(wǎng)絡(luò)信息:
#/sbin/ifconfig-a #網(wǎng)絡(luò)接口信息
#route #路由信息
#netstat-antup|grep-v'TIME_WAIT' #網(wǎng)絡(luò)套接字信息
(3)用戶信息:
(4)進(jìn)程信息:
上述代碼執(zhí)行過程中,首先判斷當(dāng)前版本的Python是否存在subprocess模塊,如果沒有則使用os模塊;然后分別聲明了3個函數(shù)實現(xiàn)命令執(zhí)行、結(jié)果打印和結(jié)果保存。主代碼使用字典來存儲Linux命令、命令解釋和執(zhí)行結(jié)果。
5.1.5可疑進(jìn)程檢測
黑客經(jīng)常會采取各種辦法隱藏惡意進(jìn)程,如采用mount
bind技術(shù)將后門進(jìn)程信息隱藏起來(此時,/proc/下的進(jìn)程目錄為空,詳見網(wǎng)址為/18050.html中的相關(guān)內(nèi)容),或者采用偷梁換柱、掛鉤劫持等(網(wǎng)址為/post/id/160843)方法實現(xiàn)進(jìn)程隱藏。因此對可疑的Linux進(jìn)程進(jìn)行監(jiān)控和提醒在系統(tǒng)安全中是非常重要的一項內(nèi)容。
Linux系統(tǒng)的進(jìn)程主要有內(nèi)核進(jìn)程和非內(nèi)核進(jìn)程。通常,內(nèi)核進(jìn)程是安全無害的,對內(nèi)核進(jìn)程來說,其PID或者PPID是2。非內(nèi)核進(jìn)程包含該系統(tǒng)的服務(wù)進(jìn)程和其他進(jìn)程。服務(wù)進(jìn)程提供系統(tǒng)服務(wù)如Apache2、Tomcat、MySQL等??梢酝ㄟ^建立一個服務(wù)進(jìn)程白名單;然后對系統(tǒng)進(jìn)行進(jìn)程檢索,排除白名單內(nèi)進(jìn)程和內(nèi)核進(jìn)程;最后對殘留的進(jìn)程根據(jù)內(nèi)存和CPU的使用情況進(jìn)行判斷。
以上代碼在使用時,可以直接在白名單列表內(nèi)添加進(jìn)程,也可以通過創(chuàng)建一個whitelist_list來導(dǎo)入進(jìn)程。涉及的主要函數(shù)有四個:get_nonkernel_process()、load_whitelist()、list_process()和string_in_regex_list()。主函數(shù)再通過調(diào)用list_process()獲取可疑進(jìn)程列表。list_process()調(diào)用get_nonkernel_process()獲取非內(nèi)核進(jìn)程、load_whitelist()獲取可信任進(jìn)程,再調(diào)用string_in_regex_list()找出非內(nèi)核進(jìn)程中不包含在可信任進(jìn)程中的可疑進(jìn)程。
以上代碼核心是通過re正則表達(dá)式判斷可疑進(jìn)程的。若發(fā)現(xiàn)可疑進(jìn)程可以給管理員發(fā)送一份郵件,使管理員可以迅速得知系統(tǒng)目前的狀態(tài)。
5.2文件系統(tǒng)監(jiān)控
業(yè)務(wù)服務(wù)監(jiān)控是運維體系中最重要的環(huán)節(jié),是保證業(yè)務(wù)服務(wù)持續(xù)、穩(wěn)定和進(jìn)行故障檢測的關(guān)鍵手段。怎樣更有效地實現(xiàn)業(yè)務(wù)服務(wù),是每個運維人員應(yīng)該思考的問題,不同業(yè)務(wù)場景需定制不同的監(jiān)控方式。Python在監(jiān)控方面提供了大量的第三方模塊,可以快速、有效地開發(fā)企業(yè)級服務(wù)監(jiān)控平臺,為相應(yīng)的業(yè)務(wù)保駕護(hù)航。
5.2.1文件權(quán)限獲取
stat模塊是系統(tǒng)調(diào)用時用來返回相關(guān)文件的系統(tǒng)狀態(tài)信息的。stat模塊描述了os.stat(filename)返回的文件屬性列表中各值的意義,可方便地根據(jù)stat模塊存取os.stat()中的值。
5.2.2文件內(nèi)容與目錄差異對比
Pythondifflib模塊提供的類和方法可用來進(jìn)行文件或者目錄的差異化對比,它能夠生成文本或者HTML格式的差異化對比結(jié)果。作為Python的標(biāo)準(zhǔn)庫模塊,Pythondifflib模塊無需安裝,其作用是對比文本之間的差異,且支持輸出可讀性比較強的HTML文檔,與Linux下的diff命令相似。我們可以使用difflib對比代碼、配置文件的差別,這樣做在代碼版本控制方面是非常有用的。
1.文件內(nèi)容差異對比
先通過兩個示例來了解一下difflib的使用。
[例5-6]兩個字符串的差異對比。
在對比結(jié)果中,各符號的含義如表5-2所示。
[例5-7]
difflib的HtmlDiff(
)類支持將對比結(jié)果輸出為HTML格式。
運行#pythonhtmldiff.py>diff.html后再用瀏覽器打開diff.html文件,運行結(jié)果如圖5-1所示。
圖5-1html格式輸出結(jié)果
2.文件與目錄差異
當(dāng)進(jìn)行代碼審計或校驗備份結(jié)果時,經(jīng)常需要檢測原始與目標(biāo)目錄的文件的一致性,Python的標(biāo)準(zhǔn)庫已經(jīng)準(zhǔn)備了滿足此需求的filecmp模塊。
Filecmp模塊常用的幾種方法:
(1)單文件比價,filecmp.cmp(file1,file2)方法,對比file1和file2的文件,若相同則返回Ture;不相同則返回False。
(2)多文件比較,filecmp.cmpfiles(dir,dir,common)方法,對比dir1與dir2目錄給定文件清單。該方法返回文件名的三個列表:匹配、不匹配和錯誤。匹配列表是指包含匹配文件的列表,不匹配列表是指不包含匹配文件的列表。錯誤列表表示目錄不存在的文件,不具有權(quán)限或其他原因?qū)е碌牟荒軐Ρ鹊奈募鍐巍?/p>
使用cmpfiles對比的結(jié)果如下:
(3)目錄對比,通過dircmp(a,b,ignore)類創(chuàng)建一個目錄對比對象,其中,a和b是參加對比的目錄名;ignore表示文件名忽略列表。dircmp()類可以獲得目錄比較的詳細(xì)信息,如只有在a目錄中包括的文件,a與b目錄都存在的子目錄、匹配的文件等,同時支持遞歸。
dircmp()類提供三種輸出報告的方法:
①
report() 比較當(dāng)前指定目錄的內(nèi)容
②
report_part_closure()
比較當(dāng)前指定目錄及第一級子目錄中的內(nèi)容
③
report_full_closure()遞歸比較所有指定目錄內(nèi)容
為使輸出更加詳細(xì)地對比結(jié)果,dircmp()類還提供了一些主要屬性,如表5-3所示。
以下給出了目錄對比的代碼實例。
[例5-8]
目錄對比。
其中,dir1和dir2兩個目錄的結(jié)構(gòu)如圖5-2所示。
圖5-2目錄結(jié)構(gòu)
5.2.3集中式病毒掃描機制
Clam
AntiVirus(Clam
AV)是一個免費而且開放源代碼的防毒軟件,軟件與病毒庫的更新由開源社區(qū)免費發(fā)布。目前ClamAV主要為Linux、Unix系統(tǒng)提供病毒掃描與查殺。pyClamd是Python的一個第三方模塊,可讓Python直接使用ClamAV病毒掃描守護(hù)進(jìn)程clamd來實現(xiàn)一個高效的病毒檢測功能。
1.相關(guān)程序安裝
1)客戶端(病毒掃描源)安裝clamavp、clamd服務(wù)的相關(guān)程序包
代碼如下:
2)主控端安裝pyclamd模塊
2.核心庫使用說明
Python的pyclamd提供兩個關(guān)鍵類,一個為ClamdNetworkSocket()類,實現(xiàn)使用網(wǎng)絡(luò)套接字操作clamd;另一個為ClamdUnixSocket()類,實現(xiàn)使用Unix套接字類操作clamd。兩個類定義的方法完全一樣,本小節(jié)以ClamdNetworkSocket()類為例進(jìn)行說明。
(1)
__init__(self,host='',port=3310,timeout=None)方法,是ClamdNetworkSocket()類的初始化方法,與/etc/clamd.conf配置文件中的TCPSocket參數(shù)要保持一致;timeout為連接的超時時間。
(2)
contscan_file(self,file)的方法,實現(xiàn)掃描指定的文件或目錄,在掃描時發(fā)生錯誤或發(fā)現(xiàn)病毒將不終止;參數(shù)file(string類型)為指定的文件或目錄的絕對路徑。
(3)
multiscan_file(self,file)方法,實現(xiàn)多線程掃描指定的文件或目錄,多核環(huán)境速度更快,在掃描時發(fā)生錯誤或發(fā)現(xiàn)病毒將不終止;參數(shù)file(string類型)為指定的文件或目錄的絕對路徑。
(4)
scan_file(self,file)方法,實現(xiàn)掃描指定的文件或目錄,在掃描時發(fā)生錯誤或病毒將終止;參數(shù)file(string類型)為指定的文件或目錄的絕對路徑。
(5)?shutdown(self)方法,實現(xiàn)強制關(guān)閉clamd進(jìn)程并退出。
(6)
stats(self)方法,獲取Clamscan的當(dāng)前狀態(tài)。
(7)
reload(self)方法,強制重載clamd病毒特征庫,掃描前建議做reload操作。
(8)
EICAR(self)方法,返回EICAR測試字符串,即生成具有病毒特征的字符串,便于測試。
3.
clamd服務(wù)工作機制
管理服務(wù)端通過Python發(fā)出多線程指令連接業(yè)務(wù)服務(wù)端的3310端口,執(zhí)行病毒掃描,然后返回結(jié)果給管理服務(wù)端。業(yè)務(wù)服務(wù)端必須安裝clamd相關(guān)程序包,并啟動服務(wù)監(jiān)聽在3310端口才能正常收到指令;可以針對不同業(yè)務(wù)環(huán)境定制相應(yīng)的掃描策略,比如掃描對象、描述模式、掃描路徑、調(diào)試頻率等。
5.2.4發(fā)送電子郵件smtplib模塊
電子郵件是最流行的互聯(lián)網(wǎng)應(yīng)用之一。在系統(tǒng)管理領(lǐng)域,常常使用郵件來發(fā)送告警信息、業(yè)務(wù)質(zhì)量報表等,方便運維人員第一時間了解業(yè)務(wù)的服務(wù)狀態(tài)。本節(jié)通過Python的smtplib模塊來實現(xiàn)郵件的發(fā)送功能,模擬一個SMTP客戶端,通過與SMTP服務(wù)端交互來實現(xiàn)郵件發(fā)送功能。Python
2.3或更高版本默認(rèn)自帶smtplib模塊,無需額外安裝。
SMTP類定義:smtplib.SMTP()作為SMTP的構(gòu)造函數(shù),其功能是與SMTP服務(wù)端建立連接,在連接成功后,就可以向服務(wù)端發(fā)送相關(guān)請求,比如登錄、校驗、發(fā)送、退出等。SMTP類具有如下方法:
(1)?SMTP.connect(host,port)方法:連接遠(yuǎn)程SMTP主機;參數(shù)host為遠(yuǎn)程主機地址,port為遠(yuǎn)程主機SMTP端口(默認(rèn)為25)。例如:SMTP.connect(“”,“25”)。
(2)?SMTP.login(user,password)方法:遠(yuǎn)程SMTP主機的登錄方法;參數(shù)為用戶名與密碼,如SMTP.login("python_2014@163.com","sdjkg358")。
(3)?SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法:實現(xiàn)郵件的發(fā)送功能;參數(shù)依次為發(fā)件人、收件人、郵件內(nèi)容,例如:SMTP.sendmail(“python_2014@163.com”,“demo@”,body)。
(4)?SMTP.starttls()方法:啟用TLS(安全傳輸)模式,所有SMTP指令都將加密傳輸。例如,使用Gmail的SMTP服務(wù)時需要啟動此項才能正常發(fā)送郵件。
(5)
SMTP.quit()方法:斷開SMTP服務(wù)端的連接。
5.3Python日志生成與分析
5.3.1
Linux系統(tǒng)日志介紹
Linux系統(tǒng)內(nèi)核和許多程序會產(chǎn)生各種錯誤信息、警告信息和其他的提示信息。這些信息對管理員了解系統(tǒng)的運行狀態(tài)非常有用,這些信息都被寫入了系統(tǒng)的日志文件中,完成這個過程的程序就是syslog。syslog可以根據(jù)日志的類別和優(yōu)先級將日志保存到不同的文件中。日志文件通常都保存在“/var/log”目錄下。Linux系統(tǒng)日志主要包含三個日志子系統(tǒng):連接時間日志、進(jìn)程統(tǒng)計日志和錯誤日志。
1.連接時間日志
連接時間日志由多個程序執(zhí)行,通常會把記錄寫入文件/var/log/wtmp和/var/log/btmp。login等程序更新wtmp和btmp文件及Linux用戶登錄成功的相關(guān)信息主要保存在/var/log/wtmp中,而Linux用戶登錄失敗的相關(guān)信息主要保存在/var/log/btmp中。系統(tǒng)管理員通過上述兩個文件來跟蹤用戶何時嘗試登錄系統(tǒng)。由于這兩個文件是二進(jìn)制文件,因此需要使用(last
-f
)命令打開,分別如圖5-3和圖5-4所示。
圖5-3用戶登錄成功圖5-4用戶登錄失敗
2.進(jìn)程統(tǒng)計日志
進(jìn)程統(tǒng)計日志可以監(jiān)控用戶在服務(wù)端的操作,所記錄的操作會存入/var/account/pacct文件中。進(jìn)程統(tǒng)計日志由系統(tǒng)內(nèi)核執(zhí)行。當(dāng)一個進(jìn)程終止時,為每個進(jìn)程往進(jìn)程統(tǒng)計文件(pacct或acct)中寫一個記錄。進(jìn)程統(tǒng)計的目的是為系統(tǒng)中的基本服務(wù)提供命令使用統(tǒng)計。但是進(jìn)程統(tǒng)計日志默認(rèn)不開啟,需要使用sudoaccton/var/account/pacct命令開啟日志記錄。這些可通過lastcomm命令查看,如圖5-5所示。
圖5-5lastcomm命令查看
進(jìn)程統(tǒng)計日志記錄了用戶在執(zhí)行命令時調(diào)用的程序統(tǒng)計信息,其內(nèi)容分別為程序名、標(biāo)志位、用戶名、執(zhí)行命令的系統(tǒng)與執(zhí)行時間。其中,標(biāo)志位分別有S表示命令由超級管理員執(zhí)行;F表示命令由子程序運行,沒有使用EXEC;C表示命令運行在PDP-11兼容環(huán)境下;X表示命令由SIGTREM信號終止。
3.錯誤日志
錯誤日志由syslogd(8)執(zhí)行。各種系統(tǒng)守護(hù)進(jìn)程、用戶程序和內(nèi)核通過syslog(3)向文件/var/log/messages報告值得注意的事件。另外,還有其他應(yīng)用程序可創(chuàng)建日志,比如HTTP和FTP等服務(wù)也會創(chuàng)建自身相關(guān)的日志。錯誤日志包含的不僅僅是錯誤信息,警告信息和提示信息也會包含其中。常見的錯誤日志分別存放在/var/log/messages與/var/log/secure中,messages記錄了大多數(shù)系統(tǒng)與應(yīng)用程序產(chǎn)生的info及更加嚴(yán)重的錯誤信息,而secure則記錄了用戶權(quán)限變更時的認(rèn)證信息,分別如圖5-6和圖5-7所示。
圖5-6messages記錄圖5-7secure記錄
這里列舉一些常用的日志文件與這些日志文件的作用。系統(tǒng)日志由一個名為syslog的服務(wù)管理,以下日志文件都是由syslog日志服務(wù)驅(qū)動產(chǎn)生的。
(1)
/var/log/boot.log:記錄了系統(tǒng)在引導(dǎo)過程中發(fā)生的事件,就是Linux系統(tǒng)開機自檢過程顯示的信息。
(2)
/var/log/lastlog:記錄最后一次用戶成功登錄的時間、登錄IP地址等信息。
(3)
/var/log/messages:記錄Linux操作系統(tǒng)常見的系統(tǒng)和服務(wù)錯誤信息。
(4)
/var/log/secure:Linux系統(tǒng)安全日志,記錄用戶和工作組變換情況、用戶登錄認(rèn)證情況。
(5)
/var/log/btmp:記錄Linux登錄失敗的用戶、時間以及遠(yuǎn)程IP地址。
(6)
/var/log/syslog:只記錄警告信息,常常是系統(tǒng)出問題的信息,使用lastlog查看。
(7)
/var/log/wtmp:永久記錄每個用戶登錄、注銷及系統(tǒng)的啟動、停機的事件,使用last命令查看。
(8)
/var/run/utmp:記錄有關(guān)當(dāng)前登錄的每個用戶的信息,如who、w、users、finger等就需要訪問這個文件。
(9)?/var/log/syslog或/var/log/messages:存儲所有的全局系統(tǒng)活動數(shù)據(jù),包括開機信息?;贒ebian的系統(tǒng),如Ubuntu在/var/log/syslog中存儲它們;而基于RedHat的系統(tǒng),如RHEL或CentOS則在/var/log/messages中存儲它們。
(10)
/var/log/auth.log或/var/log/secure:存儲來自可插拔認(rèn)證模塊(PAM)的日志,包括成功的登錄、失敗的登錄嘗試和認(rèn)證方式。Ubuntu和Debian在?/var/log/auth.log中存儲認(rèn)證信息;而RedHat和CentOS則在/var/log/secure中存儲該信息。
5.3.2
Python日志生成
Linux系統(tǒng)提供豐富而健全的日志系統(tǒng),當(dāng)程序員設(shè)計程序時,也可以輸出這樣一個簡潔、明了的日志來幫助自己判斷程序的運行情況。調(diào)用Python中的logging模塊就可以幫助程序員實現(xiàn)日志的記錄。
Logging模塊定義的函數(shù)和類為應(yīng)用程序與庫的開發(fā)實現(xiàn)了一個靈活的事件日志系統(tǒng)。Logging模塊是Python的一個標(biāo)準(zhǔn)庫模塊,由標(biāo)準(zhǔn)庫模塊提供日志記錄API的好處是所有Python模塊都可以使用這個日志記錄功能。所以,任何應(yīng)用的日志信息可以與來自第三方模塊的信息整合起來。
默認(rèn)情況下,logging模塊將日志打印到屏幕,日志級別為WARNING。
Logging模塊提供了兩種記錄日志的方式:
(1)使用logging模塊提供的模塊級別的函數(shù)。
(2)使用logging模塊日志系統(tǒng)的四大組件。
事實上,logging模塊所提供的模塊級別的日志記錄函數(shù),是對logging模塊日志系統(tǒng)相關(guān)類的封裝。
Logging模塊定義的模塊級別的常用函數(shù)如表5-4所示。
表5-4中,logging.basicConfig(**kwargs)函數(shù)用于指定“記錄的日志級別”、“日志格式”、“日志輸出位置”、“日志文件的打開模式”等信息;其余的函數(shù)則是用來創(chuàng)建不同嚴(yán)重級別的日志記錄。
1.使用logging模塊實現(xiàn)日志記錄
[例5-9]使用logging模塊實現(xiàn)日志記錄。
上述代碼中,logging.basicConfig中的level代表日志模塊允許打印出的最低級別的日志,這里是ERROR級別,因此只有級別大于等于ERROR的信息才會被記錄。Format指定日志格式字符串,即指定日志輸出時所包含的字段信息以及它們的順序。
Logging模塊中定義且可以用于format格式字符串的一些常用字段,如表5-5所示。
在例5-9中,datemt字段指定日期/時間格式。需要注意的是,該選項要在format中包含時間字段%(asctime)s時才有效。filename字段指定日志輸出文件。最后5行代碼一共創(chuàng)建了五種不同級別的日志信息。而因為設(shè)置只有高于ERROR的才能輸出,因此最終只輸出了兩行。
2.日志系統(tǒng)的四大組件
Python的logging模塊提供了通用的日志系統(tǒng),可以為第三方模塊或者應(yīng)用程序的使用提供方便。
logging模塊提供Logger、Handler、Filter和Formatter四大組件,如表5-6所示。
表5-6中,每個組件的功能如下:
(1)
Logger:提供日志接口,供應(yīng)用代碼使用。Logger最常用的操作有兩類:配置和發(fā)送日志信息??梢酝ㄟ^logging.getLogger(name)獲取logger對象,如果不指定name則返回root對象;多次使用相同的name調(diào)用getLogger方法則返回同一個Logger對象,也就是說只要name相同,返回的Logger實例都是同一個而且只有一個。日志器創(chuàng)建以后可以調(diào)用logger.setLevel設(shè)置日志器對應(yīng)的記錄級別。
(2)?Handler:將日志記錄發(fā)送到合適的接收目的地,比如文件、套接字等。Python提供十幾種Handler,常用的有:
①
StreamHandler:輸出到控制臺。
②
FileHandler:輸出到文件。
③
BaseRotatingHandler:可以按時間寫入到不同的日志中。比如將日志按天寫入不同的日期結(jié)尾的文件。
④?SocketHandler:用TCP網(wǎng)絡(luò)套接字記錄日志。
⑤
DatagramHandler:用UDP協(xié)議記錄日志。
⑥
SMTPHandler:把日志用電子郵件發(fā)送出去。
(3)?Filter:提供一種優(yōu)雅的方式?jīng)Q定一個日志記錄是否發(fā)送到Handler。
(4)?Formatter(fmt=None,datefmt=None):指定日志記錄輸出的具體格式。Formatter的構(gòu)造方法需要兩個參數(shù):信息的格式字符串fmt和日期字符串datefmt,這兩個參數(shù)都是可選的。fmt中可以指定多個字段,每個字段的格式為“%(<dictionarykey>)s”,就是字典的關(guān)鍵詞替換,例如打印時間、日志級別、日志信息可以用的格式為‘%(asctime)s-%(levelname)s-%(message)s’。詳細(xì)格式參考表5-5。
四大組件是相輔相成、協(xié)同工作完成日志的記錄,其工作流程如圖5-8所示。
圖5-8四大組件工作流程
(1)
(在用戶代碼中進(jìn)行)日志記錄函數(shù)調(diào)用,如(...)、logger.debug(...)等。
(2)判斷要記錄的日志級別是否滿足日志器設(shè)置的級別要求(要記錄的日志級別要大于等于日志器設(shè)置的級別才算滿足要求),如果不滿足,則該日志記錄會被丟棄并終止后續(xù)的操作;如果滿足則繼續(xù)下一步操作。
(3)根據(jù)日志記錄函數(shù)調(diào)用時的參數(shù),創(chuàng)建一個日志記錄(LogRecord類)對象。
(4)判斷日志記錄器上設(shè)置的過濾器是否拒絕這條日志記錄,如果被日志記錄器上的某個過濾器拒絕,則該日志記錄會被丟棄并終止后續(xù)的操作;如果日志記錄器上設(shè)置的過濾器沒有拒絕這條日志記錄或者日志記錄器上沒有設(shè)置過濾器,則繼續(xù)下一步操作——將日志記錄分別發(fā)送至該日志器上添加的各個處理器。
(5)判斷要記錄的日志級別是否滿足處理器設(shè)置的級別要求(要記錄的日志級別要大于等于該處理器設(shè)置的日志級別才算滿足要求),如果不滿足,則該記錄將會被該處理器丟棄并終止后續(xù)的操作;如果滿足則繼續(xù)下一步操作。
(6)判斷該處理器上設(shè)置的過濾器是否拒絕這條日志記錄,如果被該處理器上的某個過濾器拒絕,則該日志記錄會被當(dāng)前處理器丟棄并終止后續(xù)的操作;如果當(dāng)前處理器上設(shè)置的過濾器不拒絕這條日志記錄或當(dāng)前處理器上沒有設(shè)置過濾器,則繼續(xù)下一步操作。
(7)如果能堅持到本步驟,說明這條日志記錄經(jīng)過了層層關(guān)卡允許被輸出了,此時當(dāng)前處理器會根據(jù)自身被設(shè)置的格式器(如果沒有設(shè)置則使用默認(rèn)格式)將這條日志記錄進(jìn)行格式化,最后將格式化后的結(jié)果輸出到指定位置(文件、網(wǎng)絡(luò)、類文件的Stream等)。
(8)如果日志器被設(shè)置了多個處理器的話,上面的第(5)~(8)步會執(zhí)行多次。
(9)完整流程的最后一步:判斷該日志器輸出的日志信息是否需要傳遞給上一級logger(之前提到過,日志器是有層級關(guān)系的)的處理器,如果propagate屬性值為1,則表示日志信息將會被輸出到處理器指定的位置,同時還會被傳遞給parent日志器的Handlers進(jìn)行處理,直到當(dāng)前日志器的propagate屬性為0停止;如果propagate值為0,則表示不向parent日志器的Handlers傳遞該信息,到此結(jié)束。
可見,一條日志信息要想被最終輸出需要依次經(jīng)過以下多次過濾:
(1)日志器等級過濾。
(2)日志器的過濾器過濾。
(3)日志器的處理器等級過濾。
(4)日志器的處理器的過濾器過濾。
5.3.3Python日志分析
不論是面對程
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 強化基本醫(yī)療衛(wèi)生服務(wù)的重要性
- 糧食等重要農(nóng)產(chǎn)品穩(wěn)產(chǎn)保供的重要性
- 工業(yè)企業(yè)揮發(fā)性有機物排放控制的政策支持與激勵措施
- 圓柱施工方案
- 三級人力資源管理師-企業(yè)人力資源管理師(三級)《理論知識》考前沖刺卷4
- 專題08應(yīng)用文寫作
- 安徽省安慶一中江西省南昌二中等五省六校(K12聯(lián)盟)高三上學(xué)期期末聯(lián)考英語試題
- 福建省莆田市第二十四中學(xué)2017-2018學(xué)年高一上學(xué)期期末考?xì)v史試題
- 工會組織在企業(yè)文化建設(shè)中的獨特作用
- 九年義務(wù)教育全日制初級中學(xué)英語教學(xué)大綱( 試用修訂版)
- 2024年寧夏回族自治區(qū)消防救援總隊招聘機關(guān)消防文員考試真題
- 鐵路沿線危樹清理施工方案
- 二年級下冊數(shù)學(xué)口算題-可打印
- 湖北云學(xué)名校聯(lián)盟2024-2025學(xué)年高二上學(xué)期期末考試英語試題 含解析
- 公司信息化安全規(guī)章制度及操作手冊
- 福建省南平市2024-2025學(xué)年九年級上學(xué)期期末語文試題(解析版)
- 第五周《春風(fēng)吹過正‘植’有我》主題班會
- 2025年湖南工程職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年包頭鐵道職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2024年長沙電力職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年山西工程職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
評論
0/150
提交評論