access.log包含很多信息,遠不止你簡(jiǎn)單的瀏覽該文件所見(jiàn)。為了完整的瀏覽,必須使用第三方的日志文件分析包。你可在Squid的web頁(yè)面的鏈接里,找到它們的列表?;蛘咧苯釉L(fǎng)問(wèn):http://www.squid-cache.org/Scripts/.
最流行的工具之一是Calamaris -- 一個(gè)Perl腳本,解析日志文件并產(chǎn)生基于文本的或HTML的報告。它提供關(guān)于會(huì )話(huà)的詳細分類(lèi)包括請求方式、客戶(hù)端IP地址、原始服務(wù)器域名、內容類(lèi)型、文件名擴展、響應size、以及更多。Calamaris也報告ICP查詢(xún)會(huì )話(huà),甚至其他cache產(chǎn)品的日志分析。其站點(diǎn)是:http://calamaris.cord.de.
Squeezer以及它的派生Squeezer2,是Squid專(zhuān)有的分析工具。它們提供許多統計,能幫助你了解Squid的性能,特別是在有鄰居cache時(shí)。兩者都產(chǎn)生HTML文件作為輸出。squid-cache.org站點(diǎn)的Logfile Analysis頁(yè)有這些程序的鏈接。
Webalyzer是另一個(gè)有用工具。它運行快速,并且產(chǎn)生帶表格和柱形統計表的HTML頁(yè)面。它原始是設計成分析原始服務(wù)器的訪(fǎng)問(wèn)日志的。盡管它能解析Squid的日志,但不會(huì )報告諸如命中率和響應時(shí)間的事件。它使用的某些條款不同于我的做法。例如,Webalyzer把任何請求叫做一個(gè)"命中",這不同于cache命中。它也把"頁(yè)面"和"文件"加以區別。更多信息請訪(fǎng)問(wèn)Webalyzer的主頁(yè):http://www.mrunix.net/webalyzer/.
store.log記錄Squid關(guān)于存儲或刪除cache目標的決定。對每個(gè)存在cache里的目標、每個(gè)不可cache的目標、以及每個(gè)被輪換策略刪除的目標,Squid都會(huì )創(chuàng )建相應的日志條目。該日志文件內容既包含了內存cache又包含了磁盤(pán)cache。
store.log提供了下述不能從access.log獲取的內容:
如你所見(jiàn),這些都是相對低級的信息,在日常管理中可能用不上。除非你要做專(zhuān)業(yè)的分析,或打算debug某程序,否則store.log可有可無(wú)??梢匀缦聛?lái)禁止它:
cache_store_log none
跟其他日志文件一樣,Squid將最新的日志條目寫(xiě)到該文件的末尾。某個(gè)給定的URI可能出現在日志文件里多次。例如,它先被cache,然后刪除,接著(zhù)又cache住。僅僅最近來(lái)的日志條目才反映目標的當前值。
store.log是文本基礎的,看起來(lái)如下:
1067299212.411 RELEASE -1 FFFFFFFF A5964B32245AC98592D83F9B6EA10B8D 206 1067299212 1064287906 -1 application/octet-stream 6840/6840 GET http://download.windowsupdate.com/msdownload/update/v3-19990518/cab... 1067299212.422 SWAPOUT 02 0005FD5F 6F34570785CACABC8DD01ABA5D73B392 200 1067299210 1057899600 -1 image/gif 1125/1125 GET http://forum.topsportsnet.com/shf./images/nav_members1.gif 1067299212.641 RELEASE -1 FFFFFFFF B0616CB4B7280F67672A40647DD08474 200 1067299212 -1 -1 text/html -1/67191 GET http://www.tlava.com/ 1067299212.671 RELEASE -1 FFFFFFFF 5ECD93934257594825659B596D9444BC 200 1067299023 1034873897 1067299023 image/jpeg 3386/3386 GET http://ebiz0.ipixmedia.com/abc/ebiz/_EBIZ_3922eabf57d44e2a4c3e7cd234a... 1067299212.786 RELEASE -1 FFFFFFFF B388F7B766B307ADEC044A4099946A21 200 1067297755 -1 -1 text/html -1/566 GET http://www.evenflowrocks.com/pages/100303pic15.cfm 1067299212.837 RELEASE -1 FFFFFFFF ABC862C7107F3B7E9FC2D7CA01C8E6A1 304 1067299212 -1 1067299212 unknown -1/0 GET http://ebiz0.ipixmedia.com/abc/ebiz/_EBIZ_3922eabf57d44e2a4c3e7cd234a... 1067299212.859 RELEASE -1 FFFFFFFF 5ED2726D4A3AD83CACC8A01CFDD6082B 304 1066940882 1065063803 -1 application/x-javascript -1/0 GET http://www.bellsouth.com/scripts/header_footer.js
每個(gè)日志條目包含如下13個(gè)域:
1065837334.045 SWAPOUT ... 554BACBD2CB2A0C38FF9BF4B2239A9E5 ... http://blah 1066031047.925 RELEASE ... 92AE17121926106EB12FA8054064CABA ... http://blah 1066031048.074 SWAPOUT ... 554BACBD2CB2A0C38FF9BF4B2239A9E5 ... http://blah
假如想要檢查某個(gè)特定的cache文件,你可稍費工夫將文件號轉換到路徑名。另外目錄號和L1和L2值也是必需的。在squid的源代碼里,storeUfsDirFullPath( )函數做這個(gè)事情??稍趕rc/fs/ufs/store_dir_ufs.c文件里找到它。如下短小的perl腳本模擬了當前算法:
#!/usr/bin/perl $L1 = 16; $L2 = 256; while (<>) { $filn = hex( 第13章 日志文件
13.1 cache.log cache.log包含多種消息,例如Squid的配置信息、性能警告、以及嚴重錯誤。如下是cache.log的
輸出樣本:
2003/09/29 12:09:45| Starting Squid Cache version 2.5.STABLE4 for i386- unknown-freebsd4.8... 2003/09/29 12:09:45| Process ID 18990 2003/09/29 12:09:45| With 1064 file descriptors available 2003/09/29 12:09:45| Performing DNS Tests... 2003/09/29 12:09:45| Successful DNS name lookup tests... 2003/09/29 12:09:45| DNS Socket created at 0.0.0.0, port 1154, FD 5 2003/09/29 12:09:45| Adding nameserver 24.221.192.5 from /etc/resolv.conf 2003/09/29 12:09:45| Adding nameserver 24.221.208.5 from /etc/resolv.conf 2003/09/29 12:09:45| helperOpenServers: Starting 5 'redirector.pl' processes 2003/09/29 12:09:45| Unlinkd pipe opened on FD 15 2003/09/29 12:09:45| Swap maxSize 10240 KB, estimated 787 objects 2003/09/29 12:09:45| Target number of buckets: 39 2003/09/29 12:09:45| Using 8192 Store buckets 2003/09/29 12:09:45| Max Mem size: 8192 KB 2003/09/29 12:09:45| Max Swap size: 10240 KB 2003/09/29 12:09:45| Rebuilding storage in /usr/local/squid/var/cache (CLEAN) 2003/09/29 12:09:45| Using Least Load store dir selection 2003/09/29 12:09:45| Set Current Directory to /usr/local/squid/var/cache 2003/09/29 12:09:45| Loaded Icons. 2003/09/29 12:09:45| Accepting HTTP connections at 0.0.0.0, port 3128, FD 16. 2003/09/29 12:09:45| Accepting ICP messages at 0.0.0.0, port 3130, FD 17. 2003/09/29 12:09:45| WCCP Disabled. 2003/09/29 12:09:45| Ready to serve requests.
每個(gè)cache.log條目以時(shí)間戳開(kāi)始,指示消息何時(shí)產(chǎn)生。本示例里的日志報告了squid的版本
(2.5.STABLE4),以及squid所運行的操作系統標識符(i386-unknown-freebsd4.8)。接下來(lái)
是進(jìn)程ID(18990)。許多cache.log條目看起來(lái)含義不明(例如Target number of buckets: 39)。
大多數正常情形下,可以忽略這些不易理解的條目。另一方面,你也許該仔細看一下本質(zhì)的配置細節,
例如名字服務(wù)器的地址,或HTTP服務(wù)器地址。本示例日志最后陳述了Squid準備接受請求。此時(shí)
Squid可以接受來(lái)自客戶(hù)端的HTTP連接。
通常,cache.log增長(cháng)緩慢。然而,不正常的HTTP事務(wù)或類(lèi)似的事件可以導致squid發(fā)布一個(gè)debug
消息。假如這樣的事件經(jīng)常發(fā)生(例如DOS攻擊、新的病毒、磁盤(pán)意外等),日志文件會(huì )增長(cháng)很快。
定期輪轉日志減少了用光磁盤(pán)的風(fēng)險。
主要的錯誤和異常條件最可能報告在cache.log里。我推薦存檔這些日志,以便以后回查事件的源頭。
當在Squid的郵件列表或類(lèi)似論壇描述這些故障時(shí),相應的cache.log非常有用。某些情形下,你也
許應該調大日志的debug級別,以便其他人能更好的理解和修正你的問(wèn)題。
13.1.1 debug級別
debug_options指令控制cache.log的日志級別。默認值(ALL,1)通常是最佳選擇。在更高級別上,
不重要的消息會(huì )混淆視線(xiàn)。請參考16.2節關(guān)于debug_options指令的完整描述。
請注意最高級別的debug(9或10)會(huì )對每個(gè)請求產(chǎn)生數千行日志,快速消耗磁盤(pán)空間和顯著(zhù)影響
squid的性能。
可以使用squid的-X命令行選項來(lái)對所有情形激活完整的debug。假如squid拒絕啟動(dòng),并且
squid.conf里的debug級別不足以診斷問(wèn)題時(shí),該模式特別有用。這也是在配置文件解析器解析到
debug_options指令之前,激活它的完整debug的好方法。在squid運行正常時(shí),請勿使用-X。
對運行的squid進(jìn)程,可使用squid的-k debug命令行選項來(lái)立刻激活完整debug。這個(gè)命令是循環(huán)
使用的:第一次調用打開(kāi)完整debug,第二次調用則關(guān)閉它。請見(jiàn)第5章關(guān)于-k選項的通用討論。
如前所述,完整debug會(huì )產(chǎn)生難以控制的日志增長(cháng)。這會(huì )使squid和操作系統運行緩慢。在極端情形
下,你會(huì )發(fā)現終端session在運行第一個(gè)squid -k debug命令后,變得沒(méi)有響應。在squid狂寫(xiě)日志
的同時(shí)讓操作無(wú)法進(jìn)行,這情形并不好。如下技巧也許有用,它獲取5秒鐘的debug數據快照:
% squid -k debug; sleep 5; squid -k debug
13.1.2 轉發(fā)cache.log消息到系統日志
為了讓squid發(fā)送cache.log消息的拷貝到系統日志,請使用-s命令行選項。僅僅在debug級別0和1
的消息會(huì )被轉發(fā)。級別0的消息以syslog級別LOG_WARNING記錄,級別1的消息以syslog級別
LOG_NOTICE記錄。所有消息使用LOCAL4的syslog設備。如下是配置syslogd的一個(gè)方法,以便這
些消息能保存下來(lái):
local4.warning /var/log/squid.log
在維護多個(gè)squid主機時(shí),使用syslog來(lái)記錄cache.log特別方便??梢耘渲妹總€(gè)本地syslog進(jìn)程,
轉發(fā)這些消息到中央日志主機,這樣就可在一個(gè)地方統一瀏覽所有cache日志。例如,可在
/etc/syslogd.conf里使用如下接口:
local4.notice @192.168.45.1
聯(lián)系客服