squid日志分类及参数
SQUID默认的log文件非常多,其中最重要的LOG日志有三个,分别为access.log、store.log、cache.log。三个日志的记录的内容如下:
access.log;客户端使用代理服务器的记录文件
store.log;存储缓冲对象的状态记录文件
cache.log;CACHE的启动以及各类状态的记录文件
三个日志的路径可由cache_access_log,cache_store_log,cache_log三个参数在squid.conf里定义。三个参数的用法如下:
#用法:cache_access_log路径
#说明:记录目前代理服务器的活动情况包含所有的HTTP请求,和ICP查询结果
cache_access_log /var/log/squid/access.log;squid默认值
#用法:cache_log路径[NONE]
#说明:此文件记录SQUID PROXY启动,关闭以及代理服务器系统的相关的信息包括系统活动记录
cache_log /var/log/squid/cache.log;squid默认值
#用法:cache_store_log路径[NONE]
#说明:此记录文件用来记录缓冲对象的添加,删除情况
cache_store_log /var/log/squid/store.log
由于store.log的用处不大,一般可设置为:cache_store_log none,来降低日志文件占用的磁盘空间,这一点请特别注意。
access日志输出格式调整与日志过滤
squid日志默认定义好的几种日志格式如下,不需要重新定义(具体每个参数可以参看官方说明):
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
logformat common %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh
logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
logformat referrer %ts.%03tu %>a %{Referer}>h %ru
logformat useragent %>a [%tl] "%{User-Agent}>h"
squid access日志默认是以毫秒为单位计的,而想要重新定义时,可以通过以下方式在squid.conf中定义并调用:
vim /App/squid/etc/squid.conf
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh %{host}>h
access_log /var/log/squid/access.log combined
注: 上面的日志格式是在不考虑,squid前段有nginx或apache等前端的情况下记录的日志。而当squid前端有nginx等web服务器时,会记 录不到客户的真实IP,这时候就需要通过将%>a替换为 %{X-Real-IP}>h ,注意,前提是nginx在前端做了X-Real-IP header设置。就可以记录来访者的真实IP了。更改后的日志格式如下:
logformat combined %{X-Real-IP}>h %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
注意在logformat格式设置有问题时,通过squid -k parse检查配置文件或利用squid -k reconfigure重载错误的配置文件,都会出现下面的提示(此时,只需要根据官方参数提示,重新设置即可):
[root@cache1 ~]# /App/squid/sbin/squid -k parse
FATAL: Can't parse configuration token: '%>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh'
Squid Cache (Version 2.7.STABLE9): Terminated abnormally.
CPU Usage: 0.003 seconds = 0.001 user + 0.002 sys
Maximum Resident Size: 6656 KB
Page faults with physical i/o: 0
/App/squid/sbin/squid[0x47ae69]
/App/squid/sbin/squid[0x47b240]
/App/squid/sbin/squid[0x47b352]
/App/squid/sbin/squid[0x40584b]
/App/squid/sbin/squid[0x405bd7]
/App/squid/sbin/squid[0x413722]
/App/squid/sbin/squid[0x4178e8]
/App/squid/sbin/squid[0x4181e0]
/App/squid/sbin/squid[0x4527e1]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x323121d994]
/App/squid/sbin/squid[0x403d49]
已放弃 (core dumped)
除了定义squid日志的格式之外,还可以通过使用acl规则,很方便的对日志的内容进行过滤,如下面两例。
1、根据域名过滤设置日志
acl 361way_access_log url_regex ^http://blog.361way.com
log_access allow 361way_access_log
access_log /log/access/361way-access.log combined
以上配置是将blog.361way.com这个域名的访问日志,单独写到一个日志文件中。
2、根据文件类型进行过滤
acl nolog urlpath_regex -i .css .js .swf
access_log /var/log/squid/access.log common !nolog
以上配置中会在日志中不再记录css、js、swf三种格式的访问记录。
日志轮询
上 面提到三种日志,都可以通过执行squid -k rotate命令进行轮询。 每当执行此命令时squid会根据squid.conf里面的logfile_rotate命令所定义的值,为轮换除 的文件名编号,默认是log_rotate 10。 logfile_rotat命令的用法如下:
#用法:logfile_rotate 0~10
logfile_rotate 10
如果设置为 0即永不做轮询。如果设置为log_rotate 10 ,以access.log为例,表示轮换出来的就LOG文件名依次为:access.log、access.log.0 ~access.log.9其 11个文件。每执行一次squid -k rotate命令,三个日志文件都会以此类推往下轮询。这个参数,建议小型的网络设置为10,中型网络设置为4-5;而大型的网络设置为1-2 。对大型的网络而言,应该每天做一次LOG文件轮换,轮换出的文件不需要保留长时间,只需要保留1-2天的LOG就可以了。
要注意的是,并不是调整这个参数重新启动SQUID就可以做LOG文件轮换了,还需要执行squid -k rotate 命令才行。不过在squid 3.1以后的版本中,该参数对cache.log文件不再有用,cache.log可以通过debug_options参数设置自动轮询。具体可以参看官方的logfile_rotate的用法。而想让其定其自动轮询的话,可能配合crontab命令进行。具体如下:
#crontab -e
30 3 * * * /App/squid/sbin/squid -k rotate
每天清晨3:30 crondeamon就会自动执行轮换命令了。