python分析nginx日志
生活随笔
收集整理的這篇文章主要介紹了
python分析nginx日志
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
利用python腳本分析nginx日志內容,默認統計ip、訪問url、狀態,可以通過修改腳本統計分析其他字段。
一、腳本運行方式
python count_log.py -f med.xxxx.com.access.log
二、腳本內容
#!/usr/bin/python #?-*-?coding:?utf-8?-*- """ 1.分析日志,每行日志按空格切分,取出需要統計的相應字段,作為字典的key,遍歷相加 2.使用到字典的get方法,通過定義默認值,避免miss?key的錯誤 3.使用列表解析表達式 4.使用sorted函數排序列表 5.使用argparse傳入參數 6.nginx日志格式: log_format?????????access_log'$remote_addr?-?$remote_user?[$time_local]?$request?''"$status"?$body_bytes_sent?"$http_referer"?''"$http_user_agent"??"$request_time"'?'"$upstream_addr"'?'"$upstream_response_time"'; 7.日志內容: 222.xx.xxx.15?-?-?[07/Dec/2016:00:03:27?+0800]?GET?/app/xxx/xxx.apk?HTTP/1.0?"304"?0?"-"?"Mozilla/5.0?Gecko/20100115?Firefox/3.6"??"0.055""-""-" 8.腳本運行結果: ('106.xx.xx.46',?'/gateway/xxx/user/mxxxxx/submitSelfTestOfSingleQuestion',?'"200"',?299) ('182.1xx.xx.83',?'/',?'"200"',?185) ('222.xx.1xx.15',?'/',?'"200"',?152) ('125.xx.2xx.58',?'/',?'"200"',?145) """ import?argparsedef?count_log(filename,?num):try:with?open(filename)?as?f:dic?=?{}for?l?in?f:if?not?l?==?'\n':??#?判斷空白行arr?=?l.split('?')ip?=?arr[0]url?=?arr[6]status?=?arr[8]#?字典的key是有多個元素構成的元組#?字典的get方法,對取的key的值加1,第一次循環時由于字典為空指定的key不存在返回默認值0,因此讀第一行日志時,統計結果為1dic[(ip,?url,?status)]?=?dic.get((ip,?url,?status),?0)?+?1#?從字典中取出key和value,存在列表中,由于字典的key比較特殊是有多個元素構成的元組,通過索引k[#]的方式取出key的每個元素dic_list?=?[(k[0],?k[1],?k[2],?v)?for?k,?v?in?dic.items()]for?k?in?sorted(dic_list,?key=lambda?x:?x[3],?reverse=True)[:num]:print(k)except?Exception?as?e:print("open?file?error:",?e)if?__name__?==?'__main__':parser?=?argparse.ArgumentParser(description="傳入日志文件")#?定義必須傳入日志文件,使用格式-f?filenameparser.add_argument('-f',?action='store',?dest='filename',?required=True)#?通過-n傳入數值,取出最多的幾行,默認取出前10parser.add_argument('-n',?action='store',?dest='num',?type=int,?required=False,?default=10)given_args?=?parser.parse_args()filename?=?given_args.filenamenum?=?given_args.numcount_log(filename,?num)轉載于:https://blog.51cto.com/hnr520/1880663
總結
以上是生活随笔為你收集整理的python分析nginx日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Js文件中调用其它Js函数的方法(转)
- 下一篇: 【转载】同步和互斥的POSIX支持(互斥