但是 Apache error log 又是怎么样的呢?因为 error log 条目主要记录 access log 中特殊的请求(你可以自定义),所以你可以通过 access log 来获得关于错误情况的更多信息(example 5 有更多细节)。
此外要提前说明的, access log 是系统级别的日志文件。要分析虚拟主机的日志文件,你需要检查它们相应的配置文件(例如: 在 /etc/apache2/sites-available/[virtual host name] 里(Debian))。
在 Linux 上安装 asql
asql 由 Perl 编写,而且需求以下两个 Perl 模块:sqlite 的 DBI 驱动以及 GNU readline。
在 Debian,Ubuntu 以及其衍生发行版上安装 asql
使用基于 Debian 发行版上的 aptitude,asql 以及其依赖会被自动安装。
sql
在 Fedora,CentOS,RHEL 上安装 asql
在 CentOS 或 RHEL 上,你需要启用 EPEL repository,然后运行以下代码。在 Fedora 中,直接运行以下代码:
sqlite perl-Term-Readline-Gnu
# wget http://www.steve.org.uk/Software/asql/asql-1.7.tar.gz
# tar xvfvz asql-1.7.tar.gz
# cd asql
# make install
asql 是如何工作的?
从上面代码中的依赖中你就可以看出来,asql 转换未结构化的明文 Apache 日志为结构化的 sqlite 数据库信息。生成的 sqlite 数据库可以接受正常的 sql 查询语句。数据库可以通过当前以及之前的日志文件生成,其中也包括压缩转换过的日志文件,类似 access.log.X.gz 或者 access_log.old。
首先,从命令行启动 asql:
sql
你会进入 asql 内置的 shell 交互界面。
输入 help 列表可执行的命令:
首先在 asql 中加载所有的 access 日志:
代码如下:
load
比如在 Debian 下:
代码如下:
load /var/log/apache2/access.*
在 CentOS/RHEL 下:
代码如下:
load /var/log/httpd/access_log*
当 asql 完成对 access 日志的加载后,我们就可以开始数据库查询了。注意一下,加载后生成的数据库是 "temporary" (临时)的,意思就是数据库会在你退出 asql 的时候被清除。如果你想要保留数据库,你必须先将其保存为一个文件。我们会在后面介绍如何这么做(参考 example 3 和 4)。
生成的数据库有一个名为 logs 的表。输入下面的命令列出 logs 表中提供的域:
一个名为 .asql 的隐藏文件,保存于用户的 home 目录下,记录用户在 asql shell 中输入的命令历史。因此你可以使用方向键浏览命令历史,按下 ENTER 来重复执行之前的命令。
下面是几个使用 asql 针对 Apache 日志文件运行 sql 查询的示例:
Example 1:列出在 2014 年 10 月中请求的来源 / 时间以及 HTTP 状态码。
= '2014-10-01T00:00:00' ORDER BY source;
Example 2:从小到大显示单个客户端处理的请求大小(bytes)。
SELECT source,SUM(size),AS NUMBER FROM logs GROUP BY source ORDER BY Number DESC;