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:

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).