2020-03-27 20:48:52 +00:00
|
|
|
|
Notify on host up and down
|
|
|
|
|
==========================
|
|
|
|
|
|
2023-01-10 13:45:27 +00:00
|
|
|
|
[⬅️ Go back to main README](../README.md)
|
2020-03-27 20:48:52 +00:00
|
|
|
|
|
2022-02-12 12:05:56 +00:00
|
|
|
|
> ℹ️ **Info**: This script can not be used on its own but requires the base
|
2022-02-11 22:34:39 +00:00
|
|
|
|
> installation. See [main README](../README.md) for details.
|
2021-05-03 13:07:50 +00:00
|
|
|
|
|
2020-03-27 20:48:52 +00:00
|
|
|
|
Description
|
|
|
|
|
-----------
|
|
|
|
|
|
|
|
|
|
This script sends notifications about host UP and DOWN events. In comparison
|
2022-05-11 08:24:18 +00:00
|
|
|
|
to just netwatch (`/tool/netwatch`) and its `up-script` and `down-script`
|
2020-11-17 14:03:01 +00:00
|
|
|
|
this script implements a simple state machine and dependency model. Host
|
|
|
|
|
down events are triggered only if the host is down for several checks and
|
|
|
|
|
optional parent host is not down to avoid false alerts.
|
2020-03-27 20:48:52 +00:00
|
|
|
|
|
2021-06-17 13:23:51 +00:00
|
|
|
|
### Sample notifications
|
|
|
|
|
|
2022-10-20 08:56:10 +00:00
|
|
|
|
![netwatch-notify notification down](netwatch-notify.d/notification-01-down.avif)
|
|
|
|
|
![netwatch-notify notification up](netwatch-notify.d/notification-02-up.avif)
|
2021-06-17 13:23:51 +00:00
|
|
|
|
|
2020-03-27 20:48:52 +00:00
|
|
|
|
Requirements and installation
|
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
|
|
Just install the script:
|
|
|
|
|
|
|
|
|
|
$ScriptInstallUpdate netwatch-notify;
|
|
|
|
|
|
|
|
|
|
Then add a scheduler to run it periodically:
|
|
|
|
|
|
2022-05-11 08:24:18 +00:00
|
|
|
|
/system/scheduler/add interval=1m name=netwatch-notify on-event="/system/script/run netwatch-notify;" start-time=startup;
|
2020-03-27 20:48:52 +00:00
|
|
|
|
|
|
|
|
|
Configuration
|
|
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
The hosts to be checked have to be added to netwatch with specific comment:
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=example.com" host=[ :resolve "example.com" ];
|
2020-03-27 20:48:52 +00:00
|
|
|
|
|
2023-03-20 11:22:46 +00:00
|
|
|
|
Also notification settings are required for
|
|
|
|
|
[e-mail](mod/notification-email.md),
|
2023-10-11 05:40:55 +00:00
|
|
|
|
[matrix](mod/notification-matrix.md),
|
|
|
|
|
[ntfy](mod/notification-ntfy.md) and/or
|
2023-03-20 11:22:46 +00:00
|
|
|
|
[telegram](mod/notification-telegram.md).
|
|
|
|
|
|
2022-02-08 16:39:53 +00:00
|
|
|
|
### Hooks
|
|
|
|
|
|
2020-07-06 13:54:02 +00:00
|
|
|
|
It is possible to run an up hook command (`up-hook`) or down hook command
|
|
|
|
|
(`down-hook`) when a notification is triggered. This has to be added in
|
2021-07-09 09:57:40 +00:00
|
|
|
|
comment, note that some characters need extra escaping:
|
2020-07-06 13:54:02 +00:00
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment=("notify, name=device, down-hook=/interface/ethernet \\{ disable \\\"en2\\\"; enable \\\"en2\\\"; \\}") host=10.0.0.20;
|
2020-07-06 13:54:02 +00:00
|
|
|
|
|
2021-07-09 09:27:26 +00:00
|
|
|
|
Also there is a `pre-down-hook` that fires at two thirds of failed checks
|
|
|
|
|
required for the notification. The idea is to fix the issue before a
|
|
|
|
|
notification is sent.
|
|
|
|
|
|
2023-03-20 12:32:39 +00:00
|
|
|
|
Getting the escaping right may be troublesome. Please consider adding a
|
|
|
|
|
script in `/system/script`, then running that from hook.
|
|
|
|
|
|
2022-02-08 16:39:53 +00:00
|
|
|
|
### Count threshould
|
|
|
|
|
|
2020-08-24 12:02:40 +00:00
|
|
|
|
The count threshould (default is 5 checks) is configurable as well:
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=example.com, count=10" host=104.18.144.11;
|
2020-08-24 12:02:40 +00:00
|
|
|
|
|
2022-02-08 16:39:53 +00:00
|
|
|
|
### Parents & dependencies
|
|
|
|
|
|
2020-11-17 14:03:01 +00:00
|
|
|
|
If the host is behind another checked host add a dependency, this will
|
|
|
|
|
suppress notification if the parent host is down:
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=gateway" host=93.184.216.1;
|
|
|
|
|
/tool/netwatch/add comment="notify, name=example.com, parent=gateway" host=93.184.216.34;
|
2020-11-17 14:03:01 +00:00
|
|
|
|
|
2020-11-17 21:02:41 +00:00
|
|
|
|
Note that every configured parent in a chain increases the check count
|
|
|
|
|
threshould by one.
|
2020-11-17 14:03:01 +00:00
|
|
|
|
|
2022-02-08 16:39:53 +00:00
|
|
|
|
### Update from DNS
|
|
|
|
|
|
2021-05-06 10:55:05 +00:00
|
|
|
|
The host address can be updated dynamically. Give extra parameter `resolve`
|
|
|
|
|
with a resolvable name:
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=example.com, resolve=example.com";
|
2021-05-06 10:55:05 +00:00
|
|
|
|
|
2024-02-28 21:56:43 +00:00
|
|
|
|
This supports multiple A or AAAA records for a name just fine, but be
|
|
|
|
|
warned: A CNAME to multiple records will cause a high rate of configuration
|
|
|
|
|
changes (and flash writes)!
|
2021-05-06 10:55:05 +00:00
|
|
|
|
|
2022-02-03 12:51:40 +00:00
|
|
|
|
### No notification on host down
|
|
|
|
|
|
|
|
|
|
Also suppressing the notification on host down is possible with parameter
|
|
|
|
|
`no-down-notification`. This may be desired for devices that are usually
|
|
|
|
|
powered off, but accessibility is of interest.
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=printer, no-down-notification" host=10.0.0.30;
|
2022-02-03 12:51:40 +00:00
|
|
|
|
|
|
|
|
|
Go and get your coffee ☕️ before sending the print job.
|
|
|
|
|
|
2023-03-20 11:18:32 +00:00
|
|
|
|
### Add a note in notification
|
|
|
|
|
|
|
|
|
|
For some extra information it is possible to add a text note. This is
|
|
|
|
|
included verbatim into the notification.
|
|
|
|
|
|
|
|
|
|
/tool/netwatch/add comment="notify, name=example, note=Do not touch!" host=10.0.0.31;
|
|
|
|
|
|
2021-05-05 06:28:58 +00:00
|
|
|
|
Tips & Tricks
|
|
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
### One of several hosts
|
|
|
|
|
|
|
|
|
|
Sometimes it is sufficient if one of a number of hosts is available. You can
|
|
|
|
|
make `netwatch-notify` check for that by adding several items with same
|
2022-07-05 11:23:34 +00:00
|
|
|
|
`name`. Note that `count` has to be multiplied to keep the actual time.
|
2021-05-05 06:28:58 +00:00
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=service, count=10" host=10.0.0.10;
|
|
|
|
|
/tool/netwatch/add comment="notify, name=service, count=10" host=10.0.0.20;
|
2021-05-05 06:28:58 +00:00
|
|
|
|
|
2021-06-21 07:15:05 +00:00
|
|
|
|
### Checking internet connectivity
|
|
|
|
|
|
|
|
|
|
Sometimes you can not check your gateway for internet connectivity, for
|
|
|
|
|
example when it does not respond to pings or has a dynamic address. You could
|
|
|
|
|
check `1.1.1.1` (Cloudflare DNS), `9.9.9.9` (Quad-nine DNS), `8.8.8.8`
|
|
|
|
|
(Google DNS) or any other reliable address that indicates internet
|
|
|
|
|
connectivity.
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=internet" host=1.1.1.1;
|
2021-06-21 07:15:05 +00:00
|
|
|
|
|
|
|
|
|
A target like this suits well to be parent for other checks.
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=example.com, parent=internet" host=93.184.216.34;
|
2021-06-21 07:15:05 +00:00
|
|
|
|
|
2021-07-05 12:56:51 +00:00
|
|
|
|
### Checking specific ISP
|
|
|
|
|
|
|
|
|
|
Having several ISPs for redundancy a failed link may go unnoticed without
|
|
|
|
|
proper monitoring. You can use routing-mark to monitor specific connections.
|
|
|
|
|
Create a route and firewall mangle rule.
|
|
|
|
|
|
2022-05-11 08:24:18 +00:00
|
|
|
|
/routing/table/add fib name=via-isp1;
|
|
|
|
|
/ip/route/add distance=1 gateway=isp1 routing-table=via-isp1;
|
|
|
|
|
/ip/firewall/mangle/add action=mark-routing chain=output new-routing-mark=via-isp1 dst-address=1.0.0.1 passthrough=yes;
|
2021-07-05 12:56:51 +00:00
|
|
|
|
|
|
|
|
|
Finally monitor the address with `netwatch-notify`.
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="notify, name=quad-one via isp1" host=1.0.0.1;
|
2021-07-05 12:56:51 +00:00
|
|
|
|
|
|
|
|
|
Note that *all* traffic to the given address is routed that way. In case of
|
|
|
|
|
link failure this address is not available, so use something reliable but
|
|
|
|
|
non-essential. In this example the address `1.0.0.1` is used, the same service
|
|
|
|
|
(Cloudflare DNS) is available at `1.1.1.1`.
|
2021-12-02 21:59:13 +00:00
|
|
|
|
|
2022-01-02 21:21:20 +00:00
|
|
|
|
### Use in combination with DNS and DoH management
|
|
|
|
|
|
|
|
|
|
Netwatch entries can be created to work with both - this script and
|
|
|
|
|
[netwatch-dns](netwatch-dns.md). Just give options for both:
|
|
|
|
|
|
2022-07-05 11:23:34 +00:00
|
|
|
|
/tool/netwatch/add comment="doh, notify, name=cloudflare-dns" host=1.1.1.1;
|
2022-01-02 21:21:20 +00:00
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
* [Manage DNS and DoH servers from netwatch](netwatch-dns.md)
|
|
|
|
|
|
2020-03-27 20:48:52 +00:00
|
|
|
|
---
|
2023-01-10 13:45:27 +00:00
|
|
|
|
[⬅️ Go back to main README](../README.md)
|
|
|
|
|
[⬆️ Go back to top](#top)
|