Apache 和 Squid 是兩種著名的代理緩存軟件,但Squid 較 Apache 而言是專(zhuān)門(mén)的代理緩存服務(wù)器軟件,其代理緩存的功能強(qiáng)大,支持 HTTP/1.1 協(xié)議,其緩存對(duì)象也較多;并且 Squid 的緩存管理模塊和訪問(wèn)控制模塊功能很強(qiáng)大。它們有一定的相似之處,所以在分析完Apache日志后再看Squid日志就容易多了。
Squid的日志系統(tǒng)相對(duì)比較完善,常用日志分為如下兩個(gè):分別是access.log 和cache.log。
作用:
access.log;客戶(hù)端使用代理服務(wù)器的記錄文件,訪問(wèn)日志位置在squid.conf中修改;
cache.log; 緩存在運(yùn)行時(shí)的狀態(tài)信息和調(diào)試信息,一般情況下容量不大。緩存日志位置在squid.conf中修改。
當(dāng)代理服務(wù)器運(yùn)行時(shí),所有客戶(hù)提出的請(qǐng)求,以及Squid處理的結(jié)果都會(huì)被記錄在/var/log/squid/access.log文件里,使得access.log文件的增長(zhǎng)速度很快,通常會(huì)mount一個(gè)比較大的磁盤(pán)作為存儲(chǔ)空間。
注意:squid下還有一類(lèi)日志,store.log它記錄每個(gè)進(jìn)入和離開(kāi)緩存的目標(biāo)信息,參考價(jià)值不大,這里不做介紹。
下面給出一條典型的Squid訪問(wèn)日志:
對(duì)這條日志的分析見(jiàn)表1。
結(jié)果/狀態(tài)碼 TCP_MISS 表示沒(méi)有命中緩存,TCP_HIT 表示命中。
下面通過(guò)一個(gè)實(shí)用的Shell命令獲取比較詳細(xì)的命中情況:
# cat access.log|awk '{print$4}'|sort|uniq -c|sort -nr
33 TCP_MISS/200
2 TCP_MISS/302
2 TCP_MEM_HIT/302
1 TCP_MISS/503
當(dāng)然狀態(tài)信息(TCP_MISS、TCP_MEM等)不止這幾個(gè)。總的來(lái)說(shuō),HIT表示命中,而TCP_MISS表示未命中。
下列標(biāo)簽可能出現(xiàn)在access.log文件的第四個(gè)域。
TCP_HIT :Squid發(fā)現(xiàn)請(qǐng)求資源最新的拷貝,并立即發(fā)送到客戶(hù)端。
TCP_MISS :Squid沒(méi)有請(qǐng)求資源的cache拷貝。
TCP_REFERSH_HIT :Squid發(fā)現(xiàn)請(qǐng)求資源舊拷貝,并發(fā)送確認(rèn)請(qǐng)求到原始服務(wù)器。
TCP_IMS_HIT:客戶(hù)端發(fā)送確認(rèn)請(qǐng)求,Squid發(fā)送更新的內(nèi)容到客戶(hù)端,而不聯(lián)系原始服務(wù)器。
TCP_NEGATIVE_HIT:在對(duì)原始服務(wù)器的請(qǐng)求導(dǎo)致HTTP錯(cuò)誤時(shí),Squid會(huì)緩存這個(gè)響應(yīng)。在短時(shí)間內(nèi)對(duì)這些資源的重復(fù)請(qǐng)求,導(dǎo)致了是否命中。negative_ttl指令控制這些錯(cuò)誤被Cache的時(shí)間數(shù)量。
TCP_MEM_HIT :Squid在內(nèi)存cache里發(fā)現(xiàn)請(qǐng)求資源的有效拷貝,并將其立即發(fā)送到客戶(hù)端。
TCP_DENIED :因?yàn)閔ttp_access或http_reply_access規(guī)則,客戶(hù)端的請(qǐng)求被拒絕了。
TCP_REDIRECT :重定向程序告訴Squid產(chǎn)生一個(gè)HTTP重定向到新的URI,這一功能比較常見(jiàn),例如可以用來(lái)實(shí)現(xiàn)訪問(wèn)控制、移除廣告、本地鏡像等,用個(gè)實(shí)例來(lái)說(shuō),某個(gè)用戶(hù)請(qǐng)求http://www.example.com/a.htm重定向程序?qū)⒄?qǐng)求改變成另一個(gè)URI,http://www.example.com/b.htm。以下是重定向日志的實(shí)例:
TCP_REDIRECT/301 277 GET http://redirector.you.com/videoplayback?3257|0|3|8 HIER_NONE comp3
(1).Squid 時(shí)間戳(1356693954.014)看起來(lái)有點(diǎn)別扭,下面通過(guò)腳本將時(shí)間戳換算成我們認(rèn)識(shí)的時(shí)間:
#perl -pe's/^d+.d+/localtime($&)/e;' access.log
經(jīng)過(guò)Perl程序變化后的的時(shí)間直觀的顯示出來(lái),便于查看。
(2).將Squid輸出日志格式變形的腳本
有時(shí)需要?jiǎng)討B(tài)顯示squid日志的第3、8、7列內(nèi)容,以便更符合我們?nèi)粘g覽習(xí)慣,就可以使用如下命令:
# tail -f /var/log/squid/access.log |awk'{print$3 "" $8""$7}'
192.168.150.148-http://safebrowsing-cache.google.com/safebrowsing/rd/ChFnb29nLXBoaXNoLXNoYXZhchAAGMPiDyDM4g8yBkPxAwD_Aw
192.168.150.148-http://safebrowsing-cache.google.com/safebrowsing/rd/ChFnb29nLXBoaXNoLXNoYXZhchAAGM3iDyDg4g8qB1DxAwD__wEyBU3xAwAH
192.168.150.148-http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml
192.168.150.148-http://fxfeeds.mozilla.com/firefox/headlines.xml
192.168.150.148-http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xm
(3).可以將一個(gè)squid日志記錄行分割成多個(gè)字段,使用參數(shù)傳回需要的字段。
# tail -f/var/log/squid/access.log | awk '{print$3 " " $8 " " $7}'
這里選擇的是客戶(hù)IP及取回內(nèi)容字段,顯示如下:
192.168.150.146-http://jump.qq.com/clienturl_simp_80192.168.150.147- http://mm.china.com/zh_cn/images/tit_liangzhuang.gif192.168.150.148 -http://ly.zzip.com.cn/movie/list.aspx?
(4).還可以根據(jù)日志分析緩存命中率:
#cat access.log|awk ‘{print$4}’|sort|uniq -c|sort -nr
9568 TCP_IMS_HIT/304
6313 TCP_HIT/200
2133 TCP_MISS/200
1568 TCP_MISS/206
587 TCP_MEM_HIT/200
4.Squid日志位置:
Squid的配置文件位于/etc/squid/squid.conf,可在這個(gè)文件加入如下一行內(nèi)容,以定義日志文件的存儲(chǔ)位置。
Access_log/var/log/squid/access.log squid
下面以RHEL5為例,/var/log/squid/access.log
除了命令行方式以外,采用Squid報(bào)告分析產(chǎn)生器(SARG)也是一種更直觀的方法。
1)使用Scalar腳本分析squid日志
scalar腳本使用簡(jiǎn)單,速度快,報(bào)告詳細(xì),免去手工分析的麻煩。分析功能包括:每小時(shí)流量、文件大小比例、文件擴(kuò)展名比例、狀態(tài)碼比例、命中率比例等。其格式與流量統(tǒng)計(jì)報(bào)告分別如圖2、圖3所示。Scalar的下載地址是http://scalar.risk.az/scalar095/scalar.awk。
SARG是一款Squid日志分析工具,它采用html格式輸出,詳細(xì)列出了每一位用戶(hù)訪問(wèn)Internet的站點(diǎn)信息、時(shí)間占用信息、排名、連接次數(shù)及訪問(wèn)量等。其效果如圖4所示。
圖4 Webmin下調(diào)用SARG輸出Squid日志
Firewall Analyzer是另一個(gè)分析Squid日志工具,如圖5所示。圖中顯示了Squid Cache的使用情況,TCP_HIT表示發(fā)現(xiàn)請(qǐng)求資源的拷貝,而TCP_MISS表示沒(méi)有請(qǐng)求資源的緩存拷貝,TCP_MISS達(dá)到了76.79%,正常情況下TCP_HIT的數(shù)值要遠(yuǎn)大于TCP_MISS的值如果反過(guò)來(lái)那么說(shuō)明代理服務(wù)器出現(xiàn)故障應(yīng)立即檢查。
圖 5用FirewallAnalyzer分析Squid日志
在access.log文件當(dāng)前路徑下輸入以下命令也可以輸出統(tǒng)計(jì)信息:
#cat access.log|gawk ‘{print $4}’|sort|uniq -c|sort-nr
此外,還有幾款squid專(zhuān)用日志分析工具也比較易用,例如LightSquid、Calamari、Squid-Graph以及Squid Analyzer。不過(guò)它們最近已不升級(jí)這里就不做介紹,感興趣的讀者可以去網(wǎng)上查閱資料。最后,統(tǒng)一利用OSSIM分析日志大家可以參閱《UNIX/Linux網(wǎng)絡(luò)日志分析與流量監(jiān)控》一書(shū)。