13.2.3 access.log對端編碼
下列編碼可能出現(xiàn)在access.log的第9域。請參考10.10節(jié)關(guān)于Squid如何對cache丟失情況,選擇有
效的下一跳。
NONE
這指明Squid對本次請求,不會(huì)與任何其他服務(wù)器(鄰居或原始服務(wù)器)通信。它通常與cache命中、
拒絕請求、cache管理請求、錯(cuò)誤、和所有的ICP查詢這些類型聯(lián)合出現(xiàn)。
DIRECT
Squid直接轉(zhuǎn)發(fā)請求到原始服務(wù)器。該域的第2半部分顯示原始服務(wù)器的IP地址,或主機(jī)名--假如禁止
了log_ip_on_direct。
SIBLING_HIT
在姐妹cache返回ICP或HTCP命中后,Squid發(fā)送請求到姐妹cache。
PARENT_HIT
在父cache返回ICP或HTCP命中后,Squid發(fā)送請求到父cache。
DEFAULT_PARENT
Squid選擇該父cache,因?yàn)槠湓趕quid.conf的cache_peer行里被標(biāo)志為default。
FIRST_UP_PARENT
Squid轉(zhuǎn)發(fā)請求到該父cache,因?yàn)樗俏挥谝阎钴S列表里的第一個(gè)父cache。
FIRST_PARENT_MISS
Squid轉(zhuǎn)發(fā)請求到該父cache,它第一個(gè)響應(yīng)ICP/HTCP丟失消息。換句話說,對這個(gè)特殊的
ICP/HTCP查詢,在這個(gè)特殊時(shí)刻,被選中的父cache有最佳的往返時(shí)間(RTT)。注意標(biāo)準(zhǔn)RTT可能
被人工矯正過,取決于cache_peer指令的weight選項(xiàng)。
CLOSEST_PARENT_MISS
Squid選擇該父cache,因?yàn)樗鼒?bào)告到原始服務(wù)器的RTT最低。這點(diǎn)僅在2個(gè)cache都激活了netdb,
并且原始服務(wù)器(或在同一子網(wǎng)內(nèi)的其他server)返回ICMP ping消息。
CLOSEST_PARENT
這點(diǎn)類似CLOSEST_PARENT_MISS,除了RTT計(jì)算不是來自ICP/HTCP響應(yīng)消息外。代替的,它們
來自Squid保留的更老的計(jì)算方式,例如netdb交換功能。
CLOSEST_DIRECT
Squid基于netdb算法,轉(zhuǎn)發(fā)請求到原始服務(wù)器。這點(diǎn)在滿足下述任何條件時(shí)發(fā)生:
- 1)在Squid和原始服務(wù)器之間的RTT小于配置的minimum_direct_rtt值。
- 2)在Squid和原始服務(wù)器之間的標(biāo)準(zhǔn)路由跳數(shù)少于配置的minimum_direct_hops值。
- 3)在ICP/HTCP響應(yīng)里返回的RTT值,指示Squid離原始服務(wù)器近于任何其他鄰居。
ROUNDROBIN_PARENT
Squid轉(zhuǎn)發(fā)請求到該父cache,因?yàn)樵O(shè)置了round-robin選項(xiàng),并且它有最低的使用計(jì)數(shù)器。
CD_PARENT_HIT
Squid基于cache摘要算法(見10.7節(jié))轉(zhuǎn)發(fā)請求到該父cache。
CD_SIBLING_HIT
Squid基于cache摘要算法轉(zhuǎn)發(fā)請求到該姐妹cache。
CARP
Squid選擇該父cache,基于cache數(shù)組路由協(xié)議算法(見10.9節(jié))。
ANY_PARENT
作為最后的手段,Squid選擇該父cache,因?yàn)闆]有其他方法能選擇可行的下一跳。
注意大部分上述編碼可能以TIMEOUT_開頭,這表明在等待ICP/HTCP響應(yīng)時(shí)發(fā)生超時(shí)。例如:
1066038165.382 345 193.233.46.21 TCP_MISS/200 2836
GET http://www./home/./images/home.jpg
TIMEOUT_CLOSEST_DIRECT/213.219.122.19 image/jpeg
可使用icp_query_timeout指令來調(diào)整超時(shí)。
13.2.4 影響access.log的配置指令
下列配置文件指令會(huì)影響到access.log。
13.2.4.1 log_icp_queries
該指令默認(rèn)激活,導(dǎo)致squid記錄所有的ICP查詢。假如運(yùn)行了一個(gè)繁忙的父cache,這點(diǎn)可能讓
access.log文件變得巨大。為了節(jié)省磁盤空間,可禁止該指令:
log_icp_queries off
假如禁止了ICP查詢的日志,我建議你監(jiān)視查詢數(shù)量--通過cache管理器或SNMP。
13.2.4.2 emulate_httpd_log
access.log文件有2種格式:普通格式和原始格式。普通格式就如同大部分HTTP服務(wù)器(如Apache)
的日志格式一樣。它包含的信息少于Squid的原始格式。然而,假如運(yùn)行Squid在代理人模式下(見
15章),你可能想要普通日志文件格式。普通格式或許也對你現(xiàn)有的日志文件分析工具有用。使用該
指令來激活普通格式:
emulate_httpd_log on
請見http://www./Daemon/User/Config/Logging.html#common-logfile-format 關(guān)于
該格式的描述。
13.2.4.3 log_mime_hdrs
使用log_mime_hdrs讓squid記錄HTTP請求和響應(yīng)的頭部:
log_mime_headers on
在激活時(shí),squid追加請求和響應(yīng)頭部到access.log。這會(huì)在每行增加2個(gè)域。每個(gè)域都以方括號(hào)引用
起來,便于分析。某些字符會(huì)被編碼來保證日志文件可讀。Table 13-2顯示了這些編碼方案。
Table 13-2. Character encoding rules for HTTP headers in access.log
Character |
Encoding |
Newline |
\n |
Carriage return |
\r |
Backslash |
\\ |
[ |
%5b |
] |
%5d |
% |
%25 |
ASCII 0-31 |
%xx (hexadecimal value) |
ASCII 127-255 |
%xx (hexadecimal value) |
13.2.4.4 log_fqdn
Squid默認(rèn)把客戶端IP地址放在access.log里。也可以記錄可用的主機(jī)名,激活如下指令:
log_fqdn on
這點(diǎn)讓Squid在接受到請求時(shí),對客戶端的地址發(fā)起反向DNS查詢。假如在請求完成時(shí)查到了主機(jī)名,
Squid就將它放在第3域。
13.2.4.5 ident_lookup_access
該訪問規(guī)則列表決定Squid是否對客戶端的TCP連接發(fā)起RFC 1413身份查詢。默認(rèn)情況下,Squid不
會(huì)發(fā)布身份查詢。為了激活這點(diǎn),簡單的增加一個(gè)或多個(gè)規(guī)則:
acl All src 0/0
ident_lookup_access allow All
假如在請求完成時(shí)查到了答案,Squid將其放在第8域。假如同時(shí)使用了HTTP驗(yàn)證,從驗(yàn)證得到的用
戶名會(huì)取代身份查詢答案。
13.2.4.6 log_ip_on_direct
當(dāng)Squid轉(zhuǎn)發(fā)cache丟失到原始服務(wù)器時(shí),它在第9域記錄原始服務(wù)器的IP地址??梢越惯@個(gè)指令,
以便squid記錄主機(jī)名:
log_ip_on_direct off
在此情形下,主機(jī)名來自于URI。假如URI包含了IP地址,Squid不會(huì)將其轉(zhuǎn)換為主機(jī)名。
13.2.4.7 client_netmask
該指令存在主要是為了保護(hù)用戶的隱私。不同于記錄完整的IP地址,你也可以掩蓋一些位。例如:
client_netmask 255.255.255.0
在此設(shè)置下,access.log里的所有客戶端IP地址的最后一個(gè)八位組是0:
1066036246.918 35 163.11.255.0 TCP_IMS_HIT/304 266 GET http://...
1066036246.932 16 163.11.255.0 TCP_IMS_HIT/304 266 GET http://...
1066036247.616 313 140.132.252.0 TCP_MISS/200 1079 GET http://...
1066036248.598 44459 140.132.252.0 TCP_MISS/500 1531 GET http://...
1066036249.230 17 170.210.173.0 TCP_IMS_HIT/304 265 GET http://...
1066036249.752 2135 140.132.252.0 TCP_MISS/200 50230 GET http://...
1066036250.467 4 170.210.173.0 TCP_IMS_HIT/304 265 GET http://...
1066036250.762 102 163.11.255.0 TCP_IMS_HIT/304 265 GET http://...
1066036250.832 20 163.11.255.0 TCP_IMS_HIT/304 266 GET http://...
1066036251.026 74 203.91.150.0 TCP_CLIENT_REFRESH_MISS/304 267 GET http://...
13.2.4.8 strip_query_terms
該指令是另一個(gè)隱私保護(hù)功能。在記錄請求前,Squid刪除了查詢條件。假如日志文件不幸落入壞人之
手,他們不會(huì)找到任何用戶名和密碼。當(dāng)該指令激活時(shí),在問號(hào)(?)之后的所有字節(jié)被刪除。例如,某
個(gè)URI如下:
http://auto.search./response.asp?MT=www.kimo.com.yw&srch=3&prov=&utf8
會(huì)被記錄為:
http://auto.search./response.asp?
13.2.4.9 uri_whitespace
早前我提到過出現(xiàn)在某些URI里的空格字符的問題。RFC申明URI必須不包括空格字符,但在實(shí)際中情
況并非如此。uri_whitespace指令指明Squid如何處理這種情況。允許的設(shè)置是:strip (default),
deny, allow, encode, 和chop。在這些設(shè)置里,strip,encode和chop保證URI域不包含任何空格
字符(空格字符會(huì)給access.log增加多余的域)。
allow設(shè)置允許請求不加修改的通過Squid。它很可能會(huì)給重定向器和日志文件解析器帶來麻煩。與之
相反的是deny設(shè)置,它導(dǎo)致Squid拒絕這種請求。用戶會(huì)接受到錯(cuò)誤消息,但請求仍帶著空格字符被
記錄到access.log。
假如設(shè)置為encode,Squid將空格字符按RFC 1738規(guī)范來編碼。這點(diǎn)其實(shí)用戶代理應(yīng)該先做到。
chop設(shè)置導(dǎo)致Squid把第一個(gè)空格字符后的URI都截?cái)唷?/font>
默認(rèn)設(shè)置是strip,它讓Squid從URI里移除空格字符。這確保日志文件解析器和重定向器工作正常,但
可能會(huì)破壞某些事情,例如不正確編碼的搜索引擎查詢。
13.2.4.10 buffered_logs
默認(rèn)情況下,Squid禁止寫cache.log文件的buffer,這允許你運(yùn)行tail -f 命令實(shí)時(shí)的觀察日志文件變
化。假如你認(rèn)為這點(diǎn)導(dǎo)致不必要的性能開銷,就可以禁用buffer:
buffered_logs off
然而,除非以完整debug模式運(yùn)行Squid,這點(diǎn)可能無關(guān)緊要。注意該選項(xiàng)僅僅影響cache.log。其他
的日志文件總使用非緩沖的寫方式。
13.2.5 access.log分析工具
access.log包含很多信息,遠(yuǎn)不止你簡單的瀏覽該文件所見。為了完整的瀏覽,必須使用第三方的日
志文件分析包。你可在Squid的web頁面的鏈接里,找到它們的列表?;蛘咧苯釉L問:
http://www./Scripts/.
最流行的工具之一是Calamaris -- 一個(gè)Perl腳本,解析日志文件并產(chǎn)生基于文本的或HTML的報(bào)告。
它提供關(guān)于會(huì)話的詳細(xì)分類包括請求方式、客戶端IP地址、原始服務(wù)器域名、內(nèi)容類型、文件名擴(kuò)展、
響應(yīng)size、以及更多。Calamaris也報(bào)告ICP查詢會(huì)話,甚至其他cache產(chǎn)品的日志分析。其站點(diǎn)是:
http://calamaris..
Squeezer以及它的派生Squeezer2,是Squid專有的分析工具。它們提供許多統(tǒng)計(jì),能幫助你了解
Squid的性能,特別是在有鄰居cache時(shí)。兩者都產(chǎn)生HTML文件作為輸出。站點(diǎn)的
Logfile Analysis頁有這些程序的鏈接。
Webalyzer是另一個(gè)有用工具。它運(yùn)行快速,并且產(chǎn)生帶表格和柱形統(tǒng)計(jì)表的HTML頁面。它原始是
設(shè)計(jì)成分析原始服務(wù)器的訪問日志的。盡管它能解析Squid的日志,但不會(huì)報(bào)告諸如命中率和響應(yīng)時(shí)間
的事件。它使用的某些條款不同于我的做法。例如,Webalyzer把任何請求叫做一個(gè)"命中",這不同于
cache命中。它也把"頁面"和"文件"加以區(qū)別。更多信息請?jiān)L問Webalyzer的主頁:
http://www./webalyzer/.
13.3 store.log
store.log記錄Squid關(guān)于存儲(chǔ)或刪除cache目標(biāo)的決定。對每個(gè)存在cache里的目標(biāo)、每個(gè)不可
cache的目標(biāo)、以及每個(gè)被輪換策略刪除的目標(biāo),Squid都會(huì)創(chuàng)建相應(yīng)的日志條目。該日志文件內(nèi)容既
包含了內(nèi)存cache又包含了磁盤cache。
store.log提供了下述不能從access.log獲取的內(nèi)容:
- 1)某個(gè)特定的響應(yīng)是否被cache。
- 2)cache目標(biāo)的文件號(hào)。對UFS基礎(chǔ)的存儲(chǔ)機(jī)制,你可轉(zhuǎn)換該文件號(hào)到路徑名,并且檢查
- cache文件的內(nèi)容。
- 3)響應(yīng)的內(nèi)容長度:包括Content-Length值和實(shí)際的body大小。
- 4)Date, Last-Modified, 和Expires頭部的值。
- 5)響應(yīng)的cache關(guān)鍵字(例如MD5哈希值)。
如你所見,這些都是相對低級的信息,在日常管理中可能用不上。除非你要做專業(yè)的分析,或打算
debug某程序,否則store.log可有可無。可以如下來禁止它:
cache_store_log none
跟其他日志文件一樣,Squid將最新的日志條目寫到該文件的末尾。某個(gè)給定的URI可能出現(xiàn)在日志文
件里多次。例如,它先被cache,然后刪除,接著又cache住。僅僅最近來的日志條目才反映目標(biāo)的
當(dāng)前值。
store.log是文本基礎(chǔ)的,看起來如下:
1067299212.411 RELEASE -1 FFFFFFFF A5964B32245AC98592D83F9B6EA10B8D 206
1067299212 1064287906 -1 application/octet-stream 6840/6840
GET http://download./msdownload/update/v3-19990518/cab...
1067299212.422 SWAPOUT 02 0005FD5F 6F34570785CACABC8DD01ABA5D73B392 200
1067299210 1057899600 -1 image/gif 1125/1125
GET http://forum./shf./images/nav_members1.gif
1067299212.641 RELEASE -1 FFFFFFFF B0616CB4B7280F67672A40647DD08474 200
1067299212 -1 -1 text/html -1/67191
GET http://www./
1067299212.671 RELEASE -1 FFFFFFFF 5ECD93934257594825659B596D9444BC 200
1067299023 1034873897 1067299023 image/jpeg 3386/3386
GET http://ebiz0./abc/ebiz/_EBIZ_3922eabf57d44e2a4c3e7cd234a...
1067299212.786 RELEASE -1 FFFFFFFF B388F7B766B307ADEC044A4099946A21 200
1067297755 -1 -1 text/html -1/566
GET http://www./pages/100303pic15.cfm
1067299212.837 RELEASE -1 FFFFFFFF ABC862C7107F3B7E9FC2D7CA01C8E6A1 304
1067299212 -1 1067299212 unknown -1/0
GET http://ebiz0./abc/ebiz/_EBIZ_3922eabf57d44e2a4c3e7cd234a...
1067299212.859 RELEASE -1 FFFFFFFF 5ED2726D4A3AD83CACC8A01CFDD6082B 304
1066940882 1065063803 -1 application/x-javascript -1/0
GET http://www./scripts/header_footer.js
每個(gè)日志條目包含如下13個(gè)域: