Page 1 of 1
error.log filtern
Posted: Sat 9. Mar 2024, 22:37
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.
Re: error.log filtern
Posted: Sun 10. Mar 2024, 06:07
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
Re: error.log filtern
Posted: Sun 10. Mar 2024, 11:51
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.
Re: error.log filtern
Posted: Sun 10. Mar 2024, 11:59
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?
Re: error.log filtern [GELÖST]
Posted: Sun 10. Mar 2024, 16:02
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.
Re: error.log filtern
Posted: Mon 11. Mar 2024, 10:54
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
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.
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.

Re: error.log filtern
Posted: Mon 11. Mar 2024, 11:03
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.
Nur in der falschen Sprache …
Re: error.log filtern
Posted: Mon 11. Mar 2024, 11:06
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

Re: error.log filtern
Posted: Mon 11. Mar 2024, 11:12
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
Klar, aber mir blutet bei so etwas immer das Herz

Ist halt mein Job.
Re: error.log filtern
Posted: Mon 11. Mar 2024, 22:38
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
Vielen Dank fürs lesen und die Tipps