{"id":395,"date":"2010-03-18T09:11:33","date_gmt":"2010-03-18T07:11:33","guid":{"rendered":"http:\/\/code.openark.org\/forge\/?page_id=395"},"modified":"2013-05-23T14:21:22","modified_gmt":"2013-05-23T12:21:22","slug":"alerts","status":"publish","type":"page","link":"https:\/\/code.openark.org\/forge\/mycheckpoint\/documentation\/alerts","title":{"rendered":"Alerts"},"content":{"rendered":"<p><em>mycheckpoint<\/em> provides with conditional alerts checking and notification. It allows for:<\/p>\n<ul>\n<li>User defined conditions to follow (Is the slave replicating too far behind? Is the datadir mountpoint above 90% utilization? Are there too little queries?)<\/li>\n<li>Automatic email notifications on condition failure<\/li>\n<li>Single\/recurring email notifications on condition failure<\/li>\n<\/ul>\n<p><em>mycheckpoint<\/em> is <em>SQL oriented<\/em>, and in that spirit, the conditions are nothing but SQL conditions.<\/p>\n<p><em>mycheckpoint<\/em> currently supports conditions based on sampled data, as is found in the <strong>sv_report_sample <\/strong>view. This view is also used for generating human report and charts. It provides with aggregated and calculated data.<\/p>\n<p>Alert conditions are located in the <strong>alert_condition<\/strong> table. To add a new condition, <strong>INSERT<\/strong> a row into <strong>alert_condition<\/strong>. This is the brief table definition:<\/p>\n<blockquote>\n<pre>mysql&gt; DESC alert_condition;\r\n+-------------------------------+---------------------------------------------------+------+-----+---------+----------------+\r\n| Field\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Null | Key | Default | Extra\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n+-------------------------------+---------------------------------------------------+------+-----+---------+----------------+\r\n| alert_condition_id\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | NO\u00a0\u00a0 | PRI | NULL\u00a0\u00a0\u00a0 | auto_increment |\r\n| enabled\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | tinyint(1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | NO\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n| condition_eval\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | varchar(4095)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | NO\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | NULL\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n| monitored_host_condition_eval | varchar(4095)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | NO\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | NULL\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n| description\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | varchar(255)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | YES\u00a0 |\u00a0\u00a0\u00a0\u00a0 | NULL\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n| error_level\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('debug','info','warning','error','critical') | NO\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | error\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n| alert_delay_minutes\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | smallint(5) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | NO\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n| repetitive_alert\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | tinyint(1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | NO\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n+-------------------------------+---------------------------------------------------+------+-----+---------+----------------+\r\n\r\nDescription:<\/pre>\n<\/blockquote>\n<ul>\n<li><strong>enabled<\/strong>: a boolean value. <strong>0<\/strong> disables the condition: it will not be checked. <strong>1<\/strong> (default) enables it.<\/li>\n<li><strong>condition_eval<\/strong>: an SQL condition to evaluate (e.g. <strong>&#8216;seconds_behind_master IS NULL&#8217;<\/strong>. See following examples). For the condition to be raised, it must evaluate to a nonzero, not <strong>NULL<\/strong> integer value. A result of <strong>0<\/strong> or <strong>NULL<\/strong> means the condition is not met and that there is no problem.<\/li>\n<li><strong>monitored_host_condition_eval<\/strong>: an SQL condition to evaluate on the monitored server; typically this would be a call to a stored function on the monitored server. Same rules apply as for <strong>condition_eval<\/strong>.<\/li>\n<li><strong>description<\/strong>: a human readable explanation of the condition. This will be presented in various views and in email notifications.<\/li>\n<li><strong>error_level<\/strong>: condition severity. Defaults to <strong>&#8216;Error&#8217;<\/strong>.<\/li>\n<li><strong>alert_delay_minutes<\/strong>: how much time must pass with continuous met condition, before it is considered as a problem and becomes candidate for notification.<\/li>\n<li><strong>repetitive_alert<\/strong>: a boolean value. <strong>1<\/strong> means an email notification will include this condition whenever the condition is met. <strong>0<\/strong> (default) means an email notification is only set once in any continuous meeting of this condition.<\/li>\n<\/ul>\n<h4>Examples<\/h4>\n<p>We wish to raise an alert when the slave does not replicate. The alert should be raised immediately.<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description, <strong>alert_delay_minutes<\/strong>)\r\n  VALUES ('seconds_behind_master IS NULL', 'Slave not replicating', <strong>0<\/strong>);<\/pre>\n<\/blockquote>\n<p>Same as above, using defaults:<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description)\r\n  VALUES ('seconds_behind_master IS NULL', 'Slave not replicating');<\/pre>\n<\/blockquote>\n<p>We wish to raise an alert when the slave lags more than <strong>60<\/strong> seconds behind the master. Only raise this alert if this occurs for continuous sampling over 10 minutes.<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)\r\n  VALUES ('seconds_behind_master &gt; 60', 'Slave lags too far behind', <strong>10<\/strong>);<\/pre>\n<\/blockquote>\n<p>As before. But, since we are known to have daily maintenance during night hours, do not raise an alert at that time:<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (<strong>condition_eval<\/strong>, description, alert_delay_minutes)\r\n  VALUES ('<strong>(seconds_behind_master &gt; 60) AND (HOUR(ts) NOT BETWEEN 2 AND 4)<\/strong>', 'Slave lags too far behind', 10);<\/pre>\n<\/blockquote>\n<p>We wish to raise an alert when the datadir mountpoint exceeds <strong>90%<\/strong> disk space utilization (Linux only), and remains so for <strong>30<\/strong> minutes. We get one email notification when this first happens.<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)\r\n  VALUES ('os_datadir_mountpoint_usage_percent &gt; 90', 'datadir mount point is over 90%', <strong>30<\/strong>);<\/pre>\n<\/blockquote>\n<p>We wish to raise a recurring alert when the datadir mountpoint exceeds <strong>95%<\/strong> disk space utilization. Keep emailing until this is resolved!<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description, <strong>repetitive_alert<\/strong>)\r\n  VALUES ('os_datadir_mountpoint_usage_percent &gt; 95', 'datadir mount point is over 95%', <strong>1<\/strong>);<\/pre>\n<\/blockquote>\n<p>9am is our peak time. We know to expect at least 50 SELECT per second in average, or else this indicates a failure in our application code:<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description)\r\n  VALUES ('(com_select_psec &lt; 50) AND (HOUR(ts) = 9)', 'Too few SELECTs issued during peak time');<\/pre>\n<\/blockquote>\n<p>OS load average (Linux only) is too high for too long:<\/p>\n<blockquote>\n<pre>INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)\r\n  VALUES ('os_loadavg &gt; 10', 'Load average is too high', 30);<\/pre>\n<\/blockquote>\n<h4>Email notifications<\/h4>\n<p>An example email notification is of the form:<\/p>\n<blockquote>\n<pre>Database alert: mycheckpoint\r\n\r\nThis is an alert mail sent by mycheckpoint, monitoring your mycheckpoint MySQL database.\r\nThe following problems have been found:\r\n\r\nERROR: Slave not replicating (pending id: 1)\r\n This error alert is pending for 25 minutes, since 2010-03-22 08:05:05\r\n---\r\nResolved: Too few SELECTs (pending id: 4)\r\n\r\nYou are receiving this email from a mycheckpoint -- MySQL monitoring utility -- installation.\r\nPlease consult your system or database administrator if you do not know why you got this mail.\r\n-------\r\nmycheckpoint home page: http:\/\/code.openark.org\/forge\/mycheckpoint<\/pre>\n<\/blockquote>\n<p>In the above email one error is still pending, while another is notified as being resolved.<\/p>\n<h4>Reviewing alerts<\/h4>\n<p><em>mycheckpoint<\/em> will evaluate all enabled alert conditions at each sampling of data (which means on each execution of <em>mycheckpoint<\/em>).<\/p>\n<p>Consult <strong>alert_condition_query_view<\/strong> to understand which checks are performed and how they evaluate:<\/p>\n<blockquote>\n<pre>mysql&gt; SELECT query FROM <strong>alert_condition_query_view<\/strong> \\G\r\n*************************** 1. row ***************************\r\nquery: SELECT seconds_behind_master &gt; 60 AS condition_1 ,seconds_behind_master IS NULL AS condition_2 ,os_root_mountpoint_usage_percent &gt; 90 AS condition_3 ,os_datadir_mountpoint_usage_percent &gt; 90 AS condition_4 ,os_tmpdir_mountpoint_usage_percent &gt; 90 AS condition_5 FROM mycheckpoint.sv_report_sample\r\nORDER BY id DESC\r\nLIMIT 1;<\/pre>\n<\/blockquote>\n<p>Conditions which are met wre written to the <strong>alert<\/strong> table. This table serves as a history table for all alerts. It is automaticaly purged according to existing recorded data.<\/p>\n<p>The <strong>alert<\/strong> table is nothing but a many-to-many connecting table. To get a history brief, consult the <strong>alert_view<\/strong> view:<\/p>\n<blockquote>\n<pre>mysql&gt; select * from <strong>alert_view<\/strong>;\r\n+--------------------+---------------------+-------------------------------+-----------------------+-------------+---------------------+\r\n| alert_condition_id | sv_report_sample_id | condition_eval\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | description\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | error_level | ts\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n+--------------------+---------------------+-------------------------------+-----------------------+-------------+---------------------+\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 471 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 2010-03-15 09:39:45 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 472 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 2010-03-15 09:39:49 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 480 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 2010-03-15 10:41:33 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 486 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 2010-03-16 07:49:05 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 487 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 2010-03-17 07:10:35 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 488 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 2010-03-17 07:10:36 |\r\n+--------------------+---------------------+-------------------------------+-----------------------+-------------+---------------------+<\/pre>\n<\/blockquote>\n<p>The <strong>alert_pending<\/strong> table stores data for pending alerts: those alerts which are raised at current.<\/p>\n<p>Consult <strong>alert_pending_view<\/strong> to get a report on all pending alerts:<\/p>\n<blockquote>\n<pre>mysql&gt; SELECT * FROM <strong>alert_pending_view<\/strong>;\r\n+------------------+--------------------+-------------------------------+-----------------------+-------------+---------------------+---------------------+---------------------+-----------------+----------+-------------+---------------------+------------------+\r\n| alert_pending_id | alert_condition_id | condition_eval\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | description\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | error_level | alert_delay_minutes | ts_start\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | ts_end\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | elapsed_minutes | in_error | is_notified | ts_notified\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | repetitive_alert |\r\n+------------------+--------------------+-------------------------------+-----------------------+-------------+---------------------+---------------------+---------------------+-----------------+----------+-------------+---------------------+------------------+\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 | seconds_behind_master IS NULL | Slave not replicating | error\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 | 2010-03-15 09:39:45 | 2010-03-17 07:10:36 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2730 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 | 2010-03-16 07:49:08 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 |\r\n+------------------+--------------------+-------------------------------+-----------------------+-------------+---------------------+---------------------+---------------------+-----------------+----------+-------------+---------------------+------------------+<\/pre>\n<\/blockquote>\n<p>Consult <strong>alert_email_message_items_view<\/strong> to learn what kind of email notification you should expect:<\/p>\n<blockquote>\n<pre>mysql&gt; SELECT * FROM <strong>alert_email_message_items_view<\/strong> \\G\r\n*************************** 1. row ***************************\r\nalert_pending_id: 1\r\nmessage_item: ERROR: Slave not replicating\r\n This error alert is pending for 2730 minutes, since 2010-03-15 09:39:45<\/pre>\n<\/blockquote>\n<p>Use <strong>alert_pending_html_view<\/strong> to get HTML report on pending alerts:<\/p>\n<blockquote>\n<pre>mysql&gt; SELECT html FROM alert_pending_html_view \\G<\/pre>\n<\/blockquote>\n<p>See <a href=\"http:\/\/mycheckpoint.googlecode.com\/svn\/trunk\/doc\/html\/sample\/http\/mcp_sql00\/alert_pending_html_view\">sample report<\/a>.<\/p>\n<h4>Disabling alerts<\/h4>\n<p>Execute:<\/p>\n<blockquote>\n<pre>mycheckpoint --skip-emails<\/pre>\n<\/blockquote>\n<p>To avoid sending email notifications. Alert conditions will be evaluated and alerts will be recorded.<\/p>\n<p>Execute:<\/p>\n<blockquote>\n<pre>mycheckpoint --skip-alerts<\/pre>\n<\/blockquote>\n<p>To completely ignore the alert conditions. No conditions are evaluated nor are any alerts recorded.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>mycheckpoint provides with conditional alerts checking and notification. It allows for: User defined conditions to follow (Is the slave replicating too far behind? Is the datadir mountpoint above 90% utilization? Are there too little queries?) Automatic email notifications on condition failure Single\/recurring email notifications on condition failure mycheckpoint is SQL oriented, and in that spirit, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":147,"menu_order":20,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-395","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/pages\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/comments?post=395"}],"version-history":[{"count":30,"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/pages\/395\/revisions"}],"predecessor-version":[{"id":437,"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/pages\/395\/revisions\/437"}],"up":[{"embeddable":true,"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/pages\/147"}],"wp:attachment":[{"href":"https:\/\/code.openark.org\/forge\/wp-json\/wp\/v2\/media?parent=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}