有时候我们需要定制Apache
默认日志的格式和内容,比如增加或减少日志所记录的信息、改变默认日志文件的格式等。本文介绍可以用日志记录的所有信息,以及如何设置Apache
使其记录这些信息。
一、定义日志格式(4月3日)
很久以前,日志文件只有一种格式,这就是“公共格式”,许多人已经习惯于使用这种格式。随后出现了定制日志格式,而且看起来定制日志格式更很受欢迎,即使
公共日志格式本身也重新用定制日志格式定义。本文介绍的就是如何随心所欲地定制日志文件的格式、如何让日志文件记录自己想要的信息。
定制日志文件的格式涉及到两个指令,即LogFormat指令和CustomLog指令,默认httpd.conf文件提供了关于这两个指令的几个示例。
LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。CustomLog指令设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。
LogFormat指令的功能是定义日志格式并为它指定一个名字。例如,在默认的httpd.conf文件中,我们可以找到下面这行代码:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
该指令创建了一种名为“common”的日志格式,日志的格式在双引号包围的内容中指定。格式字符串中的每一个变量代表着一项特定的信息,这些信息按照格式串规定的次序写入到日志文件。
Apache
文档已经给出了所有可用于格式串的变量及其含义,下面是其译文:
%...a: 远程IP地址
%...A: 本地IP地址
%...B: 已发送的字节数,不包含HTTP头
%...b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%...{FOOBAR}e: 环境变量FOOBAR的内容
%...f: 文件名字
%...h: 远程主机
%...H 请求的协议
%...{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%...l: 远程登录名字(来自identd,如提供的话)
%...m 请求的方法
%...{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%...{Foobar}o: Foobar的内容,应答的标头行
%...p: 服务器响应请求时使用的端口
%...P: 响应请求的子进程ID。
%...q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%...r: 请求的第一行
%...s: 状态。对于进行内部重定向的请求,这是指*原来*请求 的状态。如果用%...>s,则是指后来的请求。
%...t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%...{format}t: 以指定格式format表示的时间
%...T: 为响应请求而耗费的时间,以秒计
%...u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%...U: 用户所请求的URL路径
%...v: 响应请求的服务器的ServerName
%...V: 依照UseCanonicalName设置得到的服务器名字
在所有上面列出的变量中,“...”表示一个可选的条件。如果没有指定条件,则变量的值将以“-”取代。分析前面来自默认httpd.conf文件的
LogFormat指令示例,可以看出它创建了一种名为“common”的日志格式,其中包括:远程主机,远程登录名字,远程用户,请求时间,请求的第一
行代码,请求状态,以及发送的字节数。
有时候我们只想在日志中记录某些特定的、已定义的信息,这时就要用到“...”。如果在“%”和变量之间放入了一个或者多个HTTP状态代码,则只有当请
求返回的状态代码属于指定的状态代码之一时,变量所代表的内容才会被记录。例如,如果我们想要记录的是网站的所有无效链接,那么可以使用:
LogFormat %404{Referer}i BrokenLinks
反之,如果我们想要记录那些状态代码不等于指定值的请求,只需加入一个“!”符号即可:
Apache
日志:访问日志(一)
想要知道什么人在什么时候浏览了网站的哪些内容吗?查看Apache
的访问日志就可以知道。访问日志是Apache
的标准日志,本文详细解释了访问日志的内容以及相关选项的配置。
一、访问日志的格式
Apache
内建了记录服务器活动的功能,这就是它的日志功能。这个《Apache
日志》系列文章介绍的就是Apache
的访问日志、错误日志,以及如何分析日志数据,如何定制Apache
日志,如何从日志数据生成统计报表等内容。
如果Apache
的安装方式是默认安装,服务器一运行就会有两个日志文件生成。这两个文件是access_log(在Windows上是access.log)和error_log(在Windows上是error.log)。采用默认安装方式时,这些文件可以在/usr/local/apache
/logs下找到;对于Windows系统,这些日志文件将保存在Apache
安装目录的logs子目录。不同的包管理器会把日志文件放到各种不同的位置,所以你可能需要找找其他的地方,或者通过配置文件查看这些日志文件配置到了什么地方。
正如其名字所示,访问日志access_log记录了所有对Web服务器的访问活动。下面是访问日志中一个典型的记录:
216.35.116.91 - - [19/Aug/2000:14:47:37 -0400] "GET / HTTP/1.0" 200 654
这行内容由7项构成,上面的例子中有两项空白,但整行内容仍旧分成了7项。
第一项信息是远程主机的地址,即它表明访问网站的究竟是谁。在上面的例子中,访问网站的主机是216.35.116.91。随便说一句,这个地址属于一台
名为si3001.inktomi.com的机器(要找出这个信息,可以使用nslookup工具查找DNS),inktomi.com是一家制作Web
搜索软件的公司。可以看出,仅仅从日志记录的第一项出发,我们就可以得到有关访问者的不少信息。
默认情况下,第一项信息只是远程主机的IP地址,但我们可以要求Apache
查出所有的主机名字,并在日志文件中用主机名字来替代IP地址。然而,这种做法通常不值得推荐,因为它将极大地影响服务器记录日志的速度,从而也就减低了整个网站的效率。另外,有许多工具能够将日志文件中的IP地址转换成主机名字,因此要求Apache
记录主机名字替代IP地址是得不偿失的。
然而,如果确实有必要让Apache
找出远程主机的名字,那么我们可以使用如下指令:
HostNameLookups on
如果HostNameLookups设置成double而不是on,日志记录程序将对它找到的主机名字进行反向查找,验证该主机名字确实指向了原来出现的IP地址。默认情况下HostNameLookups设置为off。
上例日志记录中的第二项是空白,用一个“-”占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,
而是浏览者的email地址或者其他唯一标识符。这个信息由identd返回,或者直接由浏览器返回。很早的时候,那时Netscape
0.9还占据着统治地位,这个位置往往记录着浏览者的email地址。然而,由于有人用它来收集邮件地址和发送垃圾邮件,所以它未能保留多久,很久之前市
场上几乎所有的浏览器就取消了这项功能。因此,到了今天,我们在日志记录的第二项看到email地址的机会已经微乎其微了。
日志记录的第三项也是空白。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。但是,对于大多数网站来说,日志文件的大多数记录中这一项仍旧是空白的。
日志记录的第四项是请求的时间。这个信息用方括号包围,而且采用所谓的“公共日志格式”或“标准英文格式”。因此,上例日志记录表示请求的时间是2000
年8月19日星期三14:47:37。时间信息最后的“-0400”表示服务器所处时区位于UTC之前的4小时。
日志记录的第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。
在上例中,METHOD是GET,其他经常可能出现的METHOD还有POST和HEAD。此外还有不少可能出现的合法METHOD,但主要就是这三种。
RESOURCE是指浏览者向服务器请求的文档,或URL。在这个例子中,浏览者请求的是“/”,即网站的主页或根。大多数情况下,“/”指向DocumentRoot目录的index.html文档,但根据服务器配置的不同它也可能指向其他文件。
PROTOCOL通常是HTTP,后面再加上版本号。版本号或者是1.0,或者是1.1,但出现1.0的时候比较多。我们知道,HTTP协议是Web得以
工作的基础,HTTP/1.0是HTTP协议的早期版本,而1.1是最近的版本。当前大多数Web客户程序仍使用1.0版本的HTTP协议。
日志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请
求,一切正常。此处不准备给出状态代码的完整清单以及解释它们的含义,请参考相关资料了解这方面的信息。但一般地说,以2开头的状态代码表示成功,以3开
头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个
错误。
日志记录的第七项表示发送给客户端的总字节数。它告诉我们传输是否被打断(即,该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
二、配置访问日志
访问日志文件的位置实际上是一个配置选项。如果我们检查httpd.conf配置文件,可以看到该文件中有如下这行内容:
CustomLog /usr/local/apache
/logs/access_log common
注意,对于版本较早的Apache
服务器,这行内容可能略有不同。它使用的可能不是CustomLog指令,而是TransferLog指令。如果你的服务器属于这类情况,建议你尽可能地早日升级服务器。
CustomLog指令指定了保存日志文件的具体位置以及日志的格式。至于如何定制日志文件的格式以及内容,我们将在这个《Apache
日志》系列文章的后面几篇讨论。上面这行指令指定的是common日志格式,自从有了Web服务器开始,common格式就是它的标准格式。由此我们也可以理解,虽然几乎不再有任何客户程序向服务器提供用户的标识信息,但访问日志却还保留着第二项内容。
CustomLog指令中的路径是日志文件的路径。注意,由于日志文件是由HTTP用户打开的(用User指令指定),因此必须注意这个路径要有安全保证,防止该文件被随意改写。
《Apache
日志》系列文章的后面几篇将继续介绍:Apache
错误日志,定制日志的格式和内容,如何将日志内容写入指定的程序而不是文件,如何从日志文件获得一些非常有用的统计信息,等等。
Apache
日志:访问日志(二)
3. 进程统计
UNIX可以跟踪每个用户运行的每条命令,如果想知道昨晚弄乱了哪些重要的文件,进程统计子系统可以告诉
你。它对还跟踪一个侵入者有帮助。与连接时间日志不同,进程统计子系统缺省不激活,它必须启动。在Linux系统中启动进程统计使用accton命令,必
须用root身份来运行。Accton命令的形式accton file,file必须先存在。先使用touch命令来创建pacct文件:touch
/var/log/pacct,然后运行accton: accton
/var/log/pacct。一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。若要关闭统计,可以使用不带任何
参数的accton命令。
lastcomm命令报告以前执行的文件。不带参数时,lastcomm命令显示当前统计文件生命周期内纪录的所有命令的有关信息。包括命令名、用户、tty、命令花费的CPU时间和一个时间戳。如果系统有许多用户,输入则可能很长。下面的例子:
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check.s S root ?? 0.04 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
grep root ?? 0.02 secs Sun Aug 20 00:16
tail root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.02 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.02 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 0.00 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 1.34 secs Sun Aug 20 00:15
locate root ttyp0 1.34 secs Sun Aug 20 00:15
accton S root ttyp0 0.00 secs Sun Aug 20 00:15
进程统计的一个问题是pacct文件可能增长的十分迅速。这时需要交互式的或经过cron机制运行sa命令来保持日志数据在系统控制内。sa命令报告、
清理并维护进程统计文件。它能把/var/log/pacct中的信息压缩到摘要文件/var/log/savacct和/var/log
/usracct中。这些摘要包含按命令名和用户名分类的系统统计数据。sa缺省情况下先读它们,然后读pacct文件,使报告能包含所有的可用信息。
sa的输出有下面一些标记项:
avio--每次执行的平均I/O操作次数
cp--用户和系统时间总和,以分钟计
cpu--和cp一样
k--内核使用的平均CPU时间,以1k为单位
k*sec--CPU存储完整性,以1k-core秒
re--实时时间,以分钟计
s--系统时间,以分钟计
tio--I/O操作的总数
u--用户时间,以分钟计
例如:
842 173.26re 4.30cp 0avio 358k
2 10.98re 4.06cp 0avio 299k find
9 24.80re 0.05cp 0avio 291k ***other
105 30.44re 0.03cp 0avio 302k ping
104 30.55re 0.03cp 0avio 394k sh
162 0.11re 0.03cp 0avio 413k security.sh*
154 0.03re 0.02cp 0avio 273k ls
56 31.61re 0.02cp 0avio 823k ping6.pl*
2 3.23re 0.02cp 0avio 822k ping6.pl
35 0.02re 0.01cp 0avio 257k md5sum
97 0.02re 0.01cp 0avio 263k initlog
12 0.19re 0.01cp 0avio 399k promisc_check.s
15 0.09re 0.00cp 0avio 288k grep
11 0.08re 0.00cp 0avio 332k awk
用户还可以根据用户而不是命令来提供一个摘要报告。例如sa -m显示如下:
885 173.28re 4.31cp 0avk
root 879 173.23re 4.31cp 0avk
alias 3 0.05re 0.00cp 0avk
qmailp 3 0.01re 0.00cp 0avk
4. Syslog设备
Syslog已被许多日志函数采纳,它用在许多保护措施中--任何程序都可以通过syslog 纪录事件。Syslog可以纪录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能纪录本地事件或通过网络纪录另一个主机上的事件。
Syslog设备依据两个重要的文件:/etc/syslogd(守护进程)和/etc/syslog.conf配置文件,习惯上,多数syslog信
息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog纪录包括生成程序的名字和一个文本信
息。它还包括一个设备和一个优先级范围(但不在日之中出现)。
每个syslog消息被赋予下面的主要设备之一:
LOG_AUTH--认证系统:login、su、getty等
LOG_AUTHPRIV--同LOG_AUTH,但只登录到所选择的单个用户可读的文件中
LOG_CRON--cron守护进程
LOG_DAEMON--其他系统守护进程,如routed
LOG_FTP--文件传输协议:ftpd、tftpd
LOG_KERN--内核产生的消息
LOG_LPR--系统打印机缓冲池:lpr、lpd
LOG_MAIL--电子邮件系统
LOG_NEWS--网络新闻系统
LOG_SYSLOG--由syslogd(8)产生的内部消息
LOG_USER--随机用户进程产生的消息
LOG_UUCP--UUCP子系统
LOG_LOCAL0~LOG_LOCAL7--为本地使用保留
Syslog为每个事件赋予几个不同的优先级:
LOG_EMERG--紧急情况
LOG_ALERT--应该被立即改正的问题,如系统数据库破坏
LOG_CRIT--重要情况,如硬盘错误
LOG_ERR--错误
LOG_WARNING--警告信息
LOG_NOTICE--不是错误情况,但是可能需要处理
LOG_INFO--情报信息
LOG_DEBUG--包含情报的信息,通常旨在调试一个程序时使用
syslog.conf文件指明syslogd程序纪录日志的行为,该程序在启动时查询配置文件。该文件由不同程序或消息分类的单个条目组成,每个占一
行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开:选择域指明消息的类型和优先级;动作域指明syslogd接收到一个与选择标准相匹配的
消息时所执行的动作。每个选项是由设备和优先级组成。当指明一个优先级时,syslogd将纪录一个拥有相同或更高优先级的消息。所以如果指
明"crit",那所有标为crit、alert和emerg的消息将被纪录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。例如,
如果想把所有邮件消息纪录到一个文件中,如下:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为"err"或更高。例如:
# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler
当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn
alert消息应该写到root和tiger的个人账号中:
#Root and Tiger get alert and higher messages
*.alert root,tiger
有时syslogd将产生大量的消息。例如内核("kern"设备)可能很冗长。用户可能想把内核消息纪录到/dev/console中。下面的例子表明内核日志纪录被注释掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log/messages,除了mail以外。级别"none"禁止一个设备:
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
在有些情况下,可以把日志送到打印机,这样网络入侵者怎么修改日志都没有用了。通常要广泛纪录日志。Syslog设备是一个攻击者的显著目标。一个为其他主机维护日志的系统对于防范服务器攻击特别脆弱,因此要特别注意。
有个小命令logger为syslog(3)系统日志文件提供一个shell命令接口,使用户能创建日志文件中的条目。用法:logger 例如:logger This is a test!
它将产生一个如下的syslog纪录:Aug 19 22:22:34 tiger: This is a test!
注意不要完全相信日志,因为攻击者很容易修改它的。
5. 程序日志
许多程序通过维护日志来反映系统的安全状态。su命令允许用户获得另一个用户的权限,所以它的安全很重要,它的文件为sulog。同样的还有sudolog。另外,想Apache
有两个日志:access_log和error_log。
本文来自 长河日志 YL'S blog:http://www.lossr.net/read-863.html
分享到:
相关推荐
本文将深入探讨Apache日志配置,帮助读者掌握如何管理和分析这些日志。 一、Apache主配置文件 Apache的主配置文件在Kali Linux系统中通常位于`/etc/apache2/apache2.conf`。尽管这是一个主要的配置文件,但它并不...
apache日志配置 apache日志配置 在kali中,apache的主配置文件是/etc/apache2/apache2.conf,我们在这个文件中进行查找,很容易找到日志配置信息,我们可以修改其中的参数,来对日志配置进行修改,如下图: apache...
实验一:apache日志配置 实验目的 修改apache主配置文件中的日志配置 实验内容 在kali中找到主配置文件 修改日志配置 访问服务器产生日志 查看日志 实验环境 Kali系统 实验步骤 1.在kali中找到apache的主配置文件...
本文主要介绍了如何成功的在Linux上安装与配置Apache、Php、Mysql,并且详细地说明了在安装过程中出现的一些问题解决方法。...Apache配置和日志 Linux下Apache 配置详解 Linux下查看编译参数 LAMP优化技巧
### Apache日志配置详解 #### 一、引言 Apache是一款广泛使用的Web服务器软件,它提供了强大的日志记录功能,可以帮助管理员追踪服务器的状态、诊断问题以及优化网站性能。本文将详细介绍一个具体的Apache日志配置...
Apache日志服务器配置在Debian系统中是一项关键任务,它涉及到日志的集中管理和分析,这对于监控、故障排查以及安全审计至关重要。以下是配置Debian下的Apache日志服务器的详细步骤。 首先,我们需要在服务器端安装...
在本文中,我们详细介绍了 CentOS 上的 Apache 配置,包括安装、设置、配置文件、模块、文档根目录、错误日志文件、控制脚本、 MySQL 配置文件和 PHP 配置文件等。通过这些配置,我们可以实现一个功能强大且安全的...
在Apache配置文件 `httpd.conf` 中,我们首先需要取消默认的日志配置,即注释掉 `ErrorLog` 和 `CustomLog` 行,然后添加使用 `rotatelogs` 的新配置。例如,如果我们希望每天生成一个新的错误日志和访问日志文件,...
理解这些配置选项和用法,可以帮助你有效地管理Apache日志,确保日志系统既能够提供必要的记录,又不会成为系统资源的负担。通过结合使用`rotatelogs`和定期清理策略,你可以创建一个高效且易于维护的日志管理体系。
使用天智Apache日志查看器时,用户应先确保计算机上已经安装了Apache服务器,并且正确配置了日志记录设置。然后,通过软件导入Apache的日志文件,或者设置自动监测日志目录,以便实时查看日志信息。根据需求,可以...
Apache日志分析是运维人员和网站开发者日常工作中不可或缺的一部分,它可以帮助我们理解网站的访问情况,检测潜在的问题,以及优化网站性能。"天智Apache日志分析器"是一款专为这项任务设计的工具,由VC++编程语言...
二、Apache日志配置 Apache是广泛应用的Web服务器,其日志主要分为两类:错误日志和访问日志。 1. 错误日志:记录服务器遇到的问题,如失效链接、CGI错误和认证错误。 2. 访问日志:记录用户访问的详细信息,包括...
Apache日志分析系统免费版V1.6是一款专为管理和解析Apache服务器日志设计的工具。这个系统能够帮助用户深入理解网站的访问情况,提供详细的数据统计和分析,包括但不限于访问量、用户行为、热门页面、来源IP、浏览器...
配置Webalizer,首先需要确保Apache的日志记录开启,并将日志文件路径配置在Webalizer的配置文件`webalizer.conf`中。然后,定期运行Webalizer生成分析报告。 6. 进阶配置与管理 - SSL/TLS加密:配置SSL证书以启用...
Apache服务器配置全攻略 Apache HTTP Server(简称Apache)是世界上最流行的Web服务器软件,以其开源、稳定、高效的特点深受广大开发者和运维人员的喜爱。本指南将深入探讨Apache服务器的配置过程,帮助你掌握全面...
### Apache日志分析系统awStats完全教材:深入解析与实践指南 #### 一、引言:awStats在Apache日志分析中的角色 在现代网络环境中,服务器日志扮演着至关重要的角色,它们不仅记录了网站的访问情况,还提供了关于...
4. **使用`Logrotate`配置**:在`/etc/logrotate.d/`目录下创建一个针对Apache日志的配置文件,指定日志路径、分割周期(如每天、每周)、保留旧日志的数量、是否压缩以及压缩级别等。 例如: ``` /var/log/...
这包括但不限于日志配置、访问权限、防攻击管理和隐藏敏感信息等方面,确保Apache服务器能够抵御各种潜在威胁。 #### 1.2 适用范围 该配置标准适用于所有与Apache服务器相关的管理人员,包括服务器系统管理员、...
7. 日志管理:配置和解析Apache的日志文件,包括访问日志(access_log)和错误日志(error_log)。学会使用日志分析工具,如AWStats或Webalizer,来分析网站访问情况。 8. 性能优化:了解如何通过Apache的各种配置...