日志是數(shù)據(jù),數(shù)據(jù)卻不一定是日志。日志主要用于記錄發(fā)生過(guò)的事件碱蒙,寫(xiě)入和查詢(xún)是常用操作,不推薦對(duì)其進(jìn)行修改操作段化,日志過(guò)量或者過(guò)期的時(shí)候,需要清理造成。
日志是應(yīng)用不可分割的一部分显熏,沒(méi)有日志的應(yīng)用是殘缺的。依賴(lài)日志晒屎,我們可以追溯故障喘蟆、找出BUG缓升、統(tǒng)計(jì)數(shù)據(jù)和分析用戶(hù)行為。適當(dāng)?shù)娜罩究梢蕴峁椭坦欤罩咎俸吞喽紩?huì)造成不良影響港谊。
本文討論了Web應(yīng)用的HTTP日志、應(yīng)用日志和用戶(hù)日志橙弱。
HTTP日志
正規(guī)部署的Web應(yīng)用歧寺,都會(huì)使用類(lèi)似Nginx, Apache這樣的Web服務(wù)器來(lái)做反向代理以及負(fù)載均衡。這樣一來(lái)棘脐,就由這一層服務(wù)來(lái)搜集HTTP日志斜筐。即便是開(kāi)發(fā)模式下,使用開(kāi)發(fā)Web服務(wù)器蛀缝,也會(huì)產(chǎn)生HTTP日志顷链。一般的HTTP日志,至少會(huì)包含這些字段:日志產(chǎn)生時(shí)間屈梁、HTTP method嗤练、url path、HTTP協(xié)議版本在讶、響應(yīng)狀態(tài)碼煞抬、響應(yīng)字節(jié)大小、訪(fǎng)問(wèn)者ip真朗、代理服務(wù)器ip、請(qǐng)求處理耗時(shí)僧诚、Referrer遮婶、User Agent。
-
根據(jù)訪(fǎng)問(wèn)者ip湖笨、代理服務(wù)器ip分析用戶(hù)身份
我們知道旗扑,訪(fǎng)問(wèn)Web服務(wù)的過(guò)程中,用戶(hù)發(fā)起的請(qǐng)求慈省,可能會(huì)經(jīng)過(guò)層層轉(zhuǎn)發(fā)之后臀防,才能抵達(dá)最終的Web內(nèi)容提供者的服務(wù)器。每次請(qǐng)求轉(zhuǎn)發(fā)边败,實(shí)際上是代理服務(wù)器發(fā)起一個(gè)新的請(qǐng)求袱衷,對(duì)接的服務(wù)器識(shí)別到的訪(fǎng)問(wèn)者ip就會(huì)變成代理服務(wù)器的ip,為了解決這個(gè)問(wèn)題笑窜,代理服務(wù)器會(huì)將原始請(qǐng)求客戶(hù)端的ip也保存起來(lái)致燥,一并添加到轉(zhuǎn)發(fā)的請(qǐng)求中。這樣一來(lái)排截,最終內(nèi)容提供者的服務(wù)器就會(huì)識(shí)別到兩個(gè)ip嫌蚤,一個(gè)是訪(fǎng)問(wèn)者ip辐益,另一個(gè)是代理服務(wù)器ip。
互聯(lián)網(wǎng)上脱吱,部分訪(fǎng)問(wèn)者不愿意提供自身的真實(shí)信息(這類(lèi)人包含隱私保護(hù)用戶(hù)和黑客等)智政,就會(huì)使用代理服務(wù)器掩蓋自身的真實(shí)ip,或者是偽造虛假的ip箱蝠,我們可以從訪(fǎng)問(wèn)日志中初窺端倪续捂。
日志中只有訪(fǎng)問(wèn)者ip,沒(méi)有代理服務(wù)器ip抡锈,可以判斷:該訪(fǎng)問(wèn)者的訪(fǎng)問(wèn)不經(jīng)過(guò)代理服務(wù)器疾忍,或者該訪(fǎng)問(wèn)者是一個(gè)高匿名的代理服務(wù)器;日志中的訪(fǎng)問(wèn)者ip和代理服務(wù)器ip相同床三,可以判斷:該訪(fǎng)問(wèn)者使用了匿名代理服務(wù)器一罩;日志中的訪(fǎng)問(wèn)者ip和代理服務(wù)器ip不同,可以判斷:該訪(fǎng)問(wèn)者使用了透明代理服務(wù)器撇簿,或者該訪(fǎng)問(wèn)者使用了欺騙性代理服務(wù)器聂渊。
-
根據(jù)訪(fǎng)問(wèn)者ip短時(shí)間的出現(xiàn)次數(shù),判斷是否受到攻擊
每個(gè)網(wǎng)站四瘫,根據(jù)其流行程度汉嗽,可以制定出一份不同時(shí)間間隔、正常訪(fǎng)問(wèn)量閾值的報(bào)表找蜜。對(duì)比這份報(bào)表饼暑,和我們監(jiān)控的每個(gè)ip在單位時(shí)間范圍內(nèi)的訪(fǎng)問(wèn)量,我們可以分析出該ip是否正在進(jìn)行違規(guī)訪(fǎng)問(wèn)操作洗做。
例如弓叛,某個(gè)ip在一分鐘之內(nèi)訪(fǎng)問(wèn)網(wǎng)站1000次,而其他ip只有每分鐘幾十次诚纸,正常閾值是100撰筷,那么這個(gè)ip就可以劃入重點(diǎn)監(jiān)控范圍,繼續(xù)分析其訪(fǎng)問(wèn)的url path畦徘,訪(fǎng)問(wèn)的方法類(lèi)型等毕籽,判斷它是否正在違規(guī)操作,一旦確認(rèn)井辆,就可以進(jìn)行封禁ip的操作关筒。
-
根據(jù)User Agent分析客戶(hù)端類(lèi)型
Web請(qǐng)求中,一般會(huì)包含一個(gè)字段用來(lái)描述發(fā)起請(qǐng)求的客戶(hù)端版本類(lèi)型信息杯缺,例如
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36
平委,有的Web服務(wù)器為了提高兼容性,會(huì)根據(jù)客戶(hù)端的版本情況夺谁,返回不同的響應(yīng)廉赔,以提高用戶(hù)體驗(yàn)肉微。當(dāng)然,還可以根據(jù)客戶(hù)端類(lèi)型蜡塌,統(tǒng)計(jì)分析網(wǎng)站訪(fǎng)問(wèn)者的客戶(hù)端環(huán)境分布情況碉纳。各大搜索引擎,都有自己的爬蟲(chóng)機(jī)器人馏艾。這些爬蟲(chóng)機(jī)器人劳曹,會(huì)根據(jù)網(wǎng)站的開(kāi)放情況,來(lái)爬取其網(wǎng)頁(yè)信息琅摩,大多數(shù)開(kāi)放的網(wǎng)站铁孵,都十分歡迎搜索引擎的爬蟲(chóng)機(jī)器人,借此提高其搜索排名房资。
數(shù)據(jù)分析公司蜕劝,會(huì)到感興趣的網(wǎng)站上爬取內(nèi)容,分析數(shù)據(jù)轰异,生成行業(yè)報(bào)表岖沛。這種對(duì)網(wǎng)站內(nèi)容提供者沒(méi)什么好處的訪(fǎng)問(wèn),就不那么受歡迎了搭独,特別是數(shù)據(jù)分析公司的爬蟲(chóng)婴削,不是那么規(guī)范的情況下。網(wǎng)站內(nèi)容提供者限制非瀏覽器和搜索引擎爬蟲(chóng)之后牙肝,數(shù)據(jù)分析公司的爬蟲(chóng)唉俗,一般就會(huì)偽裝成二者,進(jìn)行內(nèi)容爬取配椭。爬蟲(chóng)攻防戰(zhàn)虫溜,值得大書(shū)特書(shū)了,這里就不細(xì)說(shuō)颂郎。
-
根據(jù)響應(yīng)狀態(tài)碼吼渡,判斷請(qǐng)求和響應(yīng)的狀態(tài)
HTTP響應(yīng)狀態(tài)碼容为,大致分為四類(lèi):成功響應(yīng)200299乓序,重定向響應(yīng)300399,客戶(hù)端請(qǐng)求錯(cuò)誤400~499, 服務(wù)器響應(yīng)錯(cuò)誤500~599坎背。
短時(shí)間大量出現(xiàn)重定向響應(yīng)替劈,可以判斷為網(wǎng)站的鏈接可能有反復(fù)循環(huán)的情況,可以根據(jù)url情況加以排查得滤。
短時(shí)間大量出現(xiàn)客戶(hù)端請(qǐng)求錯(cuò)誤陨献,可以判斷為:1、網(wǎng)站提供了錯(cuò)誤的url path懂更,2眨业、爬蟲(chóng)機(jī)器人正在暴力掃描網(wǎng)站急膀,3、網(wǎng)站攻擊者正在攻擊網(wǎng)站龄捡。具體情況再根據(jù)真實(shí)響應(yīng)碼和url判斷卓嫂。
短時(shí)間大量出現(xiàn)服務(wù)器響應(yīng)錯(cuò)誤,可以判斷為:1聘殖、Web應(yīng)用代碼出現(xiàn)BUG(響應(yīng)碼500)晨雳,2、Web應(yīng)用進(jìn)程出現(xiàn)問(wèn)題(響應(yīng)碼502)奸腺,3餐禁、Web應(yīng)用出現(xiàn)性能瓶頸(響應(yīng)碼504)
-
根據(jù)url path數(shù)量分布,分析網(wǎng)站熱點(diǎn)
- 統(tǒng)計(jì)url path的分布突照,對(duì)熱點(diǎn)url path進(jìn)行排名帮非,可以得知網(wǎng)站的熱點(diǎn)在哪里,從而進(jìn)行熱點(diǎn)分流绷旗,性能優(yōu)化喜鼓,也可以為運(yùn)營(yíng)團(tuán)隊(duì)提供數(shù)據(jù)支撐。
-
根據(jù)響應(yīng)字節(jié)大小和請(qǐng)求處理耗時(shí)衔肢,分析響應(yīng)緩慢的原因
已知某個(gè)url path的頁(yè)面訪(fǎng)問(wèn)非常慢庄岖,根據(jù)HTTP日志進(jìn)行分析時(shí),可以查看其響應(yīng)字節(jié)大小和請(qǐng)求處理耗時(shí)角骤。
響應(yīng)字節(jié)很小隅忿,比如少于1M,請(qǐng)求處理耗時(shí)也很少邦尊,比如少于100ms背桐,那么:1、有可能是客戶(hù)端的帶寬很少蝉揍,或者網(wǎng)絡(luò)故障導(dǎo)致的链峭。2、有可能該url path頁(yè)面需要加載其他資源又沾,并依賴(lài)于其他資源來(lái)顯示頁(yè)面弊仪,而訪(fǎng)問(wèn)其他資源緩慢導(dǎo)致該url path的頁(yè)面緩慢。
響應(yīng)字節(jié)較大杖刷,比如超過(guò)10M励饵,請(qǐng)求處理耗時(shí)很少,比如不超過(guò)1s滑燃,那么原因很簡(jiǎn)單役听,代理服務(wù)器到客戶(hù)端的網(wǎng)絡(luò)帶寬限制導(dǎo)致的。
響應(yīng)字節(jié)很小,比如少于1M典予,請(qǐng)求處理耗時(shí)很大甜滨,比如超過(guò)5s,那么原因很簡(jiǎn)單瘤袖,Web應(yīng)用在處理該url path請(qǐng)求的時(shí)候艳吠,因?yàn)樾阅堋⒕W(wǎng)絡(luò)孽椰、算法或數(shù)據(jù)處理量過(guò)大的原因?qū)е碌摹?/p>
響應(yīng)字節(jié)較大昭娩,比如超過(guò)10M,請(qǐng)求處理耗時(shí)也很大黍匾,比如超過(guò)5s栏渺,那么原因很簡(jiǎn)單,就是文件過(guò)大導(dǎo)致下載緩慢锐涯。
-
根據(jù)Referrer設(shè)置防盜鏈磕诊,統(tǒng)計(jì)流量來(lái)源
我們?cè)谠破脚_(tái)上存儲(chǔ)了圖片,提供自己的網(wǎng)站使用纹腌,云平臺(tái)按照資源訪(fǎng)問(wèn)量收費(fèi)霎终。這時(shí)候,其他網(wǎng)站盜用了我們的圖片鏈接升薯,我們就會(huì)為其他網(wǎng)站的流量付費(fèi)莱褒,這時(shí)候,就需要用到防盜鏈涎劈。當(dāng)然广凸,我們自己網(wǎng)站的資源,不想提供給其他網(wǎng)站使用時(shí)蛛枚,也可以設(shè)置防盜鏈谅海。
請(qǐng)求中帶的Referrer鍵,其值是跳轉(zhuǎn)到當(dāng)前請(qǐng)求的上一個(gè)請(qǐng)求的完整url蹦浦,我們?cè)诰W(wǎng)頁(yè)中嵌入了圖片扭吁,加載圖片時(shí)Referrer就會(huì)帶上該網(wǎng)頁(yè)的url,百度上搜索一個(gè)關(guān)鍵字出來(lái)的網(wǎng)頁(yè)盲镶,上面有廣告鏈接侥袜,點(diǎn)擊之后,訪(fǎng)問(wèn)該廣告的網(wǎng)頁(yè)徒河,也會(huì)在Referrer中帶上百度的url系馆。
通過(guò)Web應(yīng)用中送漠,根據(jù)請(qǐng)求的Referrer顽照,是否在白名單之內(nèi),來(lái)決定是否返回正確的內(nèi)容,就是防盜鏈技術(shù)的核心思想了代兵。如果沒(méi)有提供Referrer尼酿,那就是直接訪(fǎng)問(wèn)了,網(wǎng)站也可以自行決定是否提供內(nèi)容植影。當(dāng)然裳擎,其他網(wǎng)站也可以使用偽裝和匿名技術(shù)來(lái)突破防盜鏈的防御,所以思币,防盜鏈技術(shù)鹿响,防君子不防小人。
廣告網(wǎng)頁(yè)通過(guò)Referrer統(tǒng)計(jì)流量來(lái)源谷饿,從而為對(duì)方付費(fèi)惶我,這就是廣告來(lái)源統(tǒng)計(jì)和計(jì)費(fèi)的核心。當(dāng)然博投,也可以通過(guò)url上添加參數(shù)的情況來(lái)進(jìn)行來(lái)源統(tǒng)計(jì)绸贡,例如我們常用的邀請(qǐng)碼機(jī)制,url類(lèi)似
http://www.example.com/register?code=xxxxxx
毅哗,其中的code=xxxxxx
听怕,就是給網(wǎng)站說(shuō)明了,訪(fǎng)問(wèn)網(wǎng)頁(yè)的來(lái)源虑绵。
應(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)生的異常錯(cuò)誤,會(huì)輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出中宏所。由于Web應(yīng)用在生產(chǎn)環(huán)境都是以daemon方式運(yùn)行(后臺(tái)運(yùn)行)酥艳,所以負(fù)責(zé)監(jiān)控和管理Web應(yīng)用進(jìn)程的守護(hù)進(jìn)程(例如supervisor),就要搜集這些應(yīng)用日志爬骤,以便查詢(xún)和分析充石。
分析應(yīng)用日志時(shí),一般需要結(jié)合日志上下文進(jìn)行分析霞玄,因?yàn)橐坏伋霎惓ee(cuò)誤骤铃,日志一般不是一行就能記錄完的。異常日志一般會(huì)以代碼調(diào)用追溯的方式來(lái)展現(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ù)錯(cuò)誤提示可以知道惰爬,在運(yùn)行test1這個(gè)無(wú)參數(shù)的函數(shù)時(shí),發(fā)生的異常惫企,追溯到test1定義內(nèi)部的第三行撕瞧,調(diào)用test2這個(gè)無(wú)參數(shù)的函數(shù)時(shí)陵叽,再次追溯到test2定義內(nèi)部的第三行,源頭上丛版,正是這里發(fā)生了異常巩掺,去掉這一行,修復(fù)異常页畦,再次運(yùn)行函數(shù)test1時(shí)胖替,就能成功了。
用戶(hù)日志
用戶(hù)日志的產(chǎn)生豫缨,需要在Web應(yīng)用代碼中實(shí)現(xiàn)独令,常規(guī)做法,是將用戶(hù)日志存儲(chǔ)到數(shù)據(jù)庫(kù)中好芭,如果將用戶(hù)日志存入到文件中记焊,則可以歸納到應(yīng)用日志中了,當(dāng)然栓撞,這是一種不嚴(yán)謹(jǐn)?shù)膭澐帧?/p>
我們知道遍膜,HTTP是無(wú)狀態(tài)的協(xié)議,開(kāi)發(fā)者利用cookie技術(shù)識(shí)別不同用戶(hù)瓤湘,這樣一來(lái)瓢颅,我們就可以區(qū)分相同客戶(hù)端ip和相同電腦下的不同用戶(hù)。有了更加細(xì)致的用戶(hù)日志弛说,我們可以做更加精細(xì)的統(tǒng)計(jì)分析挽懦。
-
行為審計(jì)
- 用戶(hù)日志可以記錄用戶(hù)在網(wǎng)站的所有行為,包括不限于瀏覽頁(yè)面木人、修改資料信柿、發(fā)送消息、付款等等醒第,甚至可以細(xì)化到點(diǎn)擊了哪些按鈕渔嚷。通過(guò)分析這些行為,購(gòu)物網(wǎng)站可以分析出用戶(hù)大致喜歡什么類(lèi)型商品稠曼,內(nèi)部網(wǎng)站可以審計(jì)用戶(hù)的操作是否符合規(guī)范等等形病。
-
熱點(diǎn)分析
- 根據(jù)用戶(hù)日志將用戶(hù)進(jìn)行分類(lèi),就可以分析網(wǎng)站更受什么樣的人群的喜愛(ài)霞幅。通過(guò)用戶(hù)喜愛(ài)商品的排名統(tǒng)計(jì)漠吻,可以分析出網(wǎng)站的最受歡迎的商品。根據(jù)商品銷(xiāo)量排名司恳,可以分析出網(wǎng)站的暢銷(xiāo)商品途乃。
數(shù)據(jù)分析師可以根據(jù)這些用戶(hù)日志,挖掘出更多的價(jià)值和隱藏的信息扔傅。
總結(jié)
本文詳細(xì)討論了HTTP日志的分析使用耍共,并對(duì)應(yīng)用日志和用戶(hù)日志的常規(guī)使用做出了說(shuō)明烫饼,通過(guò)閱讀本文,可以對(duì)Web應(yīng)用下的日志和其使用案例有了初步的了解划提,更多的詳情,可以參考更加詳細(xì)的資料邢享。
無(wú)戒365訓(xùn)練營(yíng) 第八篇