I'm new to syslog-ng OSE. I've been able to follow the samples, and configured an email alert when a syslog message is received.
Now I'm trying to configure an email alert when it has been too long since I've received a particular syslog message.
First, I configured a destination:
destination d_heartbeat {
file("/var/log/heartbeat.log" mark-freq(60) mark-mode(dst-idle) );
};
Then, I configured a filter and log:
filter f_heartbeat {
match("I am still here" value("MESSAGE) );
};
Log { source(s_network); filter(f_heartbeat); destination(d_heartbeat); };
I was pleasantly surprised that this worked. The heartbeat.log file received the message, and 60 seconds later it received the "syslog -- MARK --"
Since I wanted an email alert, I defined a new source, to grab the output of my heartbeat.log as input:
source s_heartbeat { file(""/var/log/heartbeat.log"); };
destination d_smtp { smtp(
host("10.10.10.25") port(25)
from("syslog-ng" "noreply@mydomain.com")
to("me" "myemail@mydomain.com")
subject("host is down")
body("no heartbeat received from the program on host\n")
); };
filter f_timeout { match ("MARK --" value("MESSAGE")); };
log { source(s_heartbeat); filter(f_timeout); destination(d_smtp); };
This seemed to work when I tested it with a single heartbeat followed by timeout, but I’m still misunderstanding something. If it gets more than one message written to heartbeat.log, then the timeout MARK doesn’t happen.
What am I missing? Is there a better way to accomplish this alert?
Thanks,
Gregg
(running syslog-ng v3.19.1-5 on debian 10)