14.2. Uptime Kuma¶
We use https://github.com/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.
14.2.1. Monitoring servers¶
We monitor server availability using “PING”:
gv.taler.net
firefly.gnunet.org
pixel.anastasis.lu
14.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
14.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
14.2.4. Monitoring services¶
We also monitor the following services using the HTTP(s) monitor on the “/” endpoint:
davical.taler.net
fcfs.gnunet.org
14.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]
14.2.6. Tagging monitors¶
We tag each monitor with the host that the service is running on (e.g. firefly.gnunet.org).