Apache 访问日志
集中 Apache 日志在许多情况下都很有用。让我们先了解一下基础知识。所以Apache日志可以定义为
为了有效地管理 Web 服务器,有必要获得有关服务器的活动和性能以及可能发生的任何问题的反馈。Apache HTTP Server 提供了非常全面和灵活的日志记录功能。
今天我们将设置 Apache 来记录对 MySQL 数据库的每个访问请求,而不是将其存储在平面文件中。与记录到平面文本文件不同,基于 SQL 的日志表现出极大的灵活性和数据提取的能力。让我们潜入水中。
和 Apache 访问日志可以定义为
服务器访问日志记录了服务器处理的所有请求。访问日志的位置和内容由 CustomLog 指令控制。
今天让我们看看如何设置 Apache 使用 MySQL 来存储所有日志。Apache 访问日志将通过 Apache 日志模块发送到 MySQL 数据库。
Apache 对 MySQL 的访问日志
先决条件
MySQL 服务器和 Apache 应该安装在 Ubuntu 实例上。
步骤1
要设置对 MySQL 的 Apache 访问日志,需要安装一个 Apache 库,可以通过 apt-get 完成。
apt-get install libapache2-mod-log-sql-mysql
第2步
现在让我们启用unique_id模块。
a2enmod unique_id
你可能会问为什么?答案是没有必要,但是没有它,mod_log_sql将把 MySQL 表中的 id 列留空,用于访问日志。id 列将包含标准 Apache 模块mod_unique_id提供的唯一请求 ID 。
第 3 步
现在登录到 MySQL 控制台并创建一个数据库来存储 Apache 访问日志。
create database apachelogs;
第4步
让我们创建一个用户并授予将 Apache 访问日志存储到数据库的权限。
grant insert,create on apachelogs.* to loguser@localhost identified by 'loguser_pw';
flush privileges;
第 5 步
现在将以下配置添加到您需要将 Apache 访问日志放入数据库的 VirtualHost。如果您不了解 VirtualHosts,请参阅这篇文章。另请注意,如果您将这些行作为全局行,它将影响 Apache 中所有可用的 VirtualHost。
LogSQLTransferLogTable web_access_log
LogSQLLoginInfo mysql://loguser:loguser_pw@localhost/apachelogs
LogSQLCreateTables on
LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock
LogSQLTransferLogFormat AbHhmRSsTUuvI
最后重启Apache。
/etc/init.d/httpd restart
技巧和窍门
如果要登录到远程 MySQL 实例,请将 localhost 更改为特定的 IP 地址。应该更改LogSQLLoginInfo 。格式如下
mysql:[user[!password]][@[host][:port]][/database]
还要确保 MySQL 实例接受远程连接,如下所示。另外,在步骤 4 中向 MySQL 用户授予远程访问权限,如下所示。
如下所示,在通常的场景中,日志以分散的方式存储。由于日志存储在 3 个不同的位置,因此您无法运行有关应用程序的分析。但是使用以下设置日志保存在单个 MySQL 数据库中。分析查询,例如有多少请求来自哪个应用程序,应用程序负载如何分布等等。您所要做的就是在所有三个 Apache 实例中使用上述配置。
就是这样了。如果您有任何问题,请在下面的评论中告诉我。非常感谢您的反馈(笑脸)。