Vielen Dank an @Syquus, der mich auf den richtigen Weg gebracht hat, um die /usr/share/logwatch/scripts/services/http
Datei zu ändern .
Meine Datei und Lösung waren unterschiedlich, aber ich dachte, ich würde sie trotzdem teilen.
Ich verwende das von vhost_combined
Apache bereitgestellte Standard- LogFormat, das wie folgt aussieht:
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
welches etwas ausgibt wie:
example.org:80 1.1.1.1 - - [08/Oct/2013:16:55:01 +0000] "GET / HTTP/1.1" 200 6094 "-" "Opera/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto/2.12.388 Version/12.16"
Ich habe dies in die Dienstkonfigurationsüberschreibung gesetzt unter /etc/logwatch/conf/services/http.conf
:
$logformat = "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
Nachdem ich die ungefähr richtigen Stellen gefunden hatte, an denen die Änderungen für die @ Syquus-Lösung vorgenommen werden sollten /usr/share/logwatch/scripts/services/http
, dachte ich, dass es funktionieren würde, einfach den Index von [3] auf [0] zu ändern - das tat es nicht. Ich habe falsche Segmente des Pfades erhalten und selbst nach dem Durchlaufen des gesamten Hashs / Arrays habe ich den Hostnamen nicht gefunden. Das Debuggen war frustrierend, weil ich neu bei Perl bin, aber meine Lösung bestand darin, das Matching für das zu verwerfende hinzuzufügen %v
und dann die URL weiter unten zu ändern, um den Domainnamen einzuschließen.
Diff für meine Lösung (ich habe auch die URL-Kürzung entfernt), YMMV:
--- __http.2013-10-09 2013-10-09 13:11:48.000000000 +0000
+++ http 2013-10-09 14:36:59.000000000 +0000
@@ -132,6 +132,8 @@
# Build tables of the log format to parse it and determine whats what
#
+my $my_url = "";
+
my $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
my $ignoreURLs = $ENV{'http_ignore_urls'};
my $ignoreIPs = $ENV{'http_ignore_ips'};
@@ -379,7 +381,10 @@
$logformat =~ s/%[\d,!]*/%/g;
while ($end_loop) {
- if ($logformat =~ /\G%h/gc) {
+ if ($logformat =~ /\G%v/gc) {
+ $parse_string[$parse_index] .= "(\\S*?)";
+ $parse_field[$parse_index][$parse_subindex++] = "my_host";
+ } elsif ($logformat =~ /\G%h/gc) {
$parse_string[$parse_index] .= "(\\S*?)";
$parse_field[$parse_index][$parse_subindex++] = "client_ip";
} elsif ($logformat =~ /\G%l/gc) {
@@ -437,7 +442,6 @@
#
# Process log file on stdin
#
-
while (my $line = <STDIN>) {
chomp($line);
@@ -580,11 +584,12 @@
!((defined $ignoreURLs) && ($field{url} =~ /$ignoreURLs/)) &&
!((defined $ignoreIPs) && ($field{client_ip} =~ /$ignoreIPs/)) ) {
my $fmt_url = $field{url};
- if (length($field{url}) > 60) {
- $fmt_url = substr($field{url},0,42) . " ... " .
- substr($field{url},-15,15);
- }
- $needs_exam{$field{http_rc}}{$fmt_url}++;
+ #if (length($field{url}) > 60) {
+ # $fmt_url = substr($field{url},0,42) . " ... " .
+ # substr($field{url},-15,15);
+ #}
+ $my_url = $field{my_host} . $fmt_url;
+ $needs_exam{$field{http_rc}}{$my_url}++;
}
if (defined $field{userid} && $field{userid} ne "-" &&
(eval $user_display) &&
Sollte ich mich dazu entschließen, gesicherten Inhalt oder Inhalt an einem anderen Port als: 80 bereitzustellen, könnte ich ihn in Zukunft einbinden. Es sollte jetzt klar sein, wie.
Hoffe das hilft!
AKTUALISIEREN
Einige weitere Änderungen vorgenommen, ein Fehler behoben. Anstatt Bewahren Sie diese Antwort bearbeiten , können Sie meine Änderungen finden Sie hier: https://bitbucket.org/ubiquitypress/logwatch