Wenn Sie mehrere Domains mit Apache hosten, ist es nützlich, die Logwatch-Apache-Ausgabe mit dem Namen des virtuellen Hosts anzuzeigen, aber ich erhalte nur:
--------------------- httpd Begin ------------------------
Requests with error response codes
400 Bad Request
/: 1 Time(s)
/robots.txt: 1 Time(s)
während ich so etwas gerne hätte
--------------------- httpd Begin ------------------------
Requests with error response codes
400 Bad Request
example.com/: 1 Time(s)
example.org/robots.txt: 1 Time(s)
Wie kann ich das mit logwatch erreichen?
apache-2.2
logwatch
Robert Munteanu
quelle
quelle
Antworten:
Versuchen Sie dies (funktioniert für mich): Definieren Sie LogFormat in Ihrem
httpd.conf
asIn diesem speziellen Fall haben Sie remote_address, Datum / Uhrzeit, [den Servernamen gemäß der Einstellung UseCanonicalName] , Anfrage, Satus-Code und Referer (das ist mein gewünschtes Format) und setzen dann
in Ihrer Datei services / http.conf LogWatch. Das wird
Hier ist ein Beispiel für die a-Zeile in der Protokollausgabe mit diesem bestimmten Satz von Anweisungen:
Wenn wir uns auf Fehlercodes konzentrieren und wie diese in LogWatch behandelt werden, können Sie folgende Änderungen an / usr / share / logwatch / scripts / services / http vornehmen : Hinzufügen:
Fügen Sie dann ungefähr in Zeile 462 diese Zeile hinzu, um unsere 4. Spalte (HOST) zu speichern:
Und in Zeile 560, nachdem
fmt_url
shorten (if (length($field{url}) > 60) {...}
) hinzugefügt wurde:Zum Schluss ändern Sie:
$needs_exam{$field{http_rc}}{$fmt_url}++;
durch
$needs_exam{$field{http_rc}}{$my_url}++;
Wenn Sie dies tun, haben Sie Folgendes in Ihrer Logwatch:
Ich hoffe es hilft euch allen
quelle
Ich hatte das gleiche Problem und löste es durch Ändern des
LogFormat
Inapache.conf
( http://httpd.apache.org/docs/2.2/mod/mod_log_config.html ).Dies generiert die gleiche Ausgabe wie die Standardeinstellung und fügt den kanonischen Servernamen als Präfix hinzu. Z.B:
Der Vorteil ist, dass Sie keine weiteren Anpassungen benötigen (z. B. auf der Logwatch-Seite). Der Nachteil ist, dass Sie für jede protokollierte Zeile ein paar zusätzliche Zeichen erhalten.
quelle
Ich denke nicht, dass es möglich ist, wenn Sie alle virtuellen Domänen in derselben Protokolldatei protokollieren ... Das Apache-Protokoll unterscheidet nicht zwischen ihnen.
Ich würde auch vorschlagen, dass Sie sich das Open Source OSSEC ansehen . Wir sind von Logwatch zu Logwatch gewechselt, weil es in Echtzeit ist und eine zentralisierte Korrelation ermöglicht (Korrelation von Dingen wie fehlgeschlagener SSH-Anmeldung mit Apache 400-Fehlern).
quelle
Ich habe einen Blog-Beitrag gefunden, in dem dieses Problem und die Lösung durch jemanden beschrieben werden . Ich weiß nicht, wie sich dies auf die Protokollanalyse auswirkt, aber notiere es hier, da ich es nützlich fand.
quelle
Sie können den Hostnamen mithilfe der LogFormat-Direktive in der Apache-Konfiguration abrufen. Sie können die folgende Option verwenden
Ich habe diese Informationen in diesem Link gefunden . Logwatch sollte in der Lage sein, benutzerdefinierte Informationen zu analysieren.
quelle
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
: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:
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
quelle