Syslog Alerts

rsyslog is default on most Debain based distros.

The alert format should resemble this:

Alert for %hostname%: 
Timestamp: %timereported%
Severity:  %syslogseverity-text%
Program:   %programname%
Message:   %msg%

When processed, this will create an email like this:

Alert for foobar.local:
Timestamp: Nov 22 22:11:52
Severity:  Error
Program:   baz
Message:   Foobar is fubar'd!

Configure rsyslog

This will configure the daemon to send alerts on any message with the severity "Error" or higher.

The config snippet below will be added to a new config file, such as /etc/rsyslog.d/alert.conf

module(load="ommail")
template (name="mailBody"  type="string" string="Alert for %hostname%:\n\nTimestamp: %timereported%\nSeverity:  %syslogseverity-text%\nProgram:   %programname%\nMessage:  %msg%")
template (name="mailSubject" type="string" string="[%hostname%] Syslog alert for %programname%")

if $syslogseverity <= 3 then {
   action(type="ommail" server="127.0.0.1" port="25"
          mailfrom="rsyslog@localhost"
          mailto="root@localhost"
          subject.template="mailSubject"
          template="mailBody"
          action.execonlyonceeveryinterval="3600")
}

To exclude services from email alerts, modify the if line. For example, excluding spammy alerts from smartd:

if $syslogseverity <= 3 and $programname != 'smartd' then {

Test the rsyslog config

Rsyslog can self-test its config:

sudo rsyslogd -N1

Apply the rsyslog config

Reload the service to apply the changes:

sudo systemctl restart rsyslog

Test alerts

Use the logger to test the config:

logger -p "local0.error" "This is a drill!" -t "servicename"

More info

Template variables: https://www.rsyslog.com/doc/master/configuration/properties.html

Mail module: https://www.rsyslog.com/doc/v8-stable/configuration/modules/ommail.html