squid日志1
来源:百度文库 编辑:神马文学网 时间:2024/04/24 03:16:37
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/.
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.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
每个日志条目包含如下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里删除目标,或首先就决定响应不可存储时发生。
- 1)SWAPOUT在Squid成功的存储目标到磁盘时发生。某些目标例如那些消极cache的,仅保存在内存而不是磁盘,Squid不会在store.log里记录它们。
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...)。然后旧目标删除,新目标存储到磁盘。
13.3.1 转换文件号到路径名
假如想要检查某个特定的cache文件,你可稍费工夫将文件号转换到路径名。另外目录号和L1和L2值也是必需的。在squid的源代码里,storeUfsDirFullPath( )函数做这个事情。可在src/fs/ufs/store_dir_ufs.c文件里找到它。如下短小的perl脚本模拟了当前算法:
#!/usr/bin/perl $L1 = 16; $L2 = 256; while (<>) { $filn = hex(第13章 日志文件
13.1 cache.logcache.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.每个cache.log条目以时间戳开始,指示消息何时产生。本示例里的日志报告了squid的版本
(2.5.STABLE4),以及squid所运行的操作系统标识符(i386-unknown-freebsd4.8)。接下来
是进程ID(18990)。许多cache.log条目看起来含义不明(例如Target number of buckets: 39)。
大多数正常情形下,可以忽略这些不易理解的条目。另一方面,你也许该仔细看一下本质的配置细节,
例如名字服务器的地址,或HTTP服务器地址。本示例日志最后陈述了Squid准备接受请求。此时
Squid可以接受来自客户端的HTTP连接。
通常,cache.log增长缓慢。然而,不正常的HTTP事务或类似的事件可以导致squid发布一个debug
消息。假如这样的事件经常发生(例如DOS攻击、新的病毒、磁盘意外等),日志文件会增长很快。
定期轮转日志减少了用光磁盘的风险。
主要的错误和异常条件最可能报告在cache.log里。我推荐存档这些日志,以便以后回查事件的源头。
当在Squid的邮件列表或类似论坛描述这些故障时,相应的cache.log非常有用。某些情形下,你也
许应该调大日志的debug级别,以便其他人能更好的理解和修正你的问题。
13.1.1 debug级别
debug_options指令控制cache.log的日志级别。默认值(ALL,1)通常是最佳选择。在更高级别上,
不重要的消息会混淆视线。请参考16.2节关于debug_options指令的完整描述。
请注意最高级别的debug(9或10)会对每个请求产生数千行日志,快速消耗磁盘空间和显著影响
squid的性能。
可以使用squid的-X命令行选项来对所有情形激活完整的debug。假如squid拒绝启动,并且
squid.conf里的debug级别不足以诊断问题时,该模式特别有用。这也是在配置文件解析器解析到
debug_options指令之前,激活它的完整debug的好方法。在squid运行正常时,请勿使用-X。
对运行的squid进程,可使用squid的-k debug命令行选项来立刻激活完整debug。这个命令是循环
使用的:第一次调用打开完整debug,第二次调用则关闭它。请见第5章关于-k选项的通用讨论。
如前所述,完整debug会产生难以控制的日志增长。这会使squid和操作系统运行缓慢。在极端情形
下,你会发现终端session在运行第一个squid -k debug命令后,变得没有响应。在squid狂写日志
的同时让操作无法进行,这情形并不好。如下技巧也许有用,它获取5秒钟的debug数据快照:
% squid -k debug; sleep 5; squid -k debug
13.1.2 转发cache.log消息到系统日志
为了让squid发送cache.log消息的拷贝到系统日志,请使用-s命令行选项。仅仅在debug级别0和1
的消息会被转发。级别0的消息以syslog级别LOG_WARNING记录,级别1的消息以syslog级别
LOG_NOTICE记录。所有消息使用LOCAL4的syslog设备。如下是配置syslogd的一个方法,以便这
些消息能保存下来:
local4.warning /var/log/squid.log在维护多个squid主机时,使用syslog来记录cache.log特别方便。可以配置每个本地syslog进程,
转发这些消息到中央日志主机,这样就可在一个地方统一浏览所有cache日志。例如,可在
/etc/syslogd.conf里使用如下接口:
local4.notice @192.168.45.1