tdsereno / httpd-analyzer
Apache httpd 日志分析
dev-main
2022-07-19 00:03 UTC
Requires
- benmorel/apache-log-parser: ^0.2.0
- matomo/device-detector: ^6.0
- vlucas/phpdotenv: ^5.4
- whichbrowser/parser: ^2.1
Requires (Dev)
- phpunit/php-code-coverage: ^9.2
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-19 04:42:17 UTC
README
这是一个用于分析来自 Apache 网络服务器的日志的工具,支持一个或多个域名和多种日志格式。示例输出:
要求
- PHP 7.3.0 或更高版本
开始使用
独立下载并安装依赖项
git clone https://github.com/tdsereno/httpd-analyzer.git
cd httpd-analyzer
composer install --ignore-platform-reqs
php -f apache.php
或者,通过 Composer 安装
composer require tdsereno/httpd-analyzer
所有操作都在分析实例中开始,如下所示
$analyzer = new \Tdsereno\HttpdAnalyzer\Analyzer();
因此,您可以添加日志文件,如下所示
$analyzer->addFile(__DIR__ . '/logs/no_domain_acess.log');
添加文件夹
foreach (glob(__DIR__ . '/logs/*.{*}', GLOB_BRACE) as $filename)
{
$analyzer->addFile($filename);
}
设置显示结果的最大深度
$analyzer->setMaxDepth(40);
因此,添加日志后,您可以处理所有文件
$analyzer->load();
在终端输出此内容
$analyzer->print();
获取对象并自行分析,它返回一个 Model\Httpd\LogGroup 数组
$result = $analizer->getLogGroup();
输出到 txt
php -f apache.php > file.txt
过滤域名或日志文件(如果日志中没有使用规范服务器名)
$analizer->setFilter('www.mydomain.com.br');
$analizer->setFilter('mydomain_access.log');
过滤日期范围
$analizer->setMinDate('24/Jun/2022:23:30:00 -0300');
$analizer->setMaxDate('24/Jun/2022:23:59:00 -0300');
日志格式
对于托管多个域的服务器,自然希望分别分析访问。默认情况下,根据 httpd 文档,默认日志格式为
默认日志格式 - 常见日志格式(CLF)
"%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
我的建议:(包含请求服务的服务器的规范 ServerName)
"%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
在 CentOS 上,配置文件位于
/etc/httpd/conf/httpd.conf
在 Ubuntu 上是
/etc/apache2/apache2.conf
如果您不想更改日志格式,可以将每个 ServerName 分别放置在日志文件中
性能
我测试了超过 50 个真实日志文件,大小为 3.7Gb
在拥有 1 个 VCPU 共享、1GB RAM 和 SSD(使用 SWAP)的数字海洋滴上 - 每秒 8179 行
Processed 57 files with size of 3740.6MB In a total of 12412537 lines with success on 12412537 lines in 1517 seconds about 8179 lines per seconds
在拥有 2 个 VCPU 专用、8GB RAM 和 SSD 的数字海洋滴上 - 每秒 47784 行
Processed 57 files with size of 3740.6MB In a total of 12412537 lines with success on 12412537 lines in 259 seconds about 47784 lines per seconds