tdsereno/httpd-analyzer

Apache httpd 日志分析

dev-main 2022-07-19 00:03 UTC

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