分享

squid日志3

 jijo 2009-04-27
2008-06-27 23:00

13.2.3 access.log对端编码


下列编码可能出现在access.log的第9域。请参考10.10节关于Squid如何对cache丢失情况,选择有

效的下一跳。


NONE

这指明Squid对本次请求,不会与任何其他服务器(邻居或原始服务器)通信。它通常与cache命中、

拒绝请求、cache管理请求、错误、和所有的ICP查询这些类型联合出现。


DIRECT

Squid直接转发请求到原始服务器。该域的第2半部分显示原始服务器的IP地址,或主机名--假如禁止

了log_ip_on_direct。


SIBLING_HIT

在姐妹cache返回ICP或HTCP命中后,Squid发送请求到姐妹cache。


PARENT_HIT

在父cache返回ICP或HTCP命中后,Squid发送请求到父cache。


DEFAULT_PARENT

Squid选择该父cache,因为其在squid.conf的cache_peer行里被标志为default。


FIRST_UP_PARENT

Squid转发请求到该父cache,因为它是位于已知活跃列表里的第一个父cache。


FIRST_PARENT_MISS

Squid转发请求到该父cache,它第一个响应ICP/HTCP丢失消息。换句话说,对这个特殊的

ICP/HTCP查询,在这个特殊时刻,被选中的父cache有最佳的往返时间(RTT)。注意标准RTT可能

被人工矫正过,取决于cache_peer指令的weight选项。


CLOSEST_PARENT_MISS

Squid选择该父cache,因为它报告到原始服务器的RTT最低。这点仅在2个cache都激活了netdb,

并且原始服务器(或在同一子网内的其他server)返回ICMP ping消息。


CLOSEST_PARENT

这点类似CLOSEST_PARENT_MISS,除了RTT计算不是来自ICP/HTCP响应消息外。代替的,它们

来自Squid保留的更老的计算方式,例如netdb交换功能。


CLOSEST_DIRECT

Squid基于netdb算法,转发请求到原始服务器。这点在满足下述任何条件时发生:



           
       
  • 1)在Squid和原始服务器之间的RTT小于配置的minimum_direct_rtt值。


       

       
  • 2)在Squid和原始服务器之间的标准路由跳数少于配置的minimum_direct_hops值。


       

       
  • 3)在ICP/HTCP响应里返回的RTT值,指示Squid离原始服务器近于任何其他邻居。


       

ROUNDROBIN_PARENT

Squid转发请求到该父cache,因为设置了round-robin选项,并且它有最低的使用计数器。


CD_PARENT_HIT

Squid基于cache摘要算法(见10.7节)转发请求到该父cache。


CD_SIBLING_HIT

Squid基于cache摘要算法转发请求到该姐妹cache。


CARP

Squid选择该父cache,基于cache数组路由协议算法(见10.9节)。


ANY_PARENT

作为最后的手段,Squid选择该父cache,因为没有其他方法能选择可行的下一跳。


注意大部分上述编码可能以TIMEOUT_开头,这表明在等待ICP/HTCP响应时发生超时。例如:


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指令来调整超时。




13.2.4 影响access.log的配置指令


下列配置文件指令会影响到access.log。


13.2.4.1 log_icp_queries

该指令默认激活,导致squid记录所有的ICP查询。假如运行了一个繁忙的父cache,这点可能让

access.log文件变得巨大。为了节省磁盘空间,可禁止该指令:


log_icp_queries off

假如禁止了ICP查询的日志,我建议你监视查询数量--通过cache管理器或SNMP。


13.2.4.2 emulate_httpd_log

access.log文件有2种格式:普通格式和原始格式。普通格式就如同大部分HTTP服务器(如Apache)

的日志格式一样。它包含的信息少于Squid的原始格式。然而,假如运行Squid在代理人模式下(见

15章),你可能想要普通日志文件格式。普通格式或许也对你现有的日志文件分析工具有用。使用该

指令来激活普通格式:


emulate_httpd_log on

请见http://www./Daemon/User/Config/Logging.html#common-logfile-format 关于

该格式的描述。


13.2.4.3 log_mime_hdrs

使用log_mime_hdrs让squid记录HTTP请求和响应的头部:


log_mime_headers on

在激活时,squid追加请求和响应头部到access.log。这会在每行增加2个域。每个域都以方括号引用

起来,便于分析。某些字符会被编码来保证日志文件可读。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默认把客户端IP地址放在access.log里。也可以记录可用的主机名,激活如下指令:


log_fqdn on

这点让Squid在接受到请求时,对客户端的地址发起反向DNS查询。假如在请求完成时查到了主机名,

Squid就将它放在第3域。


13.2.4.5 ident_lookup_access

该访问规则列表决定Squid是否对客户端的TCP连接发起RFC 1413身份查询。默认情况下,Squid不

会发布身份查询。为了激活这点,简单的增加一个或多个规则:


acl All src 0/0
            ident_lookup_access allow All

假如在请求完成时查到了答案,Squid将其放在第8域。假如同时使用了HTTP验证,从验证得到的用

户名会取代身份查询答案。


13.2.4.6 log_ip_on_direct

当Squid转发cache丢失到原始服务器时,它在第9域记录原始服务器的IP地址。可以禁止这个指令,

以便squid记录主机名:


log_ip_on_direct off

在此情形下,主机名来自于URI。假如URI包含了IP地址,Squid不会将其转换为主机名。


13.2.4.7 client_netmask

该指令存在主要是为了保护用户的隐私。不同于记录完整的IP地址,你也可以掩盖一些位。例如:


client_netmask 255.255.255.0

在此设置下,access.log里的所有客户端IP地址的最后一个八位组是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

该指令是另一个隐私保护功能。在记录请求前,Squid删除了查询条件。假如日志文件不幸落入坏人之

手,他们不会找到任何用户名和密码。当该指令激活时,在问号(?)之后的所有字节被删除。例如,某

个URI如下:


http://auto.search./response.asp?MT=www.kimo.com.yw&srch=3&prov=&utf8

会被记录为:


http://auto.search./response.asp?

13.2.4.9 uri_whitespace

早前我提到过出现在某些URI里的空格字符的问题。RFC申明URI必须不包括空格字符,但在实际中情

况并非如此。uri_whitespace指令指明Squid如何处理这种情况。允许的设置是:strip (default),

deny, allow, encode, 和chop。在这些设置里,strip,encode和chop保证URI域不包含任何空格

字符(空格字符会给access.log增加多余的域)。


allow设置允许请求不加修改的通过Squid。它很可能会给重定向器和日志文件解析器带来麻烦。与之

相反的是deny设置,它导致Squid拒绝这种请求。用户会接受到错误消息,但请求仍带着空格字符被

记录到access.log。


假如设置为encode,Squid将空格字符按RFC 1738规范来编码。这点其实用户代理应该先做到。

chop设置导致Squid把第一个空格字符后的URI都截断。


默认设置是strip,它让Squid从URI里移除空格字符。这确保日志文件解析器和重定向器工作正常,但

可能会破坏某些事情,例如不正确编码的搜索引擎查询。


13.2.4.10 buffered_logs

默认情况下,Squid禁止写cache.log文件的buffer,这允许你运行tail -f 命令实时的观察日志文件变

化。假如你认为这点导致不必要的性能开销,就可以禁用buffer:


buffered_logs off

然而,除非以完整debug模式运行Squid,这点可能无关紧要。注意该选项仅仅影响cache.log。其他

的日志文件总使用非缓冲的写方式。




13.2.5 access.log分析工具


access.log包含很多信息,远不止你简单的浏览该文件所见。为了完整的浏览,必须使用第三方的日

志文件分析包。你可在Squid的web页面的链接里,找到它们的列表。或者直接访问:

http://www./Scripts/.


最流行的工具之一是Calamaris -- 一个Perl脚本,解析日志文件并产生基于文本的或HTML的报告。

它提供关于会话的详细分类包括请求方式、客户端IP地址、原始服务器域名、内容类型、文件名扩展、

响应size、以及更多。Calamaris也报告ICP查询会话,甚至其他cache产品的日志分析。其站点是:

http://calamaris..


Squeezer以及它的派生Squeezer2,是Squid专有的分析工具。它们提供许多统计,能帮助你了解

Squid的性能,特别是在有邻居cache时。两者都产生HTML文件作为输出。站点的

Logfile Analysis页有这些程序的链接。


Webalyzer是另一个有用工具。它运行快速,并且产生带表格和柱形统计表的HTML页面。它原始是

设计成分析原始服务器的访问日志的。尽管它能解析Squid的日志,但不会报告诸如命中率和响应时间

的事件。它使用的某些条款不同于我的做法。例如,Webalyzer把任何请求叫做一个"命中",这不同于

cache命中。它也把"页面"和"文件"加以区别。更多信息请访问Webalyzer的主页:

http://www./webalyzer/.





13.3 store.log

store.log记录Squid关于存储或删除cache目标的决定。对每个存在cache里的目标、每个不可

cache的目标、以及每个被轮换策略删除的目标,Squid都会创建相应的日志条目。该日志文件内容既

包含了内存cache又包含了磁盘cache。


store.log提供了下述不能从access.log获取的内容:



           
       
  • 1)某个特定的响应是否被cache。
       

       
  • 2)cache目标的文件号。对UFS基础的存储机制,你可转换该文件号到路径名,并且检查
  • cache文件的内容。
       

       
  • 3)响应的内容长度:包括Content-Length值和实际的body大小。
       

       
  • 4)Date, Last-Modified, 和Expires头部的值。
       

       
  • 5)响应的cache关键字(例如MD5哈希值)。
       

如你所见,这些都是相对低级的信息,在日常管理中可能用不上。除非你要做专业的分析,或打算

debug某程序,否则store.log可有可无。可以如下来禁止它:


cache_store_log none

跟其他日志文件一样,Squid将最新的日志条目写到该文件的末尾。某个给定的URI可能出现在日志文

件里多次。例如,它先被cache,然后删除,接着又cache住。仅仅最近来的日志条目才反映目标的

当前值。


store.log是文本基础的,看起来如下:


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

每个日志条目包含如下13个域:



           
       
  • 1. 时间戳

    事件何时发生,表现为Unix纪元以来的秒数,它是毫秒级的。


       

       
  • 2. 动作


       

       
  • cache目标发生的动作。该域有3个可能值:SWAPOUT,RELEASE,和SO_FAIL。


       

       

                     
             
    • 1)SWAPOUT在Squid成功的存储目标到磁盘时发生。某些目标例如那些消极cache的
    • ,仅保存在内存而不是磁盘,Squid不会在store.log里记录它们。


             

             
    • 2)SO_FAIL表明Squid不能完整的存储目标到磁盘。多半意味着存储机制拒绝以写方式
    • 打开新的磁盘文件。


             

             
    • 3)RELEASE在Squid从cache里删除目标,或首先就决定响应不可存储时发生。
             

         

           


       

       
  • 3. 目录号


       

       
  • 目录号是十进制小数形式,它是个到cache目录的7位索引。对没有存储到磁盘的目标,该域包
  • 含-1值。


       

       
  • 4. 文件号


       

       
  • 文件号是25位的标识符,内在的被squid使用。它被写成8字符的十六进制号。对UFS基础的存
  • 储机制,有算法可以转换文件号到路径名(见13.3.1节)。没有存储到磁盘的目标,没有有效
  • 的文件号。对这些目标,该域的值是FFFFFFFF。仅仅在RELEASE和SO_FAIL情况下才会出现
  • 这个值。


       

       
  • 5. cache关键字

    Squid使用MD5哈希值作为主要的索引来定位目标。该关键字基于请求方式、URI、和其他可能
  • 的信息计算得来。可以从cache关键字来查找store.log条目。然而请注意,目标的cache关键
  • 字可能改变。当Squid在access.log里记录TCP_REFRESH_MISS请求时,这点会发生。情况
  • 类似如下:
       

       
    1065837334.045 SWAPOUT ... 554BACBD2CB2A0C38FF9BF4B2239A9E5 ... http://blah
                    1066031047.925 RELEASE ... 92AE17121926106EB12FA8054064CABA ... http://blah
                    1066031048.074 SWAPOUT ... 554BACBD2CB2A0C38FF9BF4B2239A9E5 ... http://blah

            发生了什么呢?该目标原本cache在某个关键字下(554B...)。一段时间后,Squid接
  • 受到对该目标的另一请求,并转发确认请求到原始服务器。当响应以新内容返回时,Squid改变
  • 旧目标的cache关键字(92AE...),以便它能授予新目标正确的关键字(554B...)。然后旧
  • 目标删除,新目标存储到磁盘。


       

       
  • 6. 状态码


       

       
  • 该域显示响应的HTTP状态码,跟access.log一样。表13.1是状态码列表。


       

       
  • 7. 日期


       

       
  • HTTP响应的Date头部值,表现为Unix纪元以来的秒数。值-1表示Date头部不可解析,-2意味
  • 着头部完缺。


       

       
  • 8. 最后修改时间


       

       
  • HTTP响应的Last-Modified头部值,表现为Unix纪元以来的秒数。值-1表示Last-Modified头
  • 部不可解析,-2意味着头部完缺。


       

       
  • 9. 过期时间


       

       
  • HTTP响应的Expires头部值,表现为Unix纪元以来的秒数。值-1表示Expires头部不可解析,
  • -2意味着头部完缺。


       

       
  • 10. 内容类型


       

       
  • HTTP响应的Content-Type头部值,排除了任何media-type参数。假如Content-Type丢失
  • 了,Squid插入值unknown。


       

       
  • 11. 内容长度/大小


       

       
  • 该域包含2个数字,以斜杠分开。第一个是Content-Length头部值。-1表明
  • Content-Length头部不存在。第二个是HTTP消息body的实际大小。你可使用这2个数字来部
  • 分的验证接受到的响应,并验证原始服务器是否不正确的计算了内容长度。大多数情形下,这
  • 2个数字相等。


       

       
  • 12. 方式


       

       
  • 请求目标的HTTP方式,跟access.log里的一样。


       

       
  • 13. URI


       

       
  • 最后一个域是请求URI,跟access.log里的一样。该域也有前述章节提到的空格问题。然而,
  • 这里不必为此担忧,因为你可安全的忽略任何多余的域。


       

       
  • 对许多RELEASE的条目,在最后8个域出现的是疑问号(?)。这是因为这些域的大部分值来自
  • squid称为MemObject的结构。该结构仅在目标已被接受时,或目标被完整存储在内存时,才
  • 会出现。Squid cache里的大部分目标没有MemObject结构,因为它们仅存在于磁盘。对这些
  • 情况,Squid在相应域放置一个疑问号。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多