【Apache运维基础(6)】Apache的日志管理与分析

栏目: 服务器 · Apache · 发布时间: 5年前

内容简介:Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间、地理位置分布、页面点击率等。Apache 的访问日志具有如下4个方面的作用:定制日志文件的格式涉及到两个指令,即LogFormat指令和CustomLog指令,默认httpd.conf文件提供了关于这两个指令的几个示例。LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。CustomLog指令设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。

简述

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/... 我这里只是简单的举一些例子。

实现按照小时记录日志

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。


以上所述就是小编给大家介绍的《【Apache运维基础(6)】Apache的日志管理与分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

On LISP

On LISP

Paul Graham / Prentice Hall / 09 September, 1993 / $52.00

On Lisp is a comprehensive study of advanced Lisp techniques, with bottom-up programming as the unifying theme. It gives the first complete description of macros and macro applications. The book also ......一起来看看 《On LISP》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器