Web應(yīng)用的日志及其使用場景

日志就是數(shù)據(jù)

日志是數(shù)據(jù),數(shù)據(jù)卻不一定是日志。日志主要用于記錄發(fā)生過的事件,寫入和查詢是常用操作,不推薦對其進(jìn)行修改操作,日志過量或者過期的時候,需要清理。

日志是應(yīng)用不可分割的一部分,沒有日志的應(yīng)用是殘缺的。依賴日志,我們可以追溯故障、找出BUG、統(tǒng)計數(shù)據(jù)和分析用戶行為。適當(dāng)?shù)娜罩究梢蕴峁椭?,日志太少和太多都會造成不良影響?/p>

本文討論了Web應(yīng)用的HTTP日志、應(yīng)用日志和用戶日志。

HTTP日志

正規(guī)部署的Web應(yīng)用,都會使用類似Nginx, Apache這樣的Web服務(wù)器來做反向代理以及負(fù)載均衡。這樣一來,就由這一層服務(wù)來搜集HTTP日志。即便是開發(fā)模式下,使用開發(fā)Web服務(wù)器,也會產(chǎn)生HTTP日志。一般的HTTP日志,至少會包含這些字段:日志產(chǎn)生時間、HTTP method、url path、HTTP協(xié)議版本、響應(yīng)狀態(tài)碼、響應(yīng)字節(jié)大小、訪問者ip、代理服務(wù)器ip、請求處理耗時、Referrer、User Agent。

  • 根據(jù)訪問者ip、代理服務(wù)器ip分析用戶身份

    • 我們知道,訪問Web服務(wù)的過程中,用戶發(fā)起的請求,可能會經(jīng)過層層轉(zhuǎn)發(fā)之后,才能抵達(dá)最終的Web內(nèi)容提供者的服務(wù)器。每次請求轉(zhuǎn)發(fā),實際上是代理服務(wù)器發(fā)起一個新的請求,對接的服務(wù)器識別到的訪問者ip就會變成代理服務(wù)器的ip,為了解決這個問題,代理服務(wù)器會將原始請求客戶端的ip也保存起來,一并添加到轉(zhuǎn)發(fā)的請求中。這樣一來,最終內(nèi)容提供者的服務(wù)器就會識別到兩個ip,一個是訪問者ip,另一個是代理服務(wù)器ip。

    • 互聯(lián)網(wǎng)上,部分訪問者不愿意提供自身的真實信息(這類人包含隱私保護(hù)用戶和黑客等),就會使用代理服務(wù)器掩蓋自身的真實ip,或者是偽造虛假的ip,我們可以從訪問日志中初窺端倪。

    • 日志中只有訪問者ip,沒有代理服務(wù)器ip,可以判斷:該訪問者的訪問不經(jīng)過代理服務(wù)器,或者該訪問者是一個高匿名的代理服務(wù)器;日志中的訪問者ip和代理服務(wù)器ip相同,可以判斷:該訪問者使用了匿名代理服務(wù)器;日志中的訪問者ip和代理服務(wù)器ip不同,可以判斷:該訪問者使用了透明代理服務(wù)器,或者該訪問者使用了欺騙性代理服務(wù)器。

  • 根據(jù)訪問者ip短時間的出現(xiàn)次數(shù),判斷是否受到攻擊

    • 每個網(wǎng)站,根據(jù)其流行程度,可以制定出一份不同時間間隔、正常訪問量閾值的報表。對比這份報表,和我們監(jiān)控的每個ip在單位時間范圍內(nèi)的訪問量,我們可以分析出該ip是否正在進(jìn)行違規(guī)訪問操作。

    • 例如,某個ip在一分鐘之內(nèi)訪問網(wǎng)站1000次,而其他ip只有每分鐘幾十次,正常閾值是100,那么這個ip就可以劃入重點(diǎn)監(jiān)控范圍,繼續(xù)分析其訪問的url path,訪問的方法類型等,判斷它是否正在違規(guī)操作,一旦確認(rèn),就可以進(jìn)行封禁ip的操作。

  • 根據(jù)User Agent分析客戶端類型

    • Web請求中,一般會包含一個字段用來描述發(fā)起請求的客戶端版本類型信息,例如Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36,有的Web服務(wù)器為了提高兼容性,會根據(jù)客戶端的版本情況,返回不同的響應(yīng),以提高用戶體驗。當(dāng)然,還可以根據(jù)客戶端類型,統(tǒng)計分析網(wǎng)站訪問者的客戶端環(huán)境分布情況。

    • 各大搜索引擎,都有自己的爬蟲機(jī)器人。這些爬蟲機(jī)器人,會根據(jù)網(wǎng)站的開放情況,來爬取其網(wǎng)頁信息,大多數(shù)開放的網(wǎng)站,都十分歡迎搜索引擎的爬蟲機(jī)器人,借此提高其搜索排名。

    • 數(shù)據(jù)分析公司,會到感興趣的網(wǎng)站上爬取內(nèi)容,分析數(shù)據(jù),生成行業(yè)報表。這種對網(wǎng)站內(nèi)容提供者沒什么好處的訪問,就不那么受歡迎了,特別是數(shù)據(jù)分析公司的爬蟲,不是那么規(guī)范的情況下。網(wǎng)站內(nèi)容提供者限制非瀏覽器和搜索引擎爬蟲之后,數(shù)據(jù)分析公司的爬蟲,一般就會偽裝成二者,進(jìn)行內(nèi)容爬取。爬蟲攻防戰(zhàn),值得大書特書了,這里就不細(xì)說。

  • 根據(jù)響應(yīng)狀態(tài)碼,判斷請求和響應(yīng)的狀態(tài)

    • HTTP響應(yīng)狀態(tài)碼,大致分為四類:成功響應(yīng)200299,重定向響應(yīng)300399,客戶端請求錯誤400~499, 服務(wù)器響應(yīng)錯誤500~599。

    • 短時間大量出現(xiàn)重定向響應(yīng),可以判斷為網(wǎng)站的鏈接可能有反復(fù)循環(huán)的情況,可以根據(jù)url情況加以排查。

    • 短時間大量出現(xiàn)客戶端請求錯誤,可以判斷為:1、網(wǎng)站提供了錯誤的url path,2、爬蟲機(jī)器人正在暴力掃描網(wǎng)站,3、網(wǎng)站攻擊者正在攻擊網(wǎng)站。具體情況再根據(jù)真實響應(yīng)碼和url判斷。

    • 短時間大量出現(xiàn)服務(wù)器響應(yīng)錯誤,可以判斷為:1、Web應(yīng)用代碼出現(xiàn)BUG(響應(yīng)碼500),2、Web應(yīng)用進(jìn)程出現(xiàn)問題(響應(yīng)碼502),3、Web應(yīng)用出現(xiàn)性能瓶頸(響應(yīng)碼504)

  • 根據(jù)url path數(shù)量分布,分析網(wǎng)站熱點(diǎn)

    • 統(tǒng)計url path的分布,對熱點(diǎn)url path進(jìn)行排名,可以得知網(wǎng)站的熱點(diǎn)在哪里,從而進(jìn)行熱點(diǎn)分流,性能優(yōu)化,也可以為運(yùn)營團(tuán)隊提供數(shù)據(jù)支撐。
  • 根據(jù)響應(yīng)字節(jié)大小和請求處理耗時,分析響應(yīng)緩慢的原因

    • 已知某個url path的頁面訪問非常慢,根據(jù)HTTP日志進(jìn)行分析時,可以查看其響應(yīng)字節(jié)大小和請求處理耗時。

    • 響應(yīng)字節(jié)很小,比如少于1M,請求處理耗時也很少,比如少于100ms,那么:1、有可能是客戶端的帶寬很少,或者網(wǎng)絡(luò)故障導(dǎo)致的。2、有可能該url path頁面需要加載其他資源,并依賴于其他資源來顯示頁面,而訪問其他資源緩慢導(dǎo)致該url path的頁面緩慢。

    • 響應(yīng)字節(jié)較大,比如超過10M,請求處理耗時很少,比如不超過1s,那么原因很簡單,代理服務(wù)器到客戶端的網(wǎng)絡(luò)帶寬限制導(dǎo)致的。

    • 響應(yīng)字節(jié)很小,比如少于1M,請求處理耗時很大,比如超過5s,那么原因很簡單,Web應(yīng)用在處理該url path請求的時候,因為性能、網(wǎng)絡(luò)、算法或數(shù)據(jù)處理量過大的原因?qū)е碌摹?/p>

    • 響應(yīng)字節(jié)較大,比如超過10M,請求處理耗時也很大,比如超過5s,那么原因很簡單,就是文件過大導(dǎo)致下載緩慢。

  • 根據(jù)Referrer設(shè)置防盜鏈,統(tǒng)計流量來源

    • 我們在云平臺上存儲了圖片,提供自己的網(wǎng)站使用,云平臺按照資源訪問量收費(fèi)。這時候,其他網(wǎng)站盜用了我們的圖片鏈接,我們就會為其他網(wǎng)站的流量付費(fèi),這時候,就需要用到防盜鏈。當(dāng)然,我們自己網(wǎng)站的資源,不想提供給其他網(wǎng)站使用時,也可以設(shè)置防盜鏈。

    • 請求中帶的Referrer鍵,其值是跳轉(zhuǎn)到當(dāng)前請求的上一個請求的完整url,我們在網(wǎng)頁中嵌入了圖片,加載圖片時Referrer就會帶上該網(wǎng)頁的url,百度上搜索一個關(guān)鍵字出來的網(wǎng)頁,上面有廣告鏈接,點(diǎn)擊之后,訪問該廣告的網(wǎng)頁,也會在Referrer中帶上百度的url。

    • 通過Web應(yīng)用中,根據(jù)請求的Referrer,是否在白名單之內(nèi),來決定是否返回正確的內(nèi)容,就是防盜鏈技術(shù)的核心思想了。如果沒有提供Referrer,那就是直接訪問了,網(wǎng)站也可以自行決定是否提供內(nèi)容。當(dāng)然,其他網(wǎng)站也可以使用偽裝和匿名技術(shù)來突破防盜鏈的防御,所以,防盜鏈技術(shù),防君子不防小人。

    • 廣告網(wǎng)頁通過Referrer統(tǒng)計流量來源,從而為對方付費(fèi),這就是廣告來源統(tǒng)計和計費(fèi)的核心。當(dāng)然,也可以通過url上添加參數(shù)的情況來進(jìn)行來源統(tǒng)計,例如我們常用的邀請碼機(jī)制,url類似http://www.example.com/register?code=xxxxxx,其中的code=xxxxxx,就是給網(wǎng)站說明了,訪問網(wǎng)頁的來源。

應(yīng)用日志

應(yīng)用日志是Web應(yīng)用直接產(chǎn)生的。應(yīng)用日志可以接入到操作系統(tǒng)的日志系統(tǒng)中,例如syslog,也可以自行輸出到標(biāo)準(zhǔn)輸出中。Web應(yīng)用產(chǎn)生的異常錯誤,會輸出到標(biāo)準(zhǔn)錯誤輸出中。由于Web應(yīng)用在生產(chǎn)環(huán)境都是以daemon方式運(yùn)行(后臺運(yùn)行),所以負(fù)責(zé)監(jiān)控和管理Web應(yīng)用進(jìn)程的守護(hù)進(jìn)程(例如supervisor),就要搜集這些應(yīng)用日志,以便查詢和分析。

分析應(yīng)用日志時,一般需要結(jié)合日志上下文進(jìn)行分析,因為一旦拋出異常錯誤,日志一般不是一行就能記錄完的。異常日志一般會以代碼調(diào)用追溯的方式來展現(xiàn)。例如:

RuntimeError                              Traceback (most recent call last)
<ipython-input-5-e3097d5bf3e6> in <module>()
----> 1 test1()

<ipython-input-2-ee75a0b1ab43> in test1()
      1 def test1():
      2     print('test1 start')
----> 3     test2()
      4     print('test1 end')
      5 

<ipython-input-4-a2967c4ec095> in test2()
      1 def test2():
      2     print('test2 start')
----> 3     raise RuntimeError('runtime error')
      4     print('test2 end')
      5 

RuntimeError: runtime error

根據(jù)錯誤提示可以知道,在運(yùn)行test1這個無參數(shù)的函數(shù)時,發(fā)生的異常,追溯到test1定義內(nèi)部的第三行,調(diào)用test2這個無參數(shù)的函數(shù)時,再次追溯到test2定義內(nèi)部的第三行,源頭上,正是這里發(fā)生了異常,去掉這一行,修復(fù)異常,再次運(yùn)行函數(shù)test1時,就能成功了。

用戶日志

用戶日志的產(chǎn)生,需要在Web應(yīng)用代碼中實現(xiàn),常規(guī)做法,是將用戶日志存儲到數(shù)據(jù)庫中,如果將用戶日志存入到文件中,則可以歸納到應(yīng)用日志中了,當(dāng)然,這是一種不嚴(yán)謹(jǐn)?shù)膭澐帧?/p>

我們知道,HTTP是無狀態(tài)的協(xié)議,開發(fā)者利用cookie技術(shù)識別不同用戶,這樣一來,我們就可以區(qū)分相同客戶端ip和相同電腦下的不同用戶。有了更加細(xì)致的用戶日志,我們可以做更加精細(xì)的統(tǒng)計分析。

  • 行為審計

    • 用戶日志可以記錄用戶在網(wǎng)站的所有行為,包括不限于瀏覽頁面、修改資料、發(fā)送消息、付款等等,甚至可以細(xì)化到點(diǎn)擊了哪些按鈕。通過分析這些行為,購物網(wǎng)站可以分析出用戶大致喜歡什么類型商品,內(nèi)部網(wǎng)站可以審計用戶的操作是否符合規(guī)范等等。
  • 熱點(diǎn)分析

    • 根據(jù)用戶日志將用戶進(jìn)行分類,就可以分析網(wǎng)站更受什么樣的人群的喜愛。通過用戶喜愛商品的排名統(tǒng)計,可以分析出網(wǎng)站的最受歡迎的商品。根據(jù)商品銷量排名,可以分析出網(wǎng)站的暢銷商品。
  • 數(shù)據(jù)分析師可以根據(jù)這些用戶日志,挖掘出更多的價值和隱藏的信息。

總結(jié)

本文詳細(xì)討論了HTTP日志的分析使用,并對應(yīng)用日志和用戶日志的常規(guī)使用做出了說明,通過閱讀本文,可以對Web應(yīng)用下的日志和其使用案例有了初步的了解,更多的詳情,可以參考更加詳細(xì)的資料。

無戒365訓(xùn)練營 第八篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,692評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,285評論 6 342
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》,我們講述了瀏覽器端請求發(fā)起過程,通過DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 81,800評論 21 356
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,621評論 0 20
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,872評論 11 349

友情鏈接更多精彩內(nèi)容