• squid日志配置与轮询


    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就会自动执行轮换命令了。

  • 相关阅读:
    数据库分表之Mybatis+Mysql实践
    mysql中You can't specify target table for update in FROM clause错误
    SQL中的limit用法
    在电脑端打开apk文件
    mysql进阶(五)数据表中带OR的多条件查询
    Java之——汉字转换拼音(大小写)
    数据库查询模糊匹配
    produces在@requestMapping中的使用方式和作用
    JSONP跨域请求数据报错 “Unexpected token :”的解决办法
    C# TcpClient的Connect超时处理(Timeout)
  • 原文地址:https://www.cnblogs.com/itcomputer/p/5027311.html
Copyright © 2020-2023  润新知