Monit doesn't keep state between reloads
I'm trying to understand how Monit keeps the state between reloads/restarts, using the statefile.
I'm monit with the following configuration:
set daemon 10 with start delay 1 set logfile /var/log/monit/service.log set pidfile /var/run/monit.pid set idfile /var/monit/.monit.id set statefile /var/monit/.monit.state check file test_file with path /tmp/test.txt if changed timestamp then alert
If /tmp/test.txt is updated (touch /tmp/test.txt), this triggers an alert, as expected:
[UTC Jan 18 14:42:51] debug : M/Monit: status message sent to http://[mmonit.example.com]:8080/collector [UTC Jan 18 14:42:52] debug : 'test_file' file exists [UTC Jan 18 14:42:52] debug : 'test_file' is a regular file or socket [UTC Jan 18 14:42:52] debug : 'test_file' actual system time obtained [UTC Jan 18 14:42:52] error : 'test_file' timestamp was changed for /tmp/test.txt [UTC Jan 18 14:42:52] debug : ------------------------------------------------------------------------------- [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x41a5a3] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x41ad7f] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x4158ed] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x42b4f9] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x42d49d] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x42c0c5] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x4115d9] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x412331] [UTC Jan 18 14:42:52] debug : /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f7b0844a76d] [UTC Jan 18 14:42:52] debug : /opt/monit/bin/monit() [0x404b2a] [UTC Jan 18 14:42:52] debug : ------------------------------------------------------------------------------- [UTC Jan 18 14:42:52] debug : M/Monit: event message sent to http://[mmonit.example.com]:8080/collector
Waited for one cycle with no action:
[UTC Jan 18 14:43:01] debug : M/Monit: status message sent to http://[mmonit.example.com]:8080/collector [UTC Jan 18 14:43:02] debug : 'test_file' file exists [UTC Jan 18 14:43:02] debug : 'test_file' is a regular file or socket [UTC Jan 18 14:43:02] debug : 'test_file' actual system time obtained [UTC Jan 18 14:43:02] info : 'test_file' timestamp was not changed for /tmp/test.txt
Executed touch /tmp/test.txt && sv reload monit, and the state gets lost between restarts:
[UTC Jan 18 14:43:06] info : Awakened by the SIGHUP signal Reinitializing Monit - Control file '/opt/monit/conf/monitrc' [UTC Jan 18 14:43:06] info : M/Monit heartbeat stopped [UTC Jan 18 14:43:06] info : Shutting down Monit HTTP server [UTC Jan 18 14:43:07] info : Monit HTTP server stopped [UTC Jan 18 14:43:07] debug : Adding host allow 'localhost' [UTC Jan 18 14:43:07] debug : Adding host allow '<EDITED>' [UTC Jan 18 14:43:07] debug : Adding host allow 'mmonit.example.com' [UTC Jan 18 14:43:07] debug : Adding credentials for user 'monit' [UTC Jan 18 14:43:07] info : Starting Monit HTTP server at [*]:3737 [UTC Jan 18 14:43:07] info : Monit HTTP server started [UTC Jan 18 14:43:07] info : '<EDITED HOSTNAME>' Monit reloaded [UTC Jan 18 14:43:07] debug : M/Monit: event message sent to http://[mmonit.example.com]:8080/collector [UTC Jan 18 14:43:07] info : M/Monit heartbeat started [UTC Jan 18 14:43:07] debug : M/Monit: status message sent to http://[mmonit.example.com]:8080/collector [UTC Jan 18 14:43:07] debug : 'test_file' file exists [UTC Jan 18 14:43:07] debug : 'test_file' is a regular file or socket [UTC Jan 18 14:43:07] debug : 'test_file' actual system time obtained [UTC Jan 18 14:43:07] debug : 'test_file' timestamp was not changed for /tmp/test.txt
Is this expected behavior? Shouldn't I get an alert?
I reproduced the same scenario with Monit 5.14 and Monit 5.15, with identical output.
Comments (6)
-
-
@jvrplmlmn I also added restore of the timestamp on my PR.
A quick a verification indicates a solution for your problem, but I'm still waiting for comments of @tildeslash.
I might go completely the wrong way with this, or break certain use cases I'm not aware of. -
repo owner -
assigned issue to
- marked as enhancement
-
assigned issue to
-
repo owner - changed status to resolved
Fix Issue
#316: add file checksum to state data and restore it→ <<cset fb422063ec3f>>
-
repo owner Merged in duke_bartholomew/monit/MON-316 (pull request #32)
Fix Issue
#316: add file checksum to state data and restore it→ <<cset 744cf721afbe>>
-
repo owner - removed version
Removing version: 5.14 (automated comment)
- Log in to comment
I created a PR for this (pull request #32)
Maybe it makes sense to also do this for the 'timestamp' checks.