Log figyelés és egyes hibaüzenetek riportolása e-mailben?

Fórumok

Sziasztok!

Egy naplófájlt kellene figyelnem, és minden alkalommal, amikor megjelenik benne egy előre definiált szöveget tartalmazó sor, kellene küldenem magamnak egy e-mailt.
Tudtok erre valami gyors és egyszerű megoldást?

Hozzászólások

inode vátozik?!

ha nem akkor kb:
tail -f XXX |grep YYY | while read i
do echo "$i" | mail emailcim
done

ha igen akkor syslog-ng-t javaslom.

Működik, ha elegendő adat összejön a csövekben - bash esetén ez 512 bájtos lépésekben állítható (hint: ulimit -p, default érték talán 8, azaz 4k). Ha a figyelni kívánt sor hossza 512 bájtnál nagyobb, akkor az ulimit -p 1 picit javíthat a helyzeten. A nagyobbik probléma az, hogy ha a logfájlt kirotálja valami a tail -f alól, akkor -nyitott fájlként- ott marad, foglalva a helyet.

Esetleg így (ha az "elnok" szót keresem a syslogban):


STR=elnok
tail -f /var/log/syslog |
while read -r sor
do
    [[ "$sor" != *$STR* ]] && continue
	echo "Volt bejegyzés" | mail cim
done
exit

A swatch pont ezt tudja, esetleg kicsit bonyolultabb esetben érdemes syslog-ng-vel megvalósítani.

Megkesve bar, de syslog-ng 3.4, filterek, smtp destination:


filter f_alert { match("elore definialt szoveg"); };
destination d_smtp { smtp(from("noreply@localhost")
                          to("root@localhost")
                          subject("ALERT: ELORE DEFINIALT SZOVEG")
                          body("Hi. ;)")); };
log {
  source(s_source1);
  source(s_source2);
  filter(f_alert);
  destination(d_smtp);
};

Es semmi kulso programra nincs szukseg, a file(ok) koveteset syslog-ng megoldja, sot, akarmilyen sourcera ra tudod aggatni a filtert, legyen az akar file, akar valami halozati source amit csak relayezel.

--
|8]

Termeszetesen!

Ahogy kollega irta, mindenfele template stuff mukodik body()-ban (subject()-ben is, sot, sajat headert is tudsz berakni header("Field" "Value") segitsegevel), \n es hasonlok detto, szoval egesz jopofa bodykat is ossze lehet rakni: (sortoresek nelkul, az csak az olvashatosag kedveert kerult be)


smtp([...]
     subject("[ALERT]: Bad stuff found on $HOST")
     header("X-Syslog-Tags" "$TAGS")
     header("Priority" "FUCKINGIMPORTANTDAMMIT")
     body("Slender. Very slender. But in the head, angry, as angry as saying mean things like $MSG!\n
\n
I mean, $PROGRAM is generally cool, but during this time of the month ($WEEK), it gets upset, and sends $PRIORITY messages.\n
\n
How rude.\n
\n
Your friendly syslog-ng daemon.\n
\n
P.S.: Please make it stop! I BEG YOU!\n
P.P.S: Sorry for the spam, you did not set throttle(). Not that I would care..."));

Csak arra kell figyelni, hogy minden alert kulon smtp kapcsolat lesz, es se SSL-t, se authentikaciot nem tud (meg) az smtp destination, es throttle() sem hat meg ra.

--
|8]

Csak a hajónapló kedvéért: a zabbix is tudja :)