Linux有一个很了不起的特性。一般情况下,您可以通过日志来分析系统日志,了解您的系统发生了什么或正在发生什么。确实,系统日志是系统管理员在排除系统和应用程序问题时最需要的第一手资源。在本文中,我们将重点关注ApacheHTTPWeb服务器生成的Apache访问日志。本次我们将通过另一种方式来分析Apache访问日志,我们使用的工具是asql。asql是一个开源工具,允许用户使用SQL语句查询日志,从而以更友好的格式呈现相同的信息。Apache日志背景知识Apache有两种类型的日志:访问日志:存放在路径/var/log/apache2/access.log(Debian)或/var/log/httpd/access_log(RedHat)。访问日志记录了ApacheWeb服务器执行的所有请求。错误日志:保存在/var/log/apache2/error.log(Debian)或/var/log/httpd/error_log(RedHat)路径下。错误日志记录了Apache网络服务器报告的所有错误以及错误的情况。错误情况包括(不限于)403(Forbidden,通常在请求被拒绝访问时上报)、404(Notfound,在请求的资源不存在时上报)。虽然管理员可以通过配置Apache配置文件来自定义Apache访问日志的详细程度,但在本文中,我们将使用默认配置如下:远程IP-请求时间-请求类型-响应代码-请求的URL-远程浏览器信息(可能包括操作系统信息),因此典型的Apache日志条目如下所示:192.168.0.101--[22/Aug/2014:12:03:36-0300]"GET/icons/unknown.gifHTTP/1.1"200519"http://192.168.0.10/test/projects/read_json/""Mozilla/5.0(X11;Ubuntu;Linuxx86_64;rv:30.0)Gecko/20100101Firefox/30.0"但是Apache的错误日志呢?由于错误日志条目主要记录访问日志中的特殊请求(您可以自定义),因此您可以通过访问日志获取有关错误情况的更多信息(示例5有更多详细信息)。另外需要提前说明一下,accesslog是系统级别的日志文件。要分析虚拟主机的日志文件,需要查看它们对应的配置文件(例如:在/etc/apache2/sites-available/[虚拟主机名](Debian))。在Linux上安装asqlasql是用Perl编写的,需要以下两个Perl模块:SQLite的DBI驱动程序和GNUreadline。在基于Debian的发行版上使用aptitude在Debian、Ubuntu和衍生版上安装asql,asql及其依赖项会自动安装。#aptitudeinstallasqlonFedora,CentOS,RHEL要在CentOS或RHEL上安装asql,您需要启用EPEL存储库,然后运行以下代码。在Fedora中,直接运行以下代码:#sudoyuminstallperl-DBD-SQLiteperl-Term-Readline-Gnu#wgethttp://www.steve.org.uk/Software/asql/asql-1.7.ta??r.gz#tarxvfvzasql-1.7.ta??r.gz#cdasql#makeinstallasql它是如何工作的?从上面代码中的依赖可以看出,asql将非结构化的明文Apache日志转化为结构化的SQLite数据库信息。生成的SQLite数据库可以接受普通的SQL查询语句。数据库可以从当前和以前的日志文件生成,包括压缩转换后的日志文件,如access.log.X.gz或access_log.old。首先,从命令行启动asql:#asql您将进入asql内置的shell界面。输入helplist可执行命令:首先加载asql中的所有访问日志:asql>load
