当前位置: 首页 > Linux

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

时间:2023-04-06 07:03:22 Linux

简介Apache访问日志在实际工作中非常有用。一个典型的例子就是统计网站流量,查看用户访问时间、地理位置分布、页面点击率等。Apache的访问日志有以下四个功能:记录访问服务器的远程主机的IP地址,以便您可以知道观众来自哪里;记录浏览者访问过的网页资源,可以了解网站哪些部分最受欢迎;记录浏览者使用的浏览器,根据浏览者使用最多的浏览器对站点进行优化;记录浏览者的访问时间;配置自定义日志文件的格式涉及两条指令,分别是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中显示的除HTTP标头外传输的字节数CLF格式,即没有字节传输时显示'-'而不是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}PServing请求的PID或TID(线程ID),format取值范围为:pid和tid(2.0.46及以后版本)和hextid(需要APR1.2.0及以上版本)%q查询字符串(如果存在则以“?”开头,否则为空字符串)%r请求状态的第一行%s。对于内部重定向的请求,此状态指的是原始请求的状态,-%>s指的是上次请求的状态。%t时间,以正常日志时间格式(标准英文格式)%{format}t时间,以strftime(3)指定的格式。(区域设置格式的默认值)%T请求完成处理所花费的时间,以秒为单位。%u远程用户名(根据认证信息,如果返回状态(%s)为401,可能是假的)%U请求的URL路径,不包含查询字符串。%v为该请求提供服务的完全限定的ServerName。%VUseCanonicalName命令设置的服务器名称。%X请求完成时的连接状态:X=连接在回复完成前终止。+=发送回复后继续保持连接。-=发送回复后关闭连接。(在1.3以后的版本中,这条指令是%c,但这和之前的SSL语法冲突:%{var}c)%I接收到的字节数,包括请求头的数据,不能为0。要使用此命令,您必须启用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\""Refererlogformat"%{Referer}i->%U"Agent(Browser)logformat"%{User-agent}i"apacheconfigurationinstanceformat:LogFormat"%h%l%u%t%T\"%r\"%>s%b\"%{Referer}i\"\"%{User-Agent}i\""combinedLogFormat"%h%l%u%t\"%r\"%>s%b"common#你需要启用mod_logio.c才能使用%I和%OLogFormat"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"\"%{User-Agent}i\"%I%O"combineddio按时间分布记录对于访问量大的网站,不可能只记录log一个文件。10000条日志大概有50M。另一种可能性是,如果你想跟踪用户行为,你可能需要一些额外的信息。如何在apache日志中记录这些东西。Apache提供了一种优秀的日志配置方法,具体配置可以参考:http://httpd.apache.org/docs/...我这里只是举一些简单的例子。实现按小时记录日志。Apache自带了一个rotatelogs可以实现这个功能。查看他的帮助就知道使用方法了。Usage:rotatelogs[-l]{|}[offsetminutesfromUTC]首先看下面的例子:ServerAdminwebmaster@myhost.comDocumentRoot/home/web/wwwServerNamemyhost.comOptionsIndexesFollowSymLinksAllowOverrideallOrderallow,denyAllowfromallCustomLog"|bin/rotatelogslogs/myhost_access_log_%Y_%m_%d_%H.log3600480"commonlogs/pma_access_log_%Y_%m_%d_%H.log为文件名,可作为占位符。3600表示每小时记录一次,这个单位是s480表示UTC时差的分钟数,我们东八区比他们早480分钟。在日志中记录cookies我想记录一个用户客户端的信息,每次用户访问,我都会自动在浏览器中写入一个cookie,以便及时发现恶意攻击或者防止广告系统作弊。先启用apache自带的usertrack,去掉LoadModuleusertrack_modulemodules/mod_usertrack.so前面的#。对于Linux用户,如果没有该模块,则重新编译。ServerAdminwebmaster@dummy-host2.domainDocumentRootD:/web/htdocsServerNamelocalhost.comCookieTrackingonCookieDomain.localhost.comCookieExpires"1days"CookieStyleCookie选项索引FollowSymLinksAllowOverrideallOrderallow,denyAllowfromallLogFormat"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"\"%{User-agent}i\"\"%{Cookie}i\""mylogconfigCustomLog"|bin/rotatelogslogs/pma_access_log_%Y_%m_%d_%H.log3600480"mylogconfigCookieTrackingonCookieDomain。localhost.comCookieExpires"1days"CookieStyleCookie这四句是设置cookie的属性。这句话是设置日志的属性:LogFormat"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"\"%{User-agent}i\"\"%{Cookie}i\""mylogconfig日志的名称是mylogconfig。