Apache 和 Squid 是兩種著名的代理緩存軟件,但Squid 較 Apache 而言是專門的代理緩存服務器軟件,其代理緩存的功能強大,支持 HTTP/1.1 協議,其緩存對象也較多;并且 Squid 的緩存管理模塊和訪問控制模塊功能很強大。它們有一定的相似之處,所以在分析完Apache日志后再看Squid日志就容易多了。
Squid的日志系統相對比較完善,常用日志分為如下兩個:分別是access.log 和cache.log。
作用:
access.log;客戶端使用代理服務器的記錄文件,訪問日志位置在squid.conf中修改;
cache.log; 緩存在運行時的狀態信息和調試信息,一般情況下容量不大。緩存日志位置在squid.conf中修改。
當代理服務器運行時,所有客戶提出的請求,以及Squid處理的結果都會被記錄在/var/log/squid/access.log文件里,使得access.log文件的增長速度很快,通常會mount一個比較大的磁盤作為存儲空間。
注意:squid下還有一類日志,store.log它記錄每個進入和離開緩存的目標信息,參考價值不大,這里不做介紹。
下面給出一條典型的Squid訪問日志:
對這條日志的分析見表1。
結果/狀態碼 TCP_MISS 表示沒有命中緩存,TCP_HIT 表示命中。
下面通過一個實用的Shell命令獲取比較詳細的命中情況:
# 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
當然狀態信息(TCP_MISS、TCP_MEM等)不止這幾個??偟膩碚f,HIT表示命中,而TCP_MISS表示未命中。
下列標簽可能出現在access.log文件的第四個域。
TCP_HIT :Squid發現請求資源最新的拷貝,并立即發送到客戶端。
TCP_MISS :Squid沒有請求資源的cache拷貝。
TCP_REFERSH_HIT :Squid發現請求資源舊拷貝,并發送確認請求到原始服務器。
TCP_IMS_HIT:客戶端發送確認請求,Squid發送更新的內容到客戶端,而不聯系原始服務器。
TCP_NEGATIVE_HIT:在對原始服務器的請求導致HTTP錯誤時,Squid會緩存這個響應。在短時間內對這些資源的重復請求,導致了是否命中。negative_ttl指令控制這些錯誤被Cache的時間數量。
TCP_MEM_HIT :Squid在內存cache里發現請求資源的有效拷貝,并將其立即發送到客戶端。
TCP_DENIED :因為http_access或http_reply_access規則,客戶端的請求被拒絕了。
TCP_REDIRECT :重定向程序告訴Squid產生一個HTTP重定向到新的URI,這一功能比較常見,例如可以用來實現訪問控制、移除廣告、本地鏡像等,用個實例來說,某個用戶請求http://www.example.com/a.htm重定向程序將請求改變成另一個URI,http://www.example.com/b.htm。以下是重定向日志的實例:
TCP_REDIRECT/301 277 GET http://redirector.you.com/videoplayback?3257|0|3|8 HIER_NONE comp3
?。?).Squid 時間戳(1356693954.014)看起來有點別扭,下面通過腳本將時間戳換算成我們認識的時間:
#perl -pe's/^d+.d+/localtime($&)/e;' access.log
經過Perl程序變化后的的時間直觀的顯示出來,便于查看。
(2).將Squid輸出日志格式變形的腳本
有時需要動態顯示squid日志的第3、8、7列內容,以便更符合我們日常瀏覽習慣,就可以使用如下命令:
# 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).可以將一個squid日志記錄行分割成多個字段,使用參數傳回需要的字段。
# tail -f/var/log/squid/access.log | awk '{print$3 " " $8 " " $7}'
這里選擇的是客戶IP及取回內容字段,顯示如下:
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).還可以根據日志分析緩存命中率:
#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,可在這個文件加入如下一行內容,以定義日志文件的存儲位置。
Access_log/var/log/squid/access.log squid
下面以RHEL5為例,/var/log/squid/access.log
除了命令行方式以外,采用Squid報告分析產生器(SARG)也是一種更直觀的方法。
1)使用Scalar腳本分析squid日志
scalar腳本使用簡單,速度快,報告詳細,免去手工分析的麻煩。分析功能包括:每小時流量、文件大小比例、文件擴展名比例、狀態碼比例、命中率比例等。其格式與流量統計報告分別如圖2、圖3所示。Scalar的下載地址是http://scalar.risk.az/scalar095/scalar.awk。
SARG是一款Squid日志分析工具,它采用html格式輸出,詳細列出了每一位用戶訪問Internet的站點信息、時間占用信息、排名、連接次數及訪問量等。其效果如圖4所示。
圖4 Webmin下調用SARG輸出Squid日志
Firewall Analyzer是另一個分析Squid日志工具,如圖5所示。圖中顯示了Squid Cache的使用情況,TCP_HIT表示發現請求資源的拷貝,而TCP_MISS表示沒有請求資源的緩存拷貝,TCP_MISS達到了76.79%,正常情況下TCP_HIT的數值要遠大于TCP_MISS的值如果反過來那么說明代理服務器出現故障應立即檢查。
圖 5用FirewallAnalyzer分析Squid日志
在access.log文件當前路徑下輸入以下命令也可以輸出統計信息:
#cat access.log|gawk ‘{print $4}’|sort|uniq -c|sort-nr
此外,還有幾款squid專用日志分析工具也比較易用,例如LightSquid、Calamari、Squid-Graph以及Squid Analyzer。不過它們最近已不升級這里就不做介紹,感興趣的讀者可以去網上查閱資料。最后,統一利用OSSIM分析日志大家可以參閱《UNIX/Linux網絡日志分析與流量監控》一書。