在 apache logwatch 报告中包括主机名

在 apache logwatch 报告中包括主机名

当使用 apache 托管多个域时,查看包含虚拟主机名的 logwatch apache 输出很有用,但我只得到:

 --------------------- httpd Begin ------------------------

 Requests with error response codes
   400 Bad Request
      /: 1 Time(s)
      /robots.txt: 1 Time(s)

而我想要的是类似

 --------------------- httpd Begin ------------------------

 Requests with error response codes
   400 Bad Request
      example.com/: 1 Time(s)
      example.org/robots.txt: 1 Time(s)

我如何使用 logwatch 实现这一点?

答案1

试试这个(对我有用):在你的httpd.confas中定义 LogFormat

日志格式“%h%t [%V] \“%r\”%>s \“%{Referer}i\””

在这个特殊情况下,你将获得 remote_address、date/time,[根据UseCanonicalName设置的服务器名称],请求,状态码和 Referer(这是我想要的格式),然后输入

$LogFormat "%h %t %V \"%r\" %>s \"%{Referer}i\""

在您的 services/http.conf LogWatch 文件中。这将

  1. 让 apache 输入主机名(是否规范,取决于您使用 %v 还是 %V)
  2. 强制 LogWatch 理解你的 Apache Access 日志

下面是使用此特定指令集的日志输出中的一行的示例:

172.3.20.11 [01/Jun/2011:21:00:52 +0200] joomla.local "GET /images/tabs_back.png HTTP/1.1" 404 "http://joomla.local/templates/beez_20/css/personal.css

如果我们关注错误代码,以及它们在 LogWatch 中是如何处理的,你可以进行以下一些更改来/usr/share/logwatch/scripts/services/http: 添加:

我的 $my_host = ""; 我的 $my_url = "";

然后,在第 462 行左右添加此行以保存我们的第 4 列(HOST):

$field{my_host} = $field{$log_fields[3]};

在第 560 行,在fmt_urlshorten( if (length($field{url}) > 60) {...}) 之后添加:

$my_host = $field{$log_fields[3]};
$my_host = substr($my_host,1);
$my_url=$my_host . $fmt_url;

最后,改变:

$needs_exam{$field{http_rc}}{$fmt_url}++;

经过

$needs_exam{$field{http_rc}}{$my_url}++;

这样做之后,你将在 Logwatch 中看到以下内容:

Requests with error response codes
404 Not Found
joomla.local/images/tabs_back.png: 3 Time(s)

我希望它能帮助到你们

答案2

我遇到了同样的问题,并通过LogFormat更改apache.confhttp://httpd.apache.org/docs/2.2/mod/mod_log_config.html

# LogFormat "%h %l %u %t \"%r\" %>s %O" common

# The default output has no info about the server name (%v).
# %m %U%q %H is strictly equivalent to %r.
LogFormat "%h %l %u %t \"%m %v%U%q %H\" %>s %O" common

这将生成与默认相同的输出,并添加规范的服务器名称作为前缀。例如:

... "GET www.example.com/apache_pb.gif HTTP/1.0" 200 2326 ... 

优点是你不需要任何其他自定义(例如在 logwatch 方面)。缺点是每行记录都会多出几个字符。

答案3

如果您将所有虚拟域记录到同一个日志文件中,我认为这是不可能的...... apache 日志不会区分它们。

我还建议你看看开源操作系统安全评估中心。我们从 logwatch 转移到它,因为它是实时的并且允许集中关联(将诸如 ssh 登录失败与 apache 400 错误等内容关联起来)。

答案4

您可以使用 apache 配置中的 LogFormat 指令获取主机名。您可以使用以下选项

%{Host}i

我发现这个信息此链接.Logwatch应该能够解析自定义信息。

相关内容