mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
166 lines
7.5 KiB
Markdown
166 lines
7.5 KiB
Markdown
|
Table of Content:
|
||
|
- [About](#about)
|
||
|
- [Rules](#rules)
|
||
|
- [Syntax](#rules-syntax)
|
||
|
- [Examples](#rules-examples)
|
||
|
- [Templates](#templates)
|
||
|
- [Syntax](#templates-syntax)
|
||
|
- [Examples](#templates-examples)
|
||
|
- [Transports](#transports)
|
||
|
- [E-Mail](#transports-email)
|
||
|
- [API](#transports-api)
|
||
|
- [Nagios-Compatible](#transports-nagios)
|
||
|
- [IRC](#transports-irc)
|
||
|
|
||
|
# <a name="about">About</a>
|
||
|
|
||
|
LibreNMS includes a highly customizable alerting system.
|
||
|
The system requires a set of user-defined rules to evaluate the situation of each device, port, service or any other entity.
|
||
|
|
||
|
This document only covers the usage of it. See the [DEVELOPMENT.md](https://github.com/f0o/glowing-tyrion/blob/master/DEVELOPMENT.md) for code-documentation.
|
||
|
|
||
|
# <a name="rules">Rules</a>
|
||
|
|
||
|
Rules are defined using a logical language.
|
||
|
The GUI provides a simple way of creating basic as well as complex Rules in a self-describing manner.
|
||
|
More complex rules can be written manually.
|
||
|
|
||
|
## <a name="rules-syntax">Syntax</a>
|
||
|
|
||
|
Rules must consist of at least 3 elements: An __Entity__, a __Condition__ and a __Value__.
|
||
|
Rules can contain braces and __Glues__.
|
||
|
__Entities__ are provided as `%`-Noted pair of Table and Field. For Example: `%ports.ifOperStatus`.
|
||
|
__Conditions__ can be any of:
|
||
|
- Equals `=`
|
||
|
- Not Equals `!=`
|
||
|
- Matches `~`
|
||
|
- Not Matches `!~`
|
||
|
- Greater `>`
|
||
|
- Greater or Equal `>=`
|
||
|
- Smaller `<`
|
||
|
- Smaller or Equal `<=`
|
||
|
|
||
|
__Values__ can be Entities or any single-quoted data.
|
||
|
__Glues__ can be either `&&` for `AND` or `||` for `OR`.
|
||
|
|
||
|
__Note__: The difference between `Equals` and `Matches` (and it's negation) is that `Equals` does a strict comparison and `Matches` allows the usage of the placeholder `*`. The placeholder `*` is comparable with `.*` in RegExp.
|
||
|
|
||
|
## <a name="rules-examples">Examples</a>
|
||
|
|
||
|
Alert when:
|
||
|
- Device goes down: `%devices.status != '1'`
|
||
|
- Any port changes: `%ports.ifOperStatus != 'up'`
|
||
|
- Root-directory gets too full: `%storage.storage_descr = '/' && %storage.storage_perc >= '75'`
|
||
|
- Any storage gets fuller than the 'warning': `%storage.storage_perc >= %storage_perc_warn`
|
||
|
|
||
|
# <a name="templates">Templates</a>
|
||
|
|
||
|
Templates can be assigned to a single or a group of rules.
|
||
|
They can contain any kind of text.
|
||
|
The template-parser understands `if` and `foreach` controls and replaces certain placeholders with information gathered about the alert.
|
||
|
|
||
|
## <a name="templates-syntax">Syntax</a>
|
||
|
|
||
|
Controls:
|
||
|
- if-else (Else can be omitted):
|
||
|
`{if %placeholder == 'value'}Some Text{else}Other Text{/if}`
|
||
|
- foreach-loop:
|
||
|
`{foreach %placeholder}Key: %key<br/>Value: %value{/foreach}`
|
||
|
|
||
|
__Limitations__: Currently it is not possible to have nested `if` controls, so `if` inside an `if`. It is also not possible to have an `if` inside a `foreach` control. These limitations are going to be resolved in (near?) future.
|
||
|
|
||
|
Placeholders:
|
||
|
- Hostname of the Device: `%hostname`
|
||
|
- Title for the Alert: `%title`
|
||
|
- Time Elapsed, Only available on recovery (`%state == 0`): `%elapsed`
|
||
|
- Alert-ID: `%id`
|
||
|
- Unique-ID: `%uid`
|
||
|
- Faults, Only available on alert (`%state == 1`), must be iterated in a foreach: `%faults`
|
||
|
- State: `%state`
|
||
|
- Severity: `%severity`
|
||
|
- Rule: `%rule`
|
||
|
- Timestamp: `%timestamp`
|
||
|
- Contacts, must be iterated in a foreach, `%key` holds email and `%value` holds name: `%contacts`
|
||
|
|
||
|
## <a name="templates-examples">Examples</a>
|
||
|
|
||
|
Default Template:
|
||
|
```text
|
||
|
%title\r\n
|
||
|
Severity: %severity\r\n
|
||
|
{if %state == 0}Time elapsed: %elapsed\r\n{/if}
|
||
|
Timestamp: %timestamp\r\n
|
||
|
Unique-ID: %uid\r\n
|
||
|
Rule: %rule\r\n
|
||
|
{if %faults}Faults:\r\n
|
||
|
{foreach %faults} #%key: %value\r\n{/foreach}{/if}
|
||
|
Alert sent to: {foreach %contacts}%value <%key> {/foreach}
|
||
|
```
|
||
|
|
||
|
# <a name="transports">Transports</a>
|
||
|
|
||
|
Transports are located within `$config['install_dir']/includes/alerts/transports.*.php` and defined as well as configured via `$config['alert']['transports']['Example'] = 'Some Options'`.
|
||
|
|
||
|
Contacts will be gathered automatically and passed to the configured transports.
|
||
|
The contacts will always include the `SysContact` defined in the Device's SNMP configuration and also every LibreNMS-User that has at least `read`-permissions on the entity that is to be alerted.
|
||
|
At the moment LibreNMS only supports Port or Device permissions.
|
||
|
To include users that have `Global-Read` or `Administrator` permissions it is required to add these additions to the `config.php` respectively:
|
||
|
```php
|
||
|
$config['alert']['globals'] = true; //Include Global-Read into alert-contacts
|
||
|
$config['alert']['admins'] = true; //Include Adminstrators into alert-contacts
|
||
|
```
|
||
|
|
||
|
## <a name="transports-email">E-Mail</a>
|
||
|
|
||
|
E-Mail transport is enabled with adding the following to your `config.php`:
|
||
|
```php
|
||
|
$config['alert']['transports']['mail'] = true;
|
||
|
```
|
||
|
|
||
|
The E-Mail transports uses the same email-configuration like the rest of LibreNMS.
|
||
|
As a small reminder, here is it's configuration directives including defaults:
|
||
|
```php
|
||
|
$config['email_backend'] = 'mail'; // Mail backend. Allowed: "mail" (PHP's built-in), "sendmail", "smtp".
|
||
|
$config['email_from'] = NULL; // Mail from. Default: "ProjectName" <projectid@`hostname`>
|
||
|
$config['email_user'] = $config['project_id'];
|
||
|
$config['email_sendmail_path'] = '/usr/sbin/sendmail'; // The location of the sendmail program.
|
||
|
$config['email_smtp_host'] = 'localhost'; // Outgoing SMTP server name.
|
||
|
$config['email_smtp_port'] = 25; // The port to connect.
|
||
|
$config['email_smtp_timeout'] = 10; // SMTP connection timeout in seconds.
|
||
|
$config['email_smtp_secure'] = NULL; // Enable encryption. Use 'tls' or 'ssl'
|
||
|
$config['email_smtp_auth'] = FALSE; // Whether or not to use SMTP authentication.
|
||
|
$config['email_smtp_username'] = NULL; // SMTP username.
|
||
|
$config['email_smtp_password'] = NULL; // Password for SMTP authentication.
|
||
|
```
|
||
|
|
||
|
## <a name="transports-api">API</a>
|
||
|
|
||
|
API transports definitions are a bit more complex than the E-Mail configuration.
|
||
|
The basis for configuration is `$config['alert']['transports']['api'][METHOD]` where `METHOD` can be `get`,`post` or `put`.
|
||
|
This basis has to contain an array with URLs of each API to call.
|
||
|
The URL can have the same placeholders as defined in the [Template-Syntax](#templates-syntax).
|
||
|
If the `METHOD` is `get`, all placeholders will be URL-Encoded.
|
||
|
The API transport uses cURL to call the APIs, therefore you might need to install `php5-curl` or similar in order to make it work.
|
||
|
__Note__: it is highly recommended to define own [Templates](#templates) when you want to use the API transport. The default template might exceed URL-length for GET requests and therefore cause all sorts of errors.
|
||
|
|
||
|
Example:
|
||
|
```php
|
||
|
$config['alert']['transports']['api']['get'][] = "https://api.thirdparti.es/issue?apikey=abcdefg&subject=%title";
|
||
|
```
|
||
|
|
||
|
## <a name="transports-nagios">Nagios Compatible</a>
|
||
|
|
||
|
The nagios transport will feed a FIFO at the defined location with the same format that nagios would.
|
||
|
This allows you to use other Alerting-Systems to work with LibreNMS, for example [Flapjack](http://flapjack.io).
|
||
|
```php
|
||
|
$config['alert']['transports']['nagios'] = "/path/to/my.fifo"; //Flapjack expects it to be at '/var/cache/nagios3/event_stream.fifo'
|
||
|
```
|
||
|
|
||
|
## <a name="transports-irc">IRC</a>
|
||
|
|
||
|
The IRC transports only works together with the LibreNMS IRC-Bot.
|
||
|
Configuration of the LibreNMS IRC-Bot is described [here](https://github.com/librenms/librenms/blob/master/doc/IRC-Bot.md).
|
||
|
```php
|
||
|
$config['alert']['transports']['irc'] = true;
|
||
|
```
|