25.2. Uptime Kuma#
Uptime Kuma remains in use alongside GNU Taler monitoring. It provides independent public availability checks and the exchange key and fee checks described below. Its monitors and notifications are configured separately from Sentol’s Prometheus probes and Alertmanager routing.
We use louislam/uptime-kuma to monitor public server and service availability. We run two servers:
https://uptimekuma.anastasis.lu/ monitors almost everything, and is our production monitor hosted by Anastasis SARL.
https://uptimekuma.taler.net/ is our secondary monitor, which monitors the production monitor.
25.2.1. Monitoring servers#
We monitor server availability using “PING”:
gv.taler.net
firefly.gnunet.org
pixel.anastasis.lu
25.2.2. Monitoring websites#
For most websites, we simply use the HTTP(s) monitor. Make sure to enable advance notice for TLS certificate expiration. Sites to monitor include:
anastasis.lu
docs.anastasis.lu
webui.anastasis.lu
gnunet.org
bib.gnunet.org
bugs.gnunet.org
docs.gnunet.org
gana.gnunet.org
git.gnunet.org
grafana.gnunet.org
lsd.gnunet.org
taler.net
bugs.taler.net
demo.taler.net
docs.taler.net
git.taler.net
mattermost.taler.net
sandstorm.taler.net
test.taler.net
tutorials.taler.net
weblate.taler.net
taler-ops.ch
taler-systems.com
schanzen.eu
25.2.3. Monitoring REST APIs#
For simple REST APIs, we simply use the HTTP(s) monitor on the /config endpoint. Make sure to enable advance notice for TLS certificate expiration. APIs to monitor include:
v1.anastasis.lu
backend.demo.taler.net
backend.head.taler.net
backend.test.taler.net
25.2.4. Monitoring services#
We also monitor the following services using the HTTP(s) monitor on the “/” endpoint:
davical.taler.net
fcfs.gnunet.org
25.2.5. Monitoring exchanges#
To monitor an exchange, we want to not merely monitor that the REST API is operational,
but also check that the /keys response is not outdated. This can be done by computing
the minimum expiration time over all of the maxima of the different keys in the response.
The HTTP(S) - JSON Query method can be
used using the following query written in https://jsonata.org/:
$min($append(
[$max($map(signkeys, function($f) { $f.stamp_expire.t_s}))],
[$max($map(denominations,
function ($a){
$max($map($a.denoms,
function ($d){
$d.stamp_expire_withdraw.t_s
}
))
}
))])) > $millis()/1000
We setup a separate monitor to check that wire fees are working (sure, they can be combined, but this way we can get a more precise alert):
$max(wire_fees[*].[*].end_date.t_s) > $millis()/1000
To separate-out global fees monitoring (which is not present on all systems), we also use (except on GLS, which doesn’t support P2P):
$max(global_fees[*].end_date.t_s) > $millis()/1000
Exchanges to monitor include:
exchange.taler-ops.ch
exchange.e.netzbon-basel.ch
exchange.demo.taler.net
exchange.head.taler.net
exchange.test.taler.net
25.2.6. Tagging monitors#
We tag each monitor with the host that the service is running on (e.g. firefly.gnunet.org).