1. 程式人生 > >Python開源專案介紹:網站日誌分析工具

Python開源專案介紹:網站日誌分析工具

CodingGo技術社群自由的程式設計學習平臺

日誌分析

日誌分析在web系統中故障排查、效能分析方面有著非常重要的作用。該工具的側重點不是通常的PV,UV等展示,而是在指定時間段內提供細粒度(最小分鐘級別,即一分鐘內的日誌做抽象彙總)的異常定位和效能分析。

環境安裝

  • Python 3.4+

  • pymongo 3.4.0+

  • MongoDB server

先明確幾個術語

uri指請求中不包含引數的部分; request_uri指原始的請求,包含引數或者無引數; args指請求中的引數部分。(參照nginx中的定義)
uri_abs和 args_abs是指對uri和args進行抽象處理後的字串(以便分類),例如:
"/sub/0/100414/4070?channel=ios&version=1.4.5"

經抽象處理轉換為 uri_abs: "/sub/*/*/*", args_abs:"channel=*&version=*"

特點

  1. 提供一個日誌分析的總入口:經由此入口,可檢視某站點所有 server 產生日誌的彙總分析;亦可根據 時間段和 server兩個維度進行過濾

  2. 支援對 requesturi,IP 和 responsecode 進行分析,基於 請求數、 響應大小、 響應時間三個大維度進行分析;另外不同子項又各有特點

  3. (核心思想)以某一類 uri 或其對應的各類 args 為維度進行分析,即對 requesturi 進行抽象處理將其分為 uriabs 和 args_abs 兩部分

  4. 3中提到的抽象歸類思想,預設抽象方法可滿足大部分需求;另外也提供了定製抽象規則的選項,基於此可靈活指定請求中的任何部分是否要抽象處理

  5. requesturi 分析能直觀展示哪類請求數量多、哪類請求耗時多、哪類請求佔流量;另外可展示某一類請求在不同粒度裡(minute, tenmin, hour, day)各指標隨時間的分佈變化;也可以針對某一 uriabs 分析其不同 argsabs 各指標的分佈

  6. IP 分析將所有請求分為3種來源(fromcdn/proxy, fromreverseproxy, fromclientdirectly),三種來源各自展示其訪問量前 N 的 IP 地址;並且可展示某一 IP 訪問的各指標隨時間的分佈;也可針對某一 IP 分析其產生的不同 uri

    abs 各指標的分佈

  7. 通過4分位數概念以實現對 響應時間和 響應大小更準確的描述,因為對於日誌中的響應時間,算數平均值的參考意義不大

  8. 高效能:本著誰產生的日誌誰處理的思想,日誌分析指令碼loganalyse要在web伺服器上定時執行,因而loganalyse的高效率低資源也是重中之重。經測試,在筆者的伺服器上(磁碟:3*7200rpm組RAID5,千兆區域網),對於不同的日誌檔案,處理速度在20000行/s~30000行/s之間

實現思路

分析指令碼( log_analyse.py)部署到各臺 web server,並通過 crontab 設定定時執行。 log_analyse.py利用python的re模組通過正則表示式對日誌進行分析處理,取得 uri、 args、 時間當前、 狀態碼、 響應大小、 響應時間、 server name 等資訊並進行初步加工然後儲存進MongoDB。檢視指令碼( log_show.py)作為入口即可對所有web server的日誌進行分析檢視,至於實時性,取決於web server上 log_analyse.py指令碼的執行頻率。

前提規範

  • 各臺server的日誌檔案按統一路徑存放

  • 日誌格式、日誌命名規則保持一致(程式碼中規定格式為xxx.access.log)

  • 每天的0點日誌切割

日誌格式決定了程式碼中的正則表示式,是可根據自己情況參考 analyse_config.py中的正則定義進行定製的)。專案中預定義的日誌格式對應如下:

  1. log_format  access  '$remote_addr - [$time_local] "$request" '

  2. '$status $body_bytes_sent $request_time "$http_referer" '

  3. '"$http_user_agent" - $http_x_forwarded_for';

對於其他格式的 nginx 日誌或者 Apache 日誌,按照如上原則,稍作就可以使用該工具分析處理。

對於異常日誌的處理

如果想靠空格或雙引號來分割各段的話,主要問題是面對各種不規範的記錄時(原因不一而足,而且也是樣式繁多),無法做到將各種異常都考慮在內,所以專案中採用了 re模組而不是簡單的 split()函式的原因。程式碼裡對一些“可以容忍”的異常記錄通過一些判斷邏輯予以處理;對於“無法容忍”的異常記錄則返回空字串並將日誌記錄於檔案。
其實對於上述的這些不規範的請求,最好的辦法是在nginx中定義日誌格式時,用一個特殊字元作為分隔符,例如“|”。這樣就不需要re模組,直接字串分割就能正確的獲取到各段(效能會好些)。

log_show.py使用說明:

幫助資訊

  1. [[email protected] ~]$ log_show --help

  2. Usage:

  3.  log_show <site_name>[options] request [distribution [<request>]|detail <uri>]

  4.  log_show <site_name>[options] ip [distribution <ip>|detail <ip>]

  5.  log_show <site_name>[options] error [distribution <error_code>|detail <error_code>]

  6. Options:

  7. -h --help                   Showthis screen.

  8. -f --from<start_time>Start time.Format:%y%m%d[%H[%M]],%H and%M is optional

  9. -t --to <end_time>End time.Formatis same as--from

  10. -l --limit <num>Number of lines in output,0 means no limit.[default:5]

  11. -s --server <server>Web server hostname

  12. -g --group_by <group_by>Groupby every minute, every ten minutes, every hour or every day,

  13.                              valid values:"minute","ten_min","hour","day".[default: hour]

  14.  distribution                Show distribution(about hits,bytes,time,etc) of:

  15.                              all or specific 'request', the specific 'ip', the specific 'error_code'in every period.

  16. Periodis specific by--group_by

  17.  detail                      Show details of:

  18.                              detail 'args' analyse of the specific 'uri'(if it has args);

  19.                              detail 'uri' analyse of the specific 'ip'or'error_code'

  20. Notice: it's best to put 'request_uri', 'uri' and 'ip' in quotation marks.

所有示例均可通過 -f, -t, -s引數對 起始時間和 指定server進行過濾

request子命令

對指定站點今日已入庫的資料進行分析

  1. [[email protected] ~]$ log_show api request -l 3

  2. ====================

  3. Total_hits:

    相關推薦

    Python開源專案介紹網站日誌分析工具

    CodingGo技術社群自由的程式設計學習平臺 日誌分析 日誌分析在web系統中故障排查、效能分析方面有著非常重要的作用。該工具的側重點不是通常的PV,UV等展示,而是在指定時間段內提供細粒度(最小分鐘級別,即一分鐘內的日誌做抽象和彙總)的異常定位和效能分析。 環境安裝

    Python開源專案介紹用zmail簡單地發郵件

    CodingGo技術社群自由的程式設計學習平臺傳送郵件是個很簡單的需求,但是在實際的使用中依然碰

    mapReduce網站日誌分析專案案例資料清洗

    一、資料情況分析 1.1 資料情況回顧   該論壇資料有兩部分:   (1)歷史資料約56GB,統計到2012-05-29。這也說明,在2012-05-29之前,日誌檔案都在一個檔案裡邊,採用了追加寫入的方式。   (2)自2013-05-30起,每天生成一個數據檔案

    Hadoop學習筆記—20.網站日誌分析專案案例(一)專案介紹

    網站日誌分析專案案例(一)專案介紹:當前頁面一、專案背景與資料情況1.1 專案來源  本次要實踐的資料日誌來源於國內某技術學習論壇,該論壇由某培訓機構主辦,匯聚了眾多技術學習者,每天都有人發帖、回帖,如圖1所示。圖1 專案來源網站-技術學習論壇  本次實踐的目的就在於通過對該

    推薦|23個Python爬蟲開源專案程式碼爬取微信、淘寶、豆瓣、知乎、微博等

    今天為大家整理了23個Python爬蟲專案。整理的原因是,爬蟲入門簡單快速,也非常適合新入門的小夥伴培養信心。所有連結指向GitHub,祝大家玩的愉快 1、WechatSogou [1]– 微信公眾號爬蟲。 基於搜狗微信搜尋的微信公眾號爬蟲介面,可以擴充套件成基於搜狗搜尋的爬

    Hadoop學習筆記—20.網站日誌分析專案案例(三)統計分析

    網站日誌分析專案案例(三)統計分析:當前頁面一、藉助Hive進行統計1.1 準備工作:建立分割槽表  為了能夠藉助Hive進行統計分析,首先我們需要將清洗後的資料存入Hive中,那麼我們需要先建立一張表。這裡我們選擇分割槽表,以日期作為分割槽的指標,建表語句如下:(這裡關鍵之

    IOServer開源專案介紹及原始碼分析

    IOServer是國人寫的一個仿MINA的輕量級伺服器框架。最近因為使用MINA的緣故,閱讀了IOServer的原始碼,順便熟悉了J2SE NIO部分。 IOServer的設計目標是手機網遊伺服器框架。支援TCP協議。 這個框架的使用方法和MINA類似;它有一個Proto

    Hadoop學習筆記—20.網站日誌分析專案案例(二)資料清洗

    網站日誌分析專案案例(二)資料清洗:當前頁面一、資料情況分析1.1 資料情況回顧  該論壇資料有兩部分:  (1)歷史資料約56GB,統計到2012-05-29。這也說明,在2012-05-29之前,日誌檔案都在一個檔案裡邊,採用了追加寫入的方式。  (2)自2013-05-

    python專案NBA比賽資料分析

    該專案來源於實驗樓,我這裡只是記錄下自己做完專案的筆記和總結(實驗樓是py2的程式碼,我則是用的py3)。 專案目的:通過分析之前的比賽資料,得到每個隊伍的狀態的特徵表達,利用機器學習訓練迴歸模型,從而對新的比賽進行預測。 為了掌握並實現這個專案,需瞭解一下幾個問題:

    Python基礎語法介紹面向對象編程

    Python 面向對象 面向對象編程 面向對象編程,簡稱OOP:是一種解決軟件服用的設計和編程方法。這種方法把軟件系統中相似的邏輯操作、數據、狀態等以類的形式描述出來,通過對象實例在軟件系統中復用,從而提高軟件開發效率。 類和對象 類:一個事物的抽象,定義了一類事物的屬性和行為。類具有繼承,多態的特性

    網站日誌分析網站優化有什麼幫助

    網站日誌能給seo帶來很多意想不到的資料情況,通過分析這些資料可以使優化變得更為主動。網站日誌對蜘蛛和訪客的瀏覽情況的提供了詳細資料。通過分析相關參考資料,可以對蜘蛛行為及網站有更清晰的認識,並且能夠提供相應優化方案。 從不同角度分析可以得出不同結論,比如從蜘蛛行為角度,我們可以看出蜘蛛的瀏覽行為,包括蜘蛛

    網站日誌分析網站優化有什麽幫助

    屏蔽 robots 分析 網站構架 ref 效率 打開速度慢 參考 質量 網站日誌能給seo帶來很多意想不到的數據情況,通過分析這些數據可以使優化變得更為主動。網站日誌對蜘蛛和訪客的瀏覽情況的提供了詳細數據。通過分析相關參考數據,可以對蜘蛛行為及網站有更清晰的認識,並且能夠

    ELK6.2.3日誌分析工具elasticsearch x-pack6.2.3許可權管理Security模組和內建角色介紹

    啟動elasticsearch 1.自定義設定密碼,三個內建賬號根據提示設定密碼 ./bin/x-pack/setup-passwords interactive 2.自動生成密碼 ./bin/x-pack/setup-passwords auto 3.在kibana通過DSL語句設定密碼

    python實戰專案示例 揭祕微信朋友圈

    通過python,連線到微信賬號,收集好友性別、城市、個性簽名等公開資訊,使用 Python 進行資料統計與分析,得到你專屬的朋友圈的分析報告! 1、準備工作 1.1 環境配置 編譯環境:Windows10 程式語言:Python3.6 編譯器IDE:Pycharm 瀏覽器工

    2018年最火熱的十個Python開源專案!你用過哪些?

      過去一個月,MyBridge 從將近 250 個 Python 開源專案中選擇出了最好的 10 個專案: 這些專案在 GitHub 上平均獲得 1140 個 star 專案涵蓋話題包括效能分析、圖表提取、HTTP 框架、HTTP API、程式碼重構和論文爬取等

    基於SparkSQL的網站日誌分析實戰

    基於SparkSQL的網站日誌分析實戰 使用者行為日誌概述           使用者行為日誌:使用者每次訪問網站時所有的行為資料(訪問、瀏覽、搜尋、點選...)   &n

    精選Python開源專案Top10!

    作者 | MyBridge 譯者 | Linstancy 整理 | Jane 出品 | AI科技大本營   【導讀】過去一個月裡,我們對近 250 個 Python 開源專案進行了排名,並挑選出熱度前 10 的

    2018年10月份GitHub上最熱門的Python開源專案

    本文我們將和大家介紹 GitHub 上 10 月份最受歡迎的 11 個Python開源專案,在這些專案中,你有在用或用過哪些呢? 1TensorFlow-Course https://github.com/open-source-for-science/TensorFlow-Cour

    SEO自學網體系教程第十一節網站日誌與SEO

      首先,說說怎麼檢視網站日誌。以IIS中介軟體為例。     選擇一個網站 --> 高階設定 ,記住這裡的ID   然後到系統盤(日誌檔案一般在系統盤),一般在C:inetpublogsLogFiles 

    大資料技術學習筆記之Hadoop框架基礎3-網站日誌分析及MapReduce過程詳解

    一、回顧     -》Hadoop啟動方式         -》單個程序             sbin/h