ubuntuusers.de

Mail bei Logeintrag

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

Muffin72

Anmeldungsdatum:
18. Juni 2012

Beiträge: 190

Hallo,

ist es möglich sich vom Webserver eine Mail per MTA schicken zu lassen, sobald in einer bestimmten Logdatei ein neuer Eintrag erscheint? Als konkreter Fall z. B., sobald sich jemand eine Homepage auf dem Webserver aufruft, erscheint ein Logeintrag in der access.log von apache. Diesen Eintrag würde ich mir gerne per Mail schicken lassen, wäre per echo über postfix von Prinzip ja kein Problem, allerdings möchte ich das nur sobald ein neuer Eintrag stattfindet, also zeitnah und situationsbezogen. So gibt es noch andere Logs, die interessant wären, sofern sich da etwas tut. Ist dies so möglich?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Hallo,

natürlich kann man das machen (vgl. z.B. Alternativen zu inotify für ein Beispiel wie man eine Logdatei beobachten kann), aber eine Mail pro neue Zeile in einer Logdatei kann ziemlich mörderisch sein, wenn es in kurzer Zeit viele Ereignisse gibt. Außerdem kann die Dauer für die Auslieferung von E-Mails (je nachdem über welche Server es läuft) schwanken - wenn es schnell gehen soll, könnte man in Richtung Telegram oder IRC denken.

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Auch mit den APIs von journald in diversen Programmiersprachen kann man Logs des Webservers beobachten, dafuer muss man allerdings programmieren koennen (oder Code aus dem Internet kopieren ohne ihn zu verstehen).

Muffin72

(Themenstarter)

Anmeldungsdatum:
18. Juni 2012

Beiträge: 190

Der Hinweis mit den Alternativen hört sich sehr gut an. Werde ich mal testen, vielen Dank Euch Beiden ☺

Muffin72

(Themenstarter)

Anmeldungsdatum:
18. Juni 2012

Beiträge: 190

Noch eine kurze Frage (leider mit einem neuen Post, nicht dass das im Edit unter geht 😉)

Wäre dann die Syntax etwa so:

tail -F /var/log/apache2/access.log | grep --line-buffered httpd | while read; do echo "XXX" | mail -s "XXX" "XXX@XXX; done

Wäre dies korrekt?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Wenn die für dich interessanten Zeilen "httpd" enthalten, sollte das passen. Sonst musst du halt den grep Befehl anpassen (oder ganz weglassen, wenn du nicht filtern willst).

Muffin72

(Themenstarter)

Anmeldungsdatum:
18. Juni 2012

Beiträge: 190

Ah, das httpd habe ich völlig verpeilt, stimmt, der Fluch von copy and paste. Nein, mir geht es um jeden Eintrag, sobald sich jemand auf den Webserver schaltet und die Homepage aufruft. Dann würde ich den grep komplett weglassen bzw. bei anderen Logs grep entsprechend anpassen.

Super Sache, vielen Dank ☺

Muffin72

(Themenstarter)

Anmeldungsdatum:
18. Juni 2012

Beiträge: 190

Jetzt muss ich nochmal was nachhaken: Mailversand klappt bei neuem Log-Eintrag, soweit gut. Nun wäre es noch nett den Inhalt des Logs per Mail als reinen Test zu bekommen. Etwas googlen hat mich zu uuencode, aber es muss doch auch was bordeigenes geben, zudem will ich ja nicht die log als Anhang, sondern als reine Textausgabe in der Mail. Habe es mit >> probiert, aber das wollte auch nicht. Wäre nett wenn Ihr mir nochmal auf die Sprünge helft ☺

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Muffin72 schrieb:

Nun wäre es noch nett den Inhalt des Logs per Mail als reinen Test zu bekommen.

Was bekommst du denn stattdessen?

So würde er die Zeile aus dem Log in die Variable line einlesen und die dann weiterreichen:

1
2
3
tail -F /var/log/apache2/access.log | while read -r line; do
    mail -s "XXX" "XXX@XXX <<< "$line"
done

Und so sollte er die Logdatei als Body nehmen:

1
2
3
tail -F /var/log/apache2/access.log | while read; do
    mail -s "XXX" "XXX@XXX < /var/log/apache2/access.log
done

Muffin72

(Themenstarter)

Anmeldungsdatum:
18. Juni 2012

Beiträge: 190

Klappt, vielen Dank für Deine geduldige und tolle Hilfe ☺

Antworten |