zoukankan      html  css  js  c++  java
  • 【Apache运维基础(6)】Apache的日志管理与分析

    简述

    Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间、地理位置分布、页面点击率等。Apache 的访问日志具有如下4个方面的作用:

    1. 记录访问服务器的远程主机IP 地址,从而可以得知浏览者来自何处;
    2. 记录浏览者访问的Web资源,可以了解网站中的哪些部分最受欢迎;
    3. 记录浏览者使用的浏览器,可以根据大多数浏览者使用的浏览器对站点进行优化;
    4. 记录浏览者的访问时间;

    配置

    定制日志文件的格式涉及到两个指令,即LogFormat指令和CustomLog指令,默认httpd.conf文件提供了关于这两个指令的几个示例。
    LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。CustomLog指令设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。
    LogFormat指令的功能是定义日志格式并为它指定一个名字。例如,在默认的httpd.conf文件中,我们可以找到下面这行代码:

    LogFormat "%h %l %u %t "%r" %>s %b" common
    

    该指令创建了一种名为“common”的日志格式,日志的格式在双引号包围的内容中指定。格式字符串中的每一个变量代表着一项特定的信息,这些信息按照格式串规定的次序写入到日志文件。
    Apache文档已经给出了所有可用于格式串的变量及其含义,下面是其译文:

    %% 百分号(Apache2.0.44或更高的版本)
    %a 远端IP地址
    %A 本机IP地址
    %B 除HTTP头以外传送的字节数
    %b 以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示’-‘而不是0。
    %{Foobar}C 在请求中传送给服务端的cookieFoobar的内容。
    %D 服务器处理本请求所用时间,以微为单位。
    %{FOOBAR}e 环境变量FOOBAR的值
    %f 文件名
    %h 远端主机
    %H 请求使用的协议
    %{Foobar}i 发送到服务器的请求头Foobar:的内容。
    %l 远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为”On“,否则将得到一个”-”。
    %m 请求的方法
    %{Foobar}n 来自另一个模块的注解Foobar的内容。
    %{Foobar}o 应答头Foobar:的内容。
    %p 服务器服务于该请求的标准端口。
    %P 为本请求提供服务的子进程的PID。
    %{format}P 服务于该请求的PID或TID(线程ID),format的取值范围为:pid和tid(2.0.46及以后版本)以及hextid(需要APR1.2.0及以上版本)
    %q 查询字符串(若存在则由一个”?“引导,否则返回空串)
    %r 请求的第一行
    %s 状态。对于内部重定向的请求,这个状态指的是原始请求的状态,—%>s则指的是最后请求的状态。
    %t 时间,用普通日志时间格式(标准英语格式)
    %{format}t 时间,用strftime(3)指定的格式表示的时间。(默认情况下按本地化格式)
    %T 处理完请求所花时间,以秒为单位。
    %u 远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的)
    %U 请求的URL路径,不包含查询字符串。
    %v 对该请求提供服务的标准ServerName。
    %V 根据UseCanonicalName指令设定的服务器名称。
    %X 请求完成时的连接状态:
    X= 连接在应答完成前中断。
    += 应答传送完后继续保持连接。
    -= 应答传送完后关闭连接。
    (在1.3以后的版本中,这个指令是%c,但这样就和过去的SSL语法:%{var}c冲突了)
    %I 接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。
    %O 发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。
    

    常见的日志格式举例

    通用日志格式(CLF)

    “%h %l %u %t ”%r” %>s %b”
    

    带虚拟主机的通用日志格式

    “%v %h %l %u %t ”%r” %>s %b”
    

    NCSA扩展/组合日志格式

    “%h %l %u %t ”%r” %>s %b ”%{Referer}i” ”%{User-agent}i”"
    

    Referer日志格式

    “%{Referer}i -> %U”
    

    Agent(Browser)日志格式

    “%{User-agent}i”
    

    apache配置实例格式:

    LogFormat "%h %l %u %t %T "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
    LogFormat "%h %l %u %t "%r" %>s %b" common
    
    <IfModule logio_module>
    # You need to enable mod_logio.c to use %I and %O
    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
    </IfModule>
    

    按时间分配记录

    对于大访问量的网站,日志不可能只记录在一个文件里面,1万日志大概就有50M,还有一个可能就是你要跟踪用户的行为,可能需要一些额外的信息,怎么把这些东西记录到apache日志里面。apache提供了很出色的日志配置方式,具体的配置可以参考:http://httpd.apache.org/docs/2.0/logs.html 我这里只是简单的举一些例子。

    实现按照小时记录日志

    apache 自带有一个rotatelogs 可以实现这个功能,查看一下他的help就知道使用的方法了。

    Usage: rotatelogs [-l] <logfile> {<rotation time in seconds>|<rotation size in megabytes>} [offset minutes from UTC]
    

    先看下面的例子:

    <VirtualHost *:80>
        ServerAdmin webmaster@myhost.com
        DocumentRoot /home/web/www
        ServerName myhost.com
    <Directory "/home/web/www">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
    CustomLog "|bin/rotatelogs logs/myhost_access_log_%Y_%m_%d_%H.log 3600 480" common
    </VirtualHost>
    

    logs/pma_access_log_%Y_%m_%d_%H.log 是文件名字,可以用占位符。
    3600 表示的是每个小时记录一次,这个单位是s
    480 表示和UTC时间差的分钟数目,我们是东八区要比他们早480分钟。

    在日志中记录cookie

    我要记录一个用户的客户端的信息,并且每次用户访问,我都自动在浏览器里面写一个cookie,及时发现恶意攻击或者用于广告系统中防止作弊。
    首先启用apache 自带的user track 把 LoadModule usertrack_module modules/mod_usertrack.so前面的#去掉。
    linux用户的话,没有这个模块,那么就重新编译一下。

    <VirtualHost *:80>
        ServerAdmin webmaster@dummy-host2.domain
        DocumentRoot D:/web/htdocs
        ServerName localhost.com
        CookieTracking on
        CookieDomain .localhost.com
        CookieExpires "1 days"
        CookieStyle Cookie
    <Directory "D:/web/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" "%{Cookie}i"" mylogconfig
    CustomLog "|bin/rotatelogs logs/pma_access_log_%Y_%m_%d_%H.log 3600 480" mylogconfig
    </VirtualHost>
    

    CookieTracking on
    CookieDomain .localhost.com
    CookieExpires "1 days"
    CookieStyle Cookie
    这四句是设置cookie的属性的。

    这一句是设置日志的属性:

    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" "%{Cookie}i"" mylogconfig
    

    日志的名字叫做mylogconfig。

  • 相关阅读:
    AJAX 基础知识
    jQuery知识点总结
    css基础应用总结
    javascript 总结
    找回密码-博客园
    centerOS 7 安装MySql
    java leetcode TreeNode类、ListNode类的实现
    iOS StatusBar状态栏文字颜色更改
    使用Jmeter压力测试工具测试
    安装node.js
  • 原文地址:https://www.cnblogs.com/nixi8/p/6736441.html
Copyright © 2011-2022 走看看