![在 apache logwatch 报告中包括主机名](https://linux22.com/image/485088/%E5%9C%A8%20apache%20logwatch%20%E6%8A%A5%E5%91%8A%E4%B8%AD%E5%8C%85%E6%8B%AC%E4%B8%BB%E6%9C%BA%E5%90%8D.png)
当使用 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.conf
as中定义 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 文件中。这将
- 让 apache 输入主机名(是否规范,取决于您使用 %v 还是 %V)
- 强制 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_url
shorten( 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.conf
(http://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 错误等内容关联起来)。