diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index a549684208..62d3e7bf2f 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -8,6 +8,7 @@ Table of Content: - [Templates](#templates) - [Syntax](#templates-syntax) - [Examples](#templates-examples) + - [Included](#templates-included) - [Transports](#transports) - [E-Mail](#transports-email) - [API](#transports-api) @@ -35,6 +36,8 @@ Table of Content: - [Device](#macros-device) - [Port](#macros-port) - [Time](#macros-time) + - [Sensors](#macros-sensors) + - [Misc](#macros-misc) - [Additional Options](#extra) @@ -151,6 +154,16 @@ Conditional formatting example, will display a link to the host in email or just Note the use of double-quotes. Single quotes (`'`) in templates will be escaped (replaced with `\'`) in the output and should therefore be avoided. +## Included + +We include a few templates for you to use, these are specific to the type of alert rules you are creating. For example if you create a rule that would alert on BGP sessions then you can +assign the BGP template to this rule to provide more information. + +The included templates are: + + - BGP Sessions + - Ports + - Temperature # Transports @@ -671,7 +684,9 @@ Description: Only select sensors that aren't ignored. Source: `(%sensors.sensor_alert = 1)` -## Packet Loss (Boolean) +## Misc (Boolean) + +### Packet Loss Entity: `(%macros.packet_loss_5m)` @@ -685,6 +700,54 @@ Description: Packet loss % value for the device within the last 15 minutes. Example: `%macros.packet_loss_15m` > 50 +### Ports in usage perc (Int) + +Entity: `((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100` + +Description: Port in used more than 50% + +Example: `%macros.port_in_usage_perc > 50 + +### Ports out usage perc (Int) + +Entity: `((%ports.ifOutOctets_rate*8)/%ports.ifSpeed)*100` + +Description: Port out used more than 50% + +Example: `%macros.port_out_usage_perc > 50 + +### Ports now down (Boolean) + +Entity: `%ports.ifOperStatus != %ports.ifOperStatus_prev && %ports.ifOperStatus_prev = "up" && %ports.ifAdminStatus = "up"` + +Description: Ports that were previously up and have now gone down. + +Example: `%macros.port_now_down = "1"` + +### Device component down [JunOS] + +Entity: `%sensors.sensor_class = "state" && %sensors.sensor_current != "6" && %sensors.sensor_type = "jnxFruState" && %sensors.sensor_current != "2"` + +Description: Device component is down such as Fan, PSU, etc for JunOS devices. + +Example: `%macros.device_component_down_junos = "1"` + +### Device component down [Cisco] + +Entity: `%sensors.sensor_current != "1" && %sensors.sensor_current != "5" && %sensors.sensor_type ~ "^cisco.*State$"` + +Description: Device component is down such as Fan, PSU, etc for Cisco devices. + +Example: `%macros.device_component_down_cisco = "1"` + +### PDU over amperage [APC] + +Entity: `%sensors.sensor_class = "current" && %sensors.sensor_descr = "Bank Total" && %sensors.sensor_current > %sensors.sensor_limit && %devices.os = "apc"` + +Description: APC PDU over amperage + +Example: `%macros.pdu_over_amperage_apc = "1"` + # Additional Options Here are some of the other options available when adding an alerting rule: diff --git a/html/includes/print-alert-rules.php b/html/includes/print-alert-rules.php index 8d93e23c09..ad0eb7a56c 100644 --- a/html/includes/print-alert-rules.php +++ b/html/includes/print-alert-rules.php @@ -75,6 +75,14 @@ if (isset($_POST['create-default'])) { 'disabled' => 0, 'name' => 'Sensor under limit', ); + $default_rules[] = array( + 'device_id' => '-1', + 'rule' => '%services.service_status != "0"', + 'severity' => 'critical', + 'extra' => '{"mute":false,"count":"-1","delay":"300"}', + 'disabled' => 0, + 'name' => 'Service up/down', + ); foreach ($default_rules as $add_rule) { dbInsert($add_rule, 'alert_rules'); } diff --git a/sql-schema/123.sql b/sql-schema/123.sql new file mode 100644 index 0000000000..6a7d4b3815 --- /dev/null +++ b/sql-schema/123.sql @@ -0,0 +1,9 @@ +INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.port_in_usage_perc','((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100','((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100','Ports using more than X perc of capacity IN','alerting',0,'macros',0,1,0); +INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.port_out_usage_perc','((%ports.ifOutOctets_rate*8)/%ports.ifSpeed)*100','((%ports.ifOutOctets_rate*8)/%ports.ifSpeed)*100','Ports using more than X perc of capacity OUT','alerting',0,'macros',0,1,0); +INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.port_now_down','%ports.ifOperStatus != %ports.ifOperStatus_prev && %ports.ifOperStatus_prev = "up" && %ports.ifAdminStatus = "up"','%ports.ifOperStatus != %ports.ifOperStatus_prev && %ports.ifOperStatus_prev = "up" && %ports.ifAdminStatus = "up"','Port has gone down','alerting',0,'macros',0,1,0); +INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.device_component_down_junos','%sensors.sensor_class = "state" && %sensors.sensor_current != "6" && %sensors.sensor_type = "jnxFruState" && %sensors.sensor_current != "2"','%sensors.sensor_class = "state" && %sensors.sensor_current != "6" && %sensors.sensor_type = "jnxFruState" && %sensors.sensor_current != "2"','Device Component down [JunOS]','alerting',0,'macros',0,1,0); +INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.device_component_down_cisco','%sensors.sensor_current != "1" && %sensors.sensor_current != "5" && %sensors.sensor_type ~ "^cisco.*State$"','%sensors.sensor_current != "1" && %sensors.sensor_current != "5" && %sensors.sensor_type ~ "^cisco.*State$"','Device Component down [Cisco]','alerting',0,'macros',0,1,0); +INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.pdu_over_amperage_apc','%sensors.sensor_class = "current" && %sensors.sensor_descr = "Bank Total" && %sensors.sensor_current > %sensors.sensor_limit && %devices.os = "apc"','%sensors.sensor_class = "current" && %sensors.sensor_descr = "Bank Total" && %sensors.sensor_current > %sensors.sensor_limit && %devices.os = "apc"','PDU Over Amperage [APC]','alerting',0,'macros',0,1,0); +INSERT INTO `alert_templates` (`rule_id`, `name`, `template`, `title`, `title_rec`) VALUES (',','BGP Sessions.','%title\\r\\n\nSeverity: %severity\\r\\n\n{if %state == 0}Time elapsed: %elapsed\\r\\n{/if}\nTimestamp: %timestamp\\r\\n\nUnique-ID: %uid\\r\\n\nRule: {if %name}%name{else}%rule{/if}\\r\\n\n{if %faults}Faults:\\r\\n\n{foreach %faults}\n#%key: %value.string\\r\\n\nPeer: %value.astext\\r\\n\nPeer IP: %value.bgpPeerIdentifier\\r\\n\nPeer AS: %value.bgpPeerRemoteAs\\r\\n\nPeer EstTime: %value.bgpPeerFsmEstablishedTime\\r\\n\nPeer State: %value.bgpPeerState\\r\\n\n{/foreach}\n{/if}','',''); +INSERT INTO `alert_templates` (`rule_id`, `name`, `template`, `title`, `title_rec`) VALUES (',','Ports','%title\\r\\n\nSeverity: %severity\\r\\n\n{if %state == 0}Time elapsed: %elapsed{/if}\nTimestamp: %timestamp\nUnique-ID: %uid\nRule: {if %name}%name{else}%rule{/if}\\r\\n\n{if %faults}Faults:\\r\\n\n{foreach %faults}\\r\\n\n#%key: %value.string\\r\\n\nPort: %value.ifName\\r\\n\nPort Name: %value.ifAlias\\r\\n\nPort Status: %value.message\\r\\n\n{/foreach}\\r\\n\n{/if}\n','',''); +INSERT INTO `alert_templates` (`rule_id`, `name`, `template`, `title`, `title_rec`) VALUES (',','Temperature','%title\\r\\n\nSeverity: %severity\\r\\n\n{if %state == 0}Time elapsed: %elapsed{/if}\\r\\n\nTimestamp: %timestamp\\r\\n\nUnique-ID: %uid\\r\\n\nRule: {if %name}%name{else}%rule{/if}\\r\\n\n{if %faults}Faults:\\r\\n\n{foreach %faults}\\r\\n\n#%key: %value.string\\r\\n\nTemperature: %value.sensor_current\\r\\n\nPrevious Measurement: %value.sensor_prev\\r\\n\n{/foreach}\\r\\n\n{/if}','','');