squid日志配置与轮询
squid日志分类及参数
SQUID默认的log文件非常多,其中最重要的LOG日志有三个,分别为access.log、store.log、cache.log。三个日志的记录的内容如下:
1access.log;客户端使用代理服务器的记录文件
2store.log;存储缓冲对象的状态记录文件
3cache.log;CACHE的启动以及各类状态的记录文件
三个日志的路径可由cache_access_log,cache_store_log,cache_log三个参数在squid.conf里定义。三个参数的用法如下:
1#用法:cache_access_log路径
2#说明:记录目前代理服务器的活动情况包含所有的HTTP请求,和ICP查询结果
3cache_access_log /var/log/squid/access.log;squid默认值
4#用法:cache_log路径[NONE]
5#说明:此文件记录SQUID PROXY启动,关闭以及代理服务器系统的相关的信息包括系统活动记录
6cache_log /var/log/squid/cache.log;squid默认值
7#用法:cache_store_log路径[NONE]
8#说明:此记录文件用来记录缓冲对象的添加,删除情况
9cache_store_log /var/log/squid/store.log
10由于store.log的用处不大,一般可设置为:cache_store_log none,来降低日志文件占用的磁盘空间,这一点请特别注意。
access日志输出格式调整与日志过滤
squid日志默认定义好的几种日志格式如下,不需要重新定义(具体每个参数可以参看官方说明):
1logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st common="" logformat="">a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st combined="" logformat="">a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st>h" "%{User-Agent}>h" %Ss:%Sh
2logformat referrer %ts.%03tu %>a %{Referer}>h %ru
3logformat useragent %>a [%tl] "%{User-Agent}>h"</st></st></st>
squid access日志默认是以毫秒为单位计的,而想要重新定义时,可以通过以下方式在squid.conf中定义并调用:
1vim /App/squid/etc/squid.conf
2logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st>h" "%{User-Agent}>h" %Ss:%Sh %{host}>h
3access_log /var/log/squid/access.log combined</st>
注:上面的日志格式是在不考虑,squid前段有nginx或apache等前端的情况下记录的日志。而当squid前端有nginx等web服务器时,会记录不到客户的真实IP,这时候就需要通过将%>a替换为 %{X-Real-IP}>h ,注意,前提是nginx在前端做了X-Real-IP header设置。就可以记录来访者的真实IP了。更改后的日志格式如下:
1logformat combined %{X-Real-IP}>h %ui %un \[%tl\] “%rm %ru HTTP/%rv” %Hs %h” “%{User-Agent}>h” %Ss:%Sh
注意在logformat格式设置有问题时,通过squid -k parse检查配置文件或利用squid -k reconfigure重载错误的配置文件,都会出现下面的提示(此时,只需要根据官方参数提示,重新设置即可):
1[root@cache1 ~]# /App/squid/sbin/squid -k parse
2FATAL: Can't parse configuration token: '%>Hs %<st>h" "%{User-Agent}>h" %Ss:%Sh'
3Squid Cache (Version 2.7.STABLE9): Terminated abnormally.
4CPU Usage: 0.003 seconds = 0.001 user + 0.002 sys
5Maximum Resident Size: 6656 KB
6Page faults with physical i/o: 0
7/App/squid/sbin/squid[0x47ae69]
8/App/squid/sbin/squid[0x47b240]
9/App/squid/sbin/squid[0x47b352]
10/App/squid/sbin/squid[0x40584b]
11/App/squid/sbin/squid[0x405bd7]
12/App/squid/sbin/squid[0x413722]
13/App/squid/sbin/squid[0x4178e8]
14/App/squid/sbin/squid[0x4181e0]
15/App/squid/sbin/squid[0x4527e1]
16/lib64/libc.so.6(__libc_start_main+0xf4)[0x323121d994]
17/App/squid/sbin/squid[0x403d49]
18已放弃 (core dumped)</st>
除了定义squid日志的格式之外,还可以通过使用acl规则,很方便的对日志的内容进行过滤,如下面两例。
1、根据域名过滤设置日志
1acl 361way_access_log url_regex ^http://blog.361way.com
2log_access allow 361way_access_log
3access_log /log/access/361way-access.log combined
以上配置是将blog.361way.com这个域名的访问日志,单独写到一个日志文件中。
2、根据文件类型进行过滤
1acl nolog urlpath_regex -i .css .js .swf
2access_log /var/log/squid/access.log common !nolog
以上配置中会在日志中不再记录css、js、swf三种格式的访问记录。
日志轮询
上面提到三种日志,都可以通过执行squid -k rotate命令进行轮询。 每当执行此命令时squid会根据squid.conf里面的logfile_rotate命令所定义的值,为轮换除的文件名编号,默认是log_rotate 10。 logfile_rotat命令的用法如下:
1#用法:logfile_rotate 0~10
2logfile_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命令进行。具体如下:
1#crontab -e
230 3 * * * /App/squid/sbin/squid -k rotate
每天清晨3:30 crondeamon就会自动执行轮换命令了。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/squid-logs-conf/2268.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.