Archive from April, 2012

* Posílání chybových hlášek na mail

22. April 2012, Jakub Horák. Categorized as Unassigned.


Včera jsem zjistil, že mám poškozený filesystém na zálohovacím disku. Oprava byla jednoduchá, stačilo pustit fsck, ale nepříjemné bylo, že jsem se o problému dozvěděl úplně náhodou, až při ručním spustění zálohy před velkou aktualizací systému. Aby se již podobná situace neopakovala, nastavil jsem démona syslog-ng, aby mi posílal chybové hlášky na mail. Když se vyskytne problém, může se ale zalogovat mnoho chyb najednou, a tak mi zanedlouho přišlo cca 300 mailů. Abych podobnému zahlcení do budoucna zabránil, napsal jsem následující skript, který pošle nejvýše jeden mail každých pět minut.

#!/bin/bash
#
# ./bin/syslog-mail.sh
# Posilat nejvyse jednu hlasku za pet minut
#
TO='xy@xy.cz'
FROM=$TO
 
last=`cat /var/tmp/syslog-mail-last-sent 2>/dev/null`
let last=last+300
now=`date +%s`
if [ "$last" -lt "$now" ]; then
	read logline
	logline=${logline/+([0-9<>])}
	if [ "$logline" == "" ]; then
		exit 0
	fi
	/usr/sbin/sendmail -t <<EOT
To: $TO
From: $FROM
Subject: Log Alert: $logline
 
$logline
`while read logline; do
	logline=${logline/+([0-9<>])}
	echo $logline
done`
 
--
This is an automatically generated message from $HOSTNAME
EOT
 
	echo "$now" > /var/tmp/syslog-mail-last-sent
fi

Do /etc/syslog-ng/syslog-ng.conf jsem přidal tato pravidla:

destination mail-alert {
	program("/home/kuba/bin/syslog-mail");
};
filter f_error {
	not facility (mail) and level(err,crit,emerg);
};
log {
	source(src);
	filter(f_error);
	destination(mail-alert);
};

.