14.2. Uptime Kuma

We use https://github.com/louislam/uptime-kuma to monitor public server and service availability. We run two servers:

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