苍天有泪 发表于 2018-12-26 14:07:45

squid日志参数详解

  下列编码可能出现在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.caida.org/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.w3.org/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
  CharacterEncoding
  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/0ident_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.59844459 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.msn.com/response.asp?MT=www.kimo.com.yw&srch=3&prov=&utf8
  会被记录为:
  http://auto.search.msn.com/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.squid-cache.org/Scripts/.
  最流行的工具之一是Calamaris -- 一个Perl脚本,解析日志文件并产生基于文本的或HTML的报告。它提供关于会话的详细分类包括请求方式、客户端IP地址、原始服务器域名、内容类型、文件名扩展、响应size、以及更多。Calamaris也报告ICP查询会话,甚至其他cache产品的日志分析。其站点是:
  http://calamaris.cord.de.
  Squeezer以及它的派生Squeezer2,是Squid专有的分析工具。它们提供许多统计,能帮助你了解Squid的性能,特别是在有邻居cache时。两者都产生HTML文件作为输出。squid-cache.org站点的Logfile Analysis页有这些程序的链接。
  Webalyzer是另一个有用工具。它运行快速,并且产生带表格和柱形统计表的HTML页面。它原始是
  设计成分析原始服务器的访问日志的。尽管它能解析Squid的日志,但不会报告诸如命中率和响应时间
  的事件。它使用的某些条款不同于我的做法。例如,Webalyzer把任何请求叫做一个"命中",这不同于
  cache命中。它也把"页面"和"文件"加以区别。更多信息请访问Webalyzer的主页:
  http://www.mrunix.net/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.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.gif1067299212.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.cfm1067299212.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
  每个日志条目包含如下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://blah1066031047.925 RELEASE ... 92AE17121926106EB12FA8054064CABA ... http://blah1066031048.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在相应域放置一个疑问号。
  在squid设置有日志格式设置
  logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %a
  Client source IP address
  %>A
  Client FQDN
  %>p
  Client source port
  %h
  Named request header field element, using "separator" as field separator (it can be any non-alphanumeric single character)
  %>h
  All request header
  %{header}sh
  Size of request headers, including request line
  %>sH
  Size of request headers, excluding request line
  %>sb
  Size of request body, raw received bytes
  %>sB
  Size of request body, excluding transfer encoding
  %>st
  Total size of request
  %
页: [1]
查看完整版本: squid日志参数详解