error.log filtern  [GELÖST]

Für Modifikationen in und um KeyHelp.
Post Reply
maverick
Posts: 34
Joined: Wed 9. Jan 2019, 17:40

error.log filtern

Post by maverick »

Nabend zusammen,

unserer Programmierer möchte das error.log von gewissen Einträgen befreien. Solche wie diesen hier sollen irgendwie aus dem error.log herausgefiltert werden.

Code: Select all

[Sat Mar 09 18:09:40.403198 2024] [authz_core:error] [pid 961686:tid 140035878561344] [remote 198.41.242.165:57568] AH01630: client denied by server configuration: /home/users/user/www/webroot/inputs.php
Uns ist klar das es das normale Grundrauschen ist was jeder Webseitenbetreiber erdulden muss. Aber wir suchen nun einen Weg das log von solchen einträgen zu befreien.

Wir haben jetzt den User unter zusätzliche PHP-Einstellungen das hier mitgegeben

Code: Select all

error_log = /home/users/user/logs/domain.de/php_error.log
In der Domain haben wir unter zusätzliche Apache-Anweisungen das hier eingetragen

Code: Select all

CustomLog "/home/users/user/logs/domain/php_error.log" "%h %l %u %t \"%r\" %>s %b"
Das generiert uns jetzt eine php_error.log aber die Einträge werden nun in beide Logfiles geschrieben. Vielleicht hat ja noch einer einen Denkanstoss wie wir die Einträge aus dem Logfile bekommen.
Gruß Mav

edit: Ich möchte noch anfügen das die einträge aber gerne woanders mitgeloggt werden sollen. Im Schadensfall wäre es ganz hilfreich diese Logauszüge zu haben.
User avatar
Jolinar
Community Moderator
Posts: 3608
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: error.log filtern

Post by Jolinar »

maverick wrote: Sat 9. Mar 2024, 22:37 unserer Programmierer möchte das error.log von gewissen Einträgen befreien
Euer Programmierer sollte sich mal mit CLI Befehlen beschäftigen...;)

Code: Select all

grep -v "AH01630" error.log > filtered.log

maverick wrote: Sat 9. Mar 2024, 22:37 Ich möchte noch anfügen das die einträge aber gerne woanders mitgeloggt werden sollen. Im Schadensfall wäre es ganz hilfreich diese Logauszüge zu haben.

Code: Select all

grep "AH01630" error.log > filtered_errors.log
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
maverick
Posts: 34
Joined: Wed 9. Jan 2019, 17:40

Re: error.log filtern

Post by maverick »

Jolinar wrote: Sun 10. Mar 2024, 06:07
Euer Programmierer sollte sich mal mit CLI Befehlen beschäftigen...;)
Unser Programmierer hat keinen Zugriff auf die Konsole vom Produktivsystem, nur auf dem Testsystem.

Ich könnte jetzt was hinbasteln was jede Minute über cron aufgerufen wird um das Logfile dahingehend zu ändern, aber das muss doch auch anders gehen.
User avatar
24unix
Posts: 1643
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: error.log filtern

Post by 24unix »

maverick wrote: Sun 10. Mar 2024, 11:51 Ich könnte jetzt was hinbasteln was jede Minute über cron aufgerufen wird um das Logfile dahingehend zu ändern, aber das muss doch auch anders gehen.
Warum filtert er nicht einfach innerhalb seines Projekts?
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
maverick
Posts: 34
Joined: Wed 9. Jan 2019, 17:40

Re: error.log filtern  [GELÖST]

Post by maverick »

Ich habe nun etwas gebastelt, schön ist anders aber es macht was es soll.
Falls mal jemand ähnliches braucht hier den Code dazu.

Code: Select all

#!/bin/bash

# Grundstock anlegen
original_logfile="/home/users/user/logs/domain.de/error.log"
filtered_logfile="/home/users/user/logs/domain.de/def.log"
processed_entries_file="/home/users/user/logs/domain.de/processed_entries.txt"

# Testen ob die Original-Logdatei existiert
if [ -f "$original_logfile" ]; then
    # Testen ob die Datei für bereits verarbeitete Einträge existiert
    if [ ! -f "$processed_entries_file" ]; then
        touch "$processed_entries_file"
    fi

    # Alles durchsehen im error.log
    while IFS= read -r line; do
        # Suche nach "client denied by server configuration" oder "script not found or unable to stat"
        if [[ $line != *"client denied by server configuration"* && $line != *"script not found or unable to stat"* ]]; then
            # Schauen ob die Zeile bereits verarbeitet wurde
            if ! grep -Fxq "$line" "$processed_entries_file"; then
                # Schreibe die Zeile in das separate Logfile, wenn die Fehler nicht enthalten sind und die Zeile noch nicht verarbeitet wurde
                echo "$line" >> "$filtered_logfile"
                # Schreibe die Zeile zu den bereits verarbeiteten Einträgen hinzu
                echo "$line" >> "$processed_entries_file"
            fi
        fi
    done < "$original_logfile"
    echo "Habe fertig. Das separate Logfile wurde erstellt: $filtered_logfile"

    # Ändere die Besitzer von def.log auf www-data:www-data
    chown www-data:www-data "$filtered_logfile"
    echo "Besitzer von $filtered_logfile wurde auf www-data:www-data geändert."
else
    echo "Fehler: Die Original-Logdatei '$original_logfile' wurde nicht gefunden."
fi
Das wird nun jede Minute ausgeführt und erstellt 2 neue Dateien im Logverzeichnis. Eine def.log wo das drin steht was rein soll und eine processed_entries.txt in der drin steht was bereits im def.log schon steht.
User avatar
Jolinar
Community Moderator
Posts: 3608
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: error.log filtern

Post by Jolinar »

maverick wrote: Sun 10. Mar 2024, 16:02 Ich habe nun etwas gebastelt
Schön, daß es noch Leute gibt, die sich am CLI zurechtfinden :mrgreen: :geek:

maverick wrote: Sun 10. Mar 2024, 16:02 schön ist anders aber es macht was es soll
Ach was, bis auf die etwas langen Variablennamen sieht es doch ganz gut aus. Struktur paßt und auch die Scriptcomments sind ausreichend. :D

Aber wenn du es noch etwas schöner haben willst:

- grep -Fxq ist redundant, da reicht grep -Fq
- Beim chown könnte eine Fehlerprüfung Sinn machen
- Die Konsolenausgaben (die letzten 3 echo im Script) dürften in der Form überflüssig sein, da du das Script ja vermutlich per Cron und nicht manuell aufrufst, deswegen dürftest du diese Ausgaben garnicht zu Gesicht bekommen

Um die Performance noch etwas zu steigern, könntest du dieses Schleifenkonstrukt:

Code: Select all

        if [[ $line != *"client denied by server configuration"* && $line != *"script not found or unable to stat"* ]]; then
optimieren, etwa so:

Code: Select all

if [[ $line =~ "client denied by server configuration|script not found or unable to stat" ]]; then
  continue
fi
Neben der etwas schnelleren Abarbeitung hättest du so auch noch den kleinen Vorteil, daß beim Hinzufügen weiterer Ausschlußkriterien das Code Konstrukt nicht zu komplex wird. ;)
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
24unix
Posts: 1643
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: error.log filtern

Post by 24unix »

Jolinar wrote: Mon 11. Mar 2024, 10:54 bis auf die etwas langen Variablennamen sieht es doch ganz gut aus.
Mit einer guten IDE keine Problem, besser, als nach Jahren (oder bei fremden Code) rätseln was PEF z.B meinen könnte …
Jolinar wrote: Mon 11. Mar 2024, 10:54 Struktur paßt und auch die Scriptcomments sind ausreichend. :D
Nur in der falschen Sprache …
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
Jolinar
Community Moderator
Posts: 3608
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: error.log filtern

Post by Jolinar »

24unix wrote: Mon 11. Mar 2024, 11:03 Nur in der falschen Sprache …
Da der TE sein Script vermutlich nicht vermarkten will, sollte es verschmerzbar sein, daß er deutsche Comments gesetzt hat :D
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
24unix
Posts: 1643
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: error.log filtern

Post by 24unix »

Jolinar wrote: Mon 11. Mar 2024, 11:06
24unix wrote: Mon 11. Mar 2024, 11:03 Nur in der falschen Sprache …
Da der TE sein Script vermutlich nicht vermarkten will, sollte es verschmerzbar sein, daß er deutsche Comments gesetzt hat :D
Klar, aber mir blutet bei so etwas immer das Herz ;-) Ist halt mein Job.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
maverick
Posts: 34
Joined: Wed 9. Jan 2019, 17:40

Re: error.log filtern

Post by maverick »

Naja, wie schon erwähnt, es tut was es soll.
Was es die Performance angeht passt das so. Das error.log hat aktuell eine Größe von 11KB und das def.log 3KB.
Der Server auf dem alles läuft, also das Produktivsystem ist im Schnitt zu 3-8% ausgelastet.
Wenn die Datenbanken gesichert werden, 4 Stück gleichzeitig mit einem Volumen von ca 2GB alle zusammen, geht es schon mal auf 12-18% hoch. Aber dafür ist er damit in knapp 50 Sekunden fertig incl. übertragen per sshfs auf 2 weitere Server.

Die Textausgaben sind für mich wenn ich sowas mal manuell ausführe.
24unix wrote: Mon 11. Mar 2024, 11:12 Klar, aber mir blutet bei so etwas immer das Herz ;-) Ist halt mein Job.
Nowbody is perfect 8-)

Vielen Dank fürs lesen und die Tipps
Post Reply